【问题标题】:Weird PHP file upload issue奇怪的PHP文件上传问题
【发布时间】:2011-01-19 23:12:32
【问题描述】:

在我的 Windows 系统上上传文件时遇到奇怪的问题。我在服务器上使用带有 iis7 的 Windows 7。我正在尝试使用本地 IP 10.47.47.13 的客户端组合,服务器是 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 15 KB 的文件时,页面会在一段时间后超时。我检查了 php.ini 设置文件上传是否打开,我将临时文件夹设置为 c:\uploads 只是为了测试。正如我所说,它适用于 1 或 2 KB 的文件,但即使我选择 10 或 20 KB 的文件也不行。我什至删除了 PHP 代码(对所有内容进行了注释),以查看即使什么都没做,它也可以工作,但它没有。

任何帮助将不胜感激。

【问题讨论】:

    标签: php file-upload timeout


    【解决方案1】:

    您的文件大小限制可能较低。要检查这一点:创建一个新的 php 文件,称为 info.php 或其他任何内容,然后编写

    <?php
    phpinfo();
    ?>
    

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

    【讨论】:

      【解决方案2】:

      这可能不是,但作为记录,您的表单应该有一个 MAX_FILE_SIZE 隐藏输入,其字节数对应于最大上传大小

      【讨论】:

        【解决方案3】:

        我认为 Cryo 有问题,是不是 php.ini 文件配置不正确,最大文件大小过小?

        【讨论】:

          【解决方案4】:

          我的猜测是您的 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 进行非阻塞 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";
          }
          

          【讨论】:

          • 我试过了。但即使是 10KB 的文件也无法上传大于 2 3KB 的文件。它仍然超时。正如我之前所说,我尝试了一些文件,如 1 2 kb 并上传。我已经在尝试各种大小的 txt 文件,但无法上传。
          • @murphy 即使添加了 FTP 超时设置脚本超时?您可以尝试将其缩短到 10 秒。
          • 如果我从服务器运行我的脚本(如localhost/3.php),它工作正常,但从客户端尝试时超时(来自客户端 10.47.47.13 的10.47.47.1/3.php)我认为这可能是文件夹权限或限制阻止上传过程。我没有更改 php.ini 中的 upload_tmp 文件夹,所以它是 windows/temp。
          • @murphy 很奇怪。如果是这种情况,听起来问题实际上出在上传过程本身,某些原因导致您的 Web 服务器需要很长时间来处理该文件。您是否偶然在您的网络服务器上配置了任何防病毒软件?如果您增加 php.ini 中的 max_execution_time 设置,您的脚本在从远程主机运行时最终会返回吗?
          • 我试了 10 秒。但我认为它不起作用它仍然会尝试几分钟。我还尝试了 move_uploaded_file 命令而不是 ftp_put,方法是将所有 ftp 代码替换为 if(move_uploaded_file($source_file, "$destination_file")) echo "ok";否则回显“nok”;但它不起作用:(
          【解决方案5】:

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

          【讨论】:

          • 我正在尝试上传与 php 文件所在位置相同的位置。 wwwroot 文件夹。正确的上传设置是什么意思。 IIS上有这样的设置吗?
          猜你喜欢
          • 1970-01-01
          • 2012-04-15
          • 1970-01-01
          • 2011-04-02
          • 2012-04-17
          • 2011-01-01
          • 2016-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多