PHP上传超时:更高效的上传脚本?

PHP上传超时:更高效的上传脚本?,php,file-upload,upload,timeout,Php,File Upload,Upload,Timeout,我编写了一个非常基本的上传脚本,它使用标准的move_uploaded_file方法获取文件并上传,如下所示: //UPLOAD IMAGE $path = "../../clients/$realClient/" . $_FILES["image"]["name"][$x]; move_uploaded_file($_FILES["image"]["tmp_name"][$x], $path); $displayPath = "private/c

我编写了一个非常基本的上传脚本,它使用标准的move_uploaded_file方法获取文件并上传,如下所示:

//UPLOAD IMAGE
        $path = "../../clients/$realClient/" . $_FILES["image"]["name"][$x];
        move_uploaded_file($_FILES["image"]["tmp_name"][$x], $path);
        $displayPath = "private/clients/$realClient/" . $_FILES["image"]["name"][$x];       
        mysql_query("INSERT INTO images VALUES(NULL, '$displayPath', '$client', '$project', '$newWeight')") or die("Unable to Insert Image - Please Try Again");
        echo "File Successfully Uploaded<br />";
//上传图像
$path=“../clients/$realClient/”$_文件[“图像”][“名称”][$x];
移动上传的文件($文件[“图像”][“tmp\U名称”][$x],$path);
$displayPath=“private/clients/$realClient/”$_文件[“图像”][“名称”][$x];
mysql_查询(“插入图像值(NULL,$displayPath'、$client'、$project'、$newWeight'))或die(“无法插入图像-请重试”);
echo“文件已成功上载
”;
此上载脚本在大多数情况下都能完美工作。这是我的问题:

我有一个标准的共享主机包,所以有时候当用户试图上传一个需要5分钟才能上传的文件(比如视频或其他高分辨率媒体)时,服务器会超时。托管公司表示,由于这是一个共享托管服务器,他们不愿意为我增加超时限制

是否有一个更有效的上传脚本,可以让文件在五分钟内上传,或者您是否可以建议一个替代方案

干杯, Dan

上传完成后运行PHP脚本;因此,如果在上传过程中出现超时,那么在脚本中您将无能为力(因为它根本不会运行)

如果在脚本执行期间发生超时,可以将其拆分为多个部分-让第一个脚本只存储上载的文件,并将HTTP重定向到另一个脚本,这将完成处理和数据库工作。在您显示的脚本中,处理似乎足够简单,不确定拆分是否有帮助

假设您只显示一个简化版本:

script1.php

    // upload is complete
    $fname= basename($_FILES["image"]["name"][$x]); //prevent directory traversal
    $uniqid = uniqid("",true);
    $path = "../../clients/$realClient/temporary/" . $uniqid . '/' . $fname;
    // move to temporary location and redirect
    move_uploaded_file($_FILES["image"]["tmp_name"][$x], $path);
    header('Location: /script2.php?file=' . $uniqid . '/' . $fname);
脚本2.php

    $path = $_GET['file'];
    $uniqid = basename(dirname($path));
    $fname = basename($path);
    $temp_path = "../../clients/$realClient/temporary/" . $uniqid . '/' . $fname;
    $final_path = "../../clients/$realClient/" . $fname;
    move($temp_path,$final_path);

    // do whatever processing is necessary
    mysql_query("INSERT INTO images VALUES(NULL, '$displayPath', '$client', '$project', '$newWeight')") or die("Unable to Insert Image - Please Try Again");
    echo "File Successfully Uploaded<br />";
$path=$\u GET['file'];
$uniqid=basename(dirname($path));
$fname=basename($path);
$temp_path=“../../clients/$realClient/temporary/”$uniqid.“/”$fname;
$final_path=“../../clients/$realClient/”$fname;
移动($temp\u path,$final\u path);
//做任何必要的处理
mysql_查询(“插入图像值(NULL,$displayPath'、$client'、$project'、$newWeight'))或die(“无法插入图像-请重试”);
echo“文件已成功上载
”;
我该怎么做呢?@Daniel Hanly:在答案中添加了这一点。谢谢你的解决方案。我会接受你的回答,但我也明白,这可能不会减少太多时间,因为:就像你说的,PHP是在文件上传后运行的。哈,干杯,但不幸的是,这是我的工作,不是我自己的责任,他们不会改变这一点,可能会让你处于困难和困难之间,因为你可能没有办法解决这个问题。