我已经查看了大约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
答案 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移动它。函数调用重命名,一切都很好。