奇怪的PHP文件上传问题

时间:2010-02-23 07:59:54

标签: php file-upload timeout

我在Windows系统上有关于文件上传的奇怪问题。我在服务器上使用带有iis7的Windows 7。我正在尝试使用本地IP 10.47.47.13的客户端comp,服务器是10.47.47.1

我有一个非常简单的形式,在某些情况下我无法使其工作。该页面保留在wwwroot上。 (http://10.47.47.1/3.php

3.php

<?php
 $source_file=$_FILES["newsimg"]["tmp_name"];   
 $destination_file="123.jpg";
 $ftp_server="localhost";
 $ftp_username="admin";
 $ftp_password="apple";

  if ($source_file!="") {
    $mrph_connect = ftp_connect($ftp_server,21);
    $mrph_login= ftp_login($mrph_connect, $ftp_username, $ftp_password);   
    if (($mrph_connect) && ($mrph_login)) {
      $upload = ftp_put($mrph_connect, $destination_file, $source_file, FTP_BINARY);
      if ($upload) echo "ok"; else echo "nok";
    }
  }

?>

<body>
<form enctype="multipart/form-data" action="3.php" method="POST">
  <input type=file  name=newsimg>
  <input type=submit name=mrph>
</form>
</body>

表单调用自身上传文件。当我选择大小为1或2 KB的文件时,它可以工作,但是当我选择一个甚至10 15KB的文件后,页面超时一段时间后。我检查了php.ini设置文件上传是否打开,我将临时文件夹设置为c:\uploads只是为了测试。正如我所说的工作文件大小为1或2KB,但即使我选择10或20KB的文件。我甚至删除了PHP代码(注释了所有内容),以便即使什么都没有完成它也可以工作,但事实并非如此。

任何帮助都将不胜感激。

5 个答案:

答案 0 :(得分:0)

对我来说,问题似乎是你上传文件,服务器的地方;上传没有任何问题,因为您 能够上传较小的文件,但是当您上传20 kb大小的文件时,您失败了,请检查以确保在您想要的服务器上指定正确的上传设置将文件上传到。使用ftp并上传到不同的服务器/位置本身是一个缓慢的过程。您的代码似乎也是正确的。

答案 1 :(得分:0)

我的猜测是你的ftp_put超时,尝试将你的FTP超时阈值设置为低于PHP的默认值(30秒):

$mrph_connect = ftp_connect($ftp_server,21);

ftp_set_option($mrph_connect, FTP_TIMEOUT_SEC, 20);

$mrph_login= ftp_login($mrph_connect, $ftp_username, $ftp_password);   
if (($mrph_connect) && ($mrph_login)) {
  $upload = ftp_put($mrph_connect, $destination_file, $source_file, FTP_BINARY);
  if ($upload) echo "ok"; else echo "nok";
}

如果进行调整会导致脚本返回'nok',那么你就会知道看跌期限太长了。

如果put是您的问题,请尝试使用ftp_nb_put进行非阻塞放置,以异步方式FTP文件:

$mrph_connect = ftp_connect($ftp_server,21);
$mrph_login= ftp_login($mrph_connect, $ftp_username, $ftp_password);   
if (($mrph_connect) && ($mrph_login)) {

  $ret = ftp_nb_put($mrph_connect, $destination_file, $source_file, FTP_BINARY);
  while ($ret == FTP_MOREDATA) {
    $ret = ftp_nb_continue($mrph_connect);
  }

  if ($ret == FTP_FINISHED) echo "ok"; else echo "nok";
}

答案 2 :(得分:0)

我认为Cryo是关于什么的,可能是php.ini文件没有正确配置而且最大文件大小是不是很低?

答案 3 :(得分:0)

这可能不是它,但是对于记录,您的表单应该具有MAX_FILE_SIZE隐藏输入,其中字节数对应于最大上载大小

答案 4 :(得分:0)

您的文件大小限制可能较低。要检查一下:创建一个名为info.php或者其他的新php文件,然后编写

<?php
phpinfo();
?>

在浏览器中打开该页面,然后搜索upload_max_filesize。检查那个值;如果它只有几千字节,那就是你的问题。如果是这种情况,你将不得不修改你的php.ini(在Apache下你也可以在.htaccess文件中使用一个指令,但我不认为IIS有这样的东西)。此文件的位置可能因安装而异,但可能是C:\Windows\php.ini。找到upload_max_filesize指令并将其更改为更大的指令。默认值为2兆字节(2M),但你可以做任何事情。