Firefox上传表单问题

时间:2010-02-27 15:34:58

标签: php firefox forms timeout enctype

我在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问题。

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

7 个答案:

答案 0 :(得分:2)

好的,我正好想到这个,你可能会认为这只是一个愚蠢的错误,但请继续阅读。

如果我没有&lt; html&gt;&lt; body&gt; .. etc标签,只是.. .. / / p>

<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>

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

就目前而言,尽管将表单代码放在一个单独的文件中应该没有什么区别,因为它全部放在服务器端。

答案 1 :(得分:0)

有时候,相对路径会被不同的浏览器区分开来,但实际上并不确定,而是尝试通过在./前加上路径来指定当前目录,例如:

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

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

答案 2 :(得分:0)

万一你使用最新的FF 3.6我遇到了完全相同的问题,任何加载一个大文件的表单(1MB它应该)似乎阻止了FF上传。 在IE7 / Safari / Opera上它可以工作。

答案 3 :(得分:0)

然后当您右键单击FF并查看源代码时,它应该与上面代码中的内容完全相同(如果我有正确的标签,如下所示)。

答案 4 :(得分:0)

来自xhtml 1.0 specification

  

HTML 4定义了name属性   元素a,小程序,形式,框架,   iframe,img和map。 HTML 4也   介绍了id属性。两者的   这些属性被设计为   用作片段标识符。

     

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

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

答案 5 :(得分:0)

FireFox可能包含if (isset($_POST['submit'])) {和变量$_POST['submit']可能有问题吗?

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

答案 6 :(得分:0)

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

MANY 感谢您指向AVG Link扫描仪...禁用它确实解决了问题但仍然让我觉得FF有一个错误,因为“所有”其他浏览器与AVG Link很好地配合扫描仪。