尝试通过 PHP 脚本上传文件时,我确实有一个非常奇怪的行为。
首先,这里有一些信息:
- 我确实
multipart/form-data
在我的表单中将 enctype 设置为“” - 上传文件大小在 apache config 中设置为 20M
我的上传目录
/home/www/public/files/images
有一个 777 chmodls -l /home/www/public/files/ total 68K drwxrwxrwx. 90 pel pel 64K juin 23 18:06 images
现在,这是我使用的代码:
if (!empty($_FILES['image'])) {
$dir = '/home/www/public/files/images';
$extension = mb_strtolower(pathinfo($_FILES['image']['name'], PATHINFO_EXTENSION));
$newfile_name = 'myimage-with-my-name.' . $extension;
$newfile_path = $dir . '/' . $newfile_name;
if (!is_writable($dir)) {
throw new Exception('Upload: Cant write in ' . myescape($dir));
}
if (!in_array($extension, array('png', 'gif', 'jpg', 'jpeg'))) {
throw new Exception('Upload: Unsupported extension ' . myescape($extension));
}
if ($_FILES['image']['error'] > 0) {
throw new Exception('Upload: Error code ' . myescape($_FILES['image']['error']));
}
print_r($_FILES['image']);
print_r(array($_FILES['image']['tmp_name'], $newfile_path));
if (!move_uploaded_file($_FILES['image']['tmp_name'], $newfile_path)) {
die('ERROR: Upload Failed');
}
}
结果如下:
Array
(
[name] => sampleimage.jpg
[type] => image/jpeg
[tmp_name] => /tmp/phpaLjZyD
[error] => 0
[size] => 11721
)
Array
(
[0] => /tmp/phpaLjZyD
[1] => /home/www/public/files/images/myimage-with-my-name.jpg
)
Error: Upload Failed
如您所见,没有错误,没有抛出“先前”异常(is_write,extension ...),最后move_uploaded_file
失败了。
奇怪的行为是:
- move_uploaded_file 返回 false
- 然而,图像是用名称上传的,
sampleimage.jpg
而不是myimage-with-my-name.jpg
我想要的 - apache2 日志中没有错误。我在每次测试中都用 tail -f 观看
您有解决此问题的任何提示或解决方案吗?
提前致谢。