2
if(isset($_POST['add_magazine']))
{
    $magazine_images=array();
    $magazine_images=implode(",",$_FILES['images']['name']);

    $path="images/magazines/";
    $mag_img=array();
    $mag_img=explode(",",$magazine_images);
    $img_count=count($mag_img);

    move_uploaded_file($_FILES['cover']['tmp_name'],$path . $_FILES['cover']['name']);
    for($i=0;$i<$img_count;$i++)
    {
        move_uploaded_file($_FILES['images']['tmp_name'][$i],$path . $mag_img[$i]);
    }
}

HTML 代码:

<tr>
    <th valign="top">Magazine Images</th>
    <td>:</td>
    <td><input type="file" name="images[]" value="" multiple></td>
</tr>

我制作了一个用于一次上传 40 或 50 多个文件的 php 表单。当我在本地服务器上运行此表单时,它会上传数据库中的所有文件,但是当我在实时服务器上运行此表单时,上传文件需要太多时间,它只上传 19 或 20 个文件。

为什么会发生这种情况,解决方案是什么?这是因为服务器超时吗?

4

4 回答 4

4

如果您无法控制服务器配置,您可以使用 javascript 上传文件以防止文件上传超时。作为奖励,您可以创建一个不错的进度条。

于 2012-10-20T11:06:36.023 回答
4

您需要更改max_execution_time = 30为所需的值并重新启动服务器。

顺便说一句,将文件存储在数据库中并不是一个好主意(正如您在问题中提到的那样)。将它们保存在文件系统和数据库存储链接到上传文件。

注意:也可能影响上传过程的事情:

  1. 最大输入时间 = 60
  2. post_max_size = 8M
  3. 上传最大文件大小 = 128M

如果您无权访问 php.ini,您可以使用 php 脚本直接设置它ini_set

ini_set('max_execution_time', $desiredValueInSeconds);
于 2012-10-20T11:03:27.443 回答
1

假设您遇到了类似的致命错误Maximum execution time of [amount of] seconds exceeded

php.ini文件中有一个设置max_execution_time。此设置很可能在实时服务器上更短(有充分的理由)。

如果您无法在实时服务器上修改此值,您可以使用该set_time_limit选项在运行时更改此设置的值。以这种方式增加秒数仅适用于执行脚本。

http://php.net/manual/en/function.set-time-limit.php

于 2012-10-20T11:07:07.130 回答
1

许多网络服务器都有一个设置max_input_time(在 Apache 上),它定义了它们等待发布数据的时间,无论大小。如果这个时间用完,连接就会关闭,甚至不接触 php.ini。

所以你的问题不一定只能用 php 解决,但你需要更改服务器设置。

你可以试试这个:

将此添加到 htaccess 文件中:

<IfModule mod_php5.c>
php_value post_max_size 200M
php_value upload_max_filesize 200M
php_value memory_limit 300M
php_value max_execution_time 259200
php_value max_input_time 259200
php_value session.gc_maxlifetime 1200
</IfModule>

在http://www.pacecode.com/blog/2008/09/22/magic-with-htaccess-file-increase-execution-time-session-expiry-time-and-file-upload-上阅读有关这些设置的更多信息尺寸限制/

于 2012-10-21T07:53:12.657 回答