3

我在 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 surf shield 引起了这个问题,并且有很多报告称其他人也有类似的问题。我从 AVG Free v9.0.733 更新到 v9.0.790,但我仍然遇到同样的问题。我将浏览 AVG 支持论坛,并可能在那里发布一些内容,因为这似乎是一个 AVG 问题。

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

4

7 回答 7

2

好的,我在这方面有所了解,您可能认为这只是一个愚蠢的错误,但请继续阅读。

如果我没有 < 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>

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

据我所知,尽管将表单代码放在单独的文件中应该没有什么区别,因为它全部放在服务器端。

于 2010-02-28T21:25:35.793 回答
0

来自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 属性。

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

于 2010-03-09T17:40:02.563 回答
0

也许有什么问题,if (isset($_POST['submit'])) {并且该变量$_POST['submit']不包含在 FireFox 中?

<pre>
    <?PHP
        print_r($_POST);
    ?>
</pre>
于 2010-03-15T01:14:31.193 回答
0

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

于 2010-03-08T16:47:40.230 回答
0

有时,不同的浏览器对相对路径的感知不同,实际上并不确定,但尝试通过在路径前加上前缀来指定当前目录./,例如:

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

其余的代码对我来说看起来不错。

于 2010-02-27T18:47:29.177 回答
0

这对您没有太大帮助,但我遇到了完全相同的问题。我什至重新安装了 FF,清除了缓存,直接剥离了代码(变成了一个非常简单的形式,没有经过验证,并且所有 PHP 都被剥离了——无论是在加载时还是在回发时)。我在 FF 3.6.13 中遇到了问题,并且已经针对当前版本的 Safari(win)、Chrome、Opera 和 IE 进行了测试,其中代码都可以完美运行。我的代码验证为严格的 XHTML,并且上面的所有建议都已经存在......而且我正在使用我的本地(在同一台计算机上)网站。

非常感谢您将我指向 AVG Link 扫描仪...禁用它确实可以解决问题,但这仍然让我认为 FF 存在错误,因为“所有”其他浏览器都可以很好地使用 AVG Link 扫描仪。

于 2011-02-06T17:57:16.777 回答
0

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

于 2010-02-28T11:06:51.953 回答