move_uploaded_file oddness:"文件无法正确上传"

时间:2014-09-22 15:56:38

标签: php

我已经查看了大约5个这样的问题,但没有一个问题解决了我的问题。这是最有帮助但仍未解决的问题PHP move_uploaded_file yet another not working

以下是有问题的代码以及顶部的调试代码。

$tempPath = $_FILES[ 'file' ][ 'tmp_name' ];    
error_reporting(E_ALL); ini_set('display_errors', 1);
$uploadPath = storage_path() . '/uploads/' . 'test' . '.csv';
$targetDir = storage_path() . '/uploads/';
$realTargetDir = realpath($targetDir);

echo '<pre>Debug: tmp file:', htmlspecialchars($tempPath), "</pre>\n";
echo '<pre>Debug: target directory: ', htmlspecialchars($targetDir), "</pre>\n";
echo '<pre>Debug: real target: ', htmlspecialchars($realTargetDir), "</pre>\n";
echo '<pre>Debug: source readable: ', is_readable($tempPath), "</pre>\n";
echo '<pre>Debug: target is_dir: ', is_dir($targetDir) ? 'yes':'no', "</pre>\n";
echo '<pre>Debug: target writable: ', is_writeable($targetDir) ? 'yes':'no', "</pre>\n";

if(!move_uploaded_file( $tempPath, $uploadPath )) {
    dd("File was not able to be uploaded properly.");
}

这将输出以下内容。

Debug: tmp file:/tmp/phpeFIjWc
Debug: target directory: /var/www/default/api/orgsync/app/storage/uploads/
Debug: real target: /var/www/default/api/orgsync/app/storage/uploads
Debug: source readable: 1
Debug: target is_dir: yes
Debug: target writable: yes
string 'File was not able to be uploaded properly.' (length=42)

根据我的理解,这正是我想要的。我有一个可读文件和一个可写目录。 $ _FILES ['file'] ['error']也向我吐出一个0。

这些文件全部归www-data用户所有,我检查的组是在httpd.conf文件中的用户和组中设置的。

 User www-data
 Group www-data

我真的不知道接下来我应该采取什么步骤进行调试。如果这有任何区别,那就是在流浪盒上。

按要求挂载积分我的MrTux:

Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/mapper/VolGroup-lv_root
                      18618236   3413824  14258648  20% /
tmpfs                   380120         0    380120   0% /dev/shm
/dev/sda1               495844     34543    435701   8% /boot
WCRzK17j3F03         125032444 112697476  12334968  91% /var/www
vagrant              125032444 112697476  12334968  91% /vagrant
tmp_vagrant-puppet-3_manifests
                     125032444 112697476  12334968  91% /tmp/vagrant-puppet-3/manifests
tmp_vagrant-puppet-3_modules-0
                     125032444 112697476  12334968  91% /tmp/vagrant-puppet-3/modules-0

3 个答案:

答案 0 :(得分:1)

由于is_uploaded_file返回false,这就是真正的问题所在 - 因为move_uploaded_file执行相同的检查,拒绝做任何事情,只有在得出文件的结论时才返回false问题实际上并非源自PHP收到的HTTP文件上传。

所以,你必须......并弄清楚为什么这条路径不是实际上传的临时文件的路径。

答案 1 :(得分:0)

move_uploaded_files()需要完整路径+文件名(或至少是文件名)。你只提供一条路径。

e.g。

move_uploaded_files($source, '/upload/destination/'); //invalid
move_uploaded_files($source, '/upload/destination/foo.txt'); //VALID
                    you MUST provide a filename---^^^^^^^

0获取['error']表示该文件已成功上传 - 您只是没有正确移动它。

答案 2 :(得分:0)

好的,问题是我正在使用另一个库,并没有意识到它正在移动tmp文件的上传位置。虽然我得到了正确的位置返回给我并且文件存在但我无法再使用move_uploaded_file移动它。函数调用重命名,一切都很好。