我似乎有一个奇怪的错误,我无法弄明白。我的网站正在一台服务器上运行,但是当我将它转移到新服务器时,它就停止了工作。我相信我已经将错误缩小到这行代码:
$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上传的。
答案 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是在不同的用户下运行的?我不太确定整个权限的工作原理。让我感到困惑的是mkdir
和move_uploaded_file
没有失败并返回错误的原因......