繁体   English   中英

Firefox上传表单问题

[英]Firefox Upload Form Issue

我在php中创建了一个上传脚本,它接受一个文件,调整大小,并创建一个裁剪的方形缩略图。 脚本本身似乎工作正常。

但是,当我尝试通过Firefox上传图像时,单击提交按钮时,浏览器会显示加载动画,但它从不调用脚本,它只保留在当前页面上。 如果不上传图像,则可以找到并运行脚本。

我在safari中尝试过,我没有遇到同样的问题,我可以从表单上传图像,它会处理它并带我正确的页面。

我已经厌倦了从表单中调用一个基本脚本,它只打印出$ _POST和$ _FILES,我得到相同的结果,如果有图像,它将无法访问脚本,如果没有图像目前,它运行良好。

我只是想知道是否有人知道发生了什么事?


= =更新

好吧,所以我仍然遇到这个问题,我似乎认为我已经找到了导致它的原因,但后来我发现了一些完全与之相矛盾的东西。

目前,我已经注意到我可以在清除我的Firefox缓存后成功上传,但我只能上传一个图像,然后当我尝试上传另一个时,我不能,它只是在“加载后”重置连接。 ..“ 就一点点。

另外,我注意到我可以按Ctrl + F5几次并再次上传。

虽然有办法解决这个问题,但我不希望有一个表单需要用户清除cookie或每次需要上传时刷新。 正如我之前提到的,IE / Opera / Safari / Chrome中不会出现此错误。

好像Firefox存储的东西,我不知道是什么。 任何帮助将不胜感激。

如果它有帮助,我正在使用的代码。

HTML表单

<form enctype="multipart/form-data" action="<?php echo $_SERVER["PHP_SELF"]; ?>" method="POST">
<label for="file">Choose a file to upload</label>
<input id="file" name="file" type="file" /><br />
<input type="submit" value="Upload File" name="submit" />

和PHP:

if (isset($_POST['submit'])) {

  echo "Processing...<br/>";

  if (isset($_FILES['file']['name'])) {
      $file_array = $_FILES['file'];

      echo "Uploading...";
      upload File($file_array);
      echo "...Done";

  }
}

回声让我看看发生了什么。 如果它们实际上都没有输出。 因此,由于某种原因,表格未提交。 这就是为什么它没有进入脚本。 我不知道为什么。 我没有CSS或JavaScript错误。

==更新==

好吧,我正在尝试更多的东西,但仍然没有运气,HTML,CSS和JavaScript都是有效的。 我已经完成了IIS重置,我重新创建了我的Firefox配置文件。 现在还好运。

我再次测试它,这次我在加载过程中停止了它(在连接重置之前)然后尝试去网站的另一页,并且冻结继续,它仍然会说“正在加载.. 。“和”等待本地主机......“。 不知道该怎么做,我有一些设置吗? 但那么为什么它不影响其他浏览器呢?

==更新==

正如我在下面提到的,似乎AVG Linkscanner / Active冲浪盾似乎导致了这个问题,并且有很多其他人报告有类似问题。 我从AVG Free v9.0.733更新到v9.0.790,我仍然遇到同样的问题。 我打算浏览AVG支持论坛,也许在那里发布一些东西,因为它似乎是一个AVG问题。

如果有人有任何更多的见解,请在下面发布。 非常感谢:)

好吧,即便到这个地方,你可能会认为这只是一个愚蠢的错误,但请继续阅读。

如果我没有<html> <body> .. etc标签,只是...

<form enctype="multipart/form-data" action="up.php" method="POST">
    <label for="file">Choose a file to upload</label>
    <input id="file" name="file" type="file" /><br />
    <input type="submit" value="Upload File" name="submit" />
</form>

然后我得到这个问题,firefox将在表单提交时挂起。

如果我有正确的标签,如..

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 


<head>
<title></title>
<link href="style.css" rel="stylesheet" type="text/css" />
</head>

<body >

    <form enctype="multipart/form-data" action="up.php" method="POST">
    <label for="file">Choose a file to upload</label>
    <input id="file" name="file" type="file" /><br />
    <input type="submit" value="Upload File" name="submit" />
    </form>

</body>

</html>

然后它似乎有效。 现在这看起来很简单,但我动态构建我的页面,所以我只有一个文件,其中只包含页面中包含的表单代码。

就目前而言,虽然在单独的文件中使用表单代码应该没有区别,因为它全部放在一起服务器端。

有时候,不同的浏览器会对不同的相对路径产生不同的感知,但实际上并不确定,而是尝试通过使用./前缀路径来指定当前目录 ,例如:

$target_path = "./public/photos/";

其余代码对我来说很好看。

如果您使用的是最新的FF 3.6,我遇到了完全相同的问题,任何加载大文件的表单(1MB)都会阻止FF上传。 在IE7 / Safari / Opera上它可以工作。

然后当你右键单击FF并查看源代码时,它应该看起来与上面的代码完全一样(在“如果我有正确的标签,如......”下面)。

来自xhtml 1.0规范

HTML 4定义了元素a,applet,form,frame,iframe,img和map的name属性。 HTML 4还引入了id属性。 这两个属性都被设计为用作片段标识符。

在XML中,片段标识符的类型为ID,每个元素只能有一个ID类型的属性。 因此,在XHTML 1.0中,id属性被定义为ID类型。 为了确保XHTML 1.0文档是结构良好的XML文档,在上面列出的元素上定义片段标识符时,XHTML 1.0文档必须使用id属性。

也许在form添加id可以解决您的问题。

也许错误的if (isset($_POST['submit'])) {和FireFox不包含变量$_POST['submit']

<pre>
    <?PHP
        print_r($_POST);
    ?>
</pre>

这对你没什么帮助,但我确实遇到了同样的问题。 我甚至重新安装了FF,清除了缓存,向右删除了代码(一个非常简单的形式,没有验证,所有PHP都被剥离 - 无论是在加载还是在回发后)。 我在FF 3.6.13中遇到了问题,并且针对当前版本的Safari(win),Chrome,Opera和IE进行了测试,其中代码都完美无缺。 我的代码验证为严格的XHTML,上面的所有建议已经在那里......我正在使用我的本地(在同一台计算机上)网站。

非常感谢您指出我对AVG链接扫描仪...禁用它确实解决这个问题,但仍然让我思考FF有一个错误的“所有”其他浏览器上的AVG链接扫描仪发挥很好。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM