move_uploaded_file挂起?

时间:2009-06-13 07:35:32

标签: php upload flash apache2

我似乎有一个奇怪的错误,我无法弄明白。我的网站正在一台服务器上运行,但是当我将它转移到新服务器时,它就停止了工作。我相信我已经将错误缩小到这行代码:

$ret = move_uploaded_file($tmp_name, $orig_path);

这是通过AJAX调用执行的,因此调试有点棘手,但脚本可以发回错误代码,然后我的JavaScript将alert。所以,我把它包装在其中两个调试语句中:

echo json_encode(array(

    'success' => false,

    'errno' => $tmp_name.' -> '.$orig_path,

));

exit;



$ret = move_uploaded_file($tmp_name, $orig_path);



echo json_encode(array(

    'success' => false,

    'errno' => 'no error',

));

exit;

第一个工作正常并吐出类似的东西:

error /tmp/phpk3RICU -> /home/username/Websites/website/photos/o/2-4a3354dd017a9.jpg

也许我有点像Linux菜鸟,但我实际上无法在我的系统上找到/tmp/phpk3RICU(一旦脚本退出或者是什么,它会被删除吗?)。更多关于这一点的事情。

如果我删除第一个调试检查并让move_uploaded_file运行,则第二次调试检查似乎永远不会被执行,这使我相信move_uploaded_file正在挂起。

如果不使用$tmp_name我使用的文件知道不存在,那么第二次检查就会被执行。所以......似乎它只是不想移动那个tmp文件,但它没有报告错误。

我正在我的Unbutu机器上运行全新的LAMP堆栈,通过apt-get安装...如果您需要更多信息,请告诉我。

哦..并且不知道它是否相关,但文件是通过flash上​​传的。

3 个答案:

答案 0 :(得分:1)

您是否通过AJAX通话上传文件? 一旦您上传的脚本完成执行就会删除上传的文件 - 这就是您无法在/ tmp中找到它的原因。

答案 1 :(得分:1)

尝试告诉PHP吐出所有错误:

error_reporting(E_ALL);

可能是配置差异导致您在其中一台服务器上破坏它。来自move_uploaded_file() manual页面:

  

注意:move_uploaded_file()都是   安全模式和open_basedir意识到。   但是,仅限制   在目标路径上允许   移动上传的文件   文件名可能会与此冲突   限制。 move_uploaded_file()   确保此操作的安全性   只允许上传的文件   通过PHP移动。

答案 2 :(得分:0)

唉。问题在于权限。 755在另一台服务器上已经足够了,但似乎不是这台服务器......不太确定为什么,我猜PHP是在不同的用户下运行的?我不太确定整个权限的工作原理。让我感到困惑的是mkdirmove_uploaded_file没有失败并返回错误的原因......