这一直困扰我好几个小时..
我正在用angularjs编写一个应用程序,并尝试让文件上传的php端工作。
似乎php脚本试图将文件从/ tmp / randomuniquefilename复制到正确的目录。问题是我根本不希望它存储在我的root temp文件夹中。我已将PHP.ini默认文件上传路径更改为/ var / www / tmp / / var / www / tmp /文件夹,并且具有正确的权限。我想知道我的$_FILES[ 'file' ][ 'tmp_name' ]
变量是如何设置的,所以我可以更改它...我之前尝试过简单$_FILES[ 'file' ][ 'tmp_name' ] = '/var/www/tmp/'
这对我不起作用。
我的php错误:
[Tue Jan 07 15:46:14 2014] [error] [client 127.0.0.1] PHP警告:move_uploaded_file(/var/www/funandgames/jobernize/uploaded/bleg.png):无法打开流:权限在第18行的/var/www/funandgames/jobernize/uploaded/test.php中被拒绝,引用者:
http://127.0.0.1/funandgames/jobernize/
[Tue Jan 07 15:46:14 2014] [错误] [client 127.0.0.1] PHP警告:move_uploaded_file():无法将'/ tmp / phpbkz0xn'移动到'/ var / www / funandgames / jobernize /在第18行/var/www/funandgames/jobernize/uploaded/test.php上传/ bleg.png',引用者:
http://127.0.0.1/funandgames/jobernize/
可能是我的js设置var,还是PHP?
这是我的php:
<?php
if ( !empty( $_FILES ) ) {
function varDumpToString ($var)
{
ob_start();
var_dump($var);
$result = ob_get_clean();
error_log($result);
}
varDumpToString($_FILES);
$tempPath = '/var/www' . $_FILES[ 'file' ][ 'tmp_name' ];
$uploadPath = dirname( __FILE__ ) . '/' . $_FILES[ 'file' ][ 'name' ];
error_log($tempPath);
move_uploaded_file( $tempPath, $uploadPath );
$answer = array( 'answer' => 'File transfer completed' );
$json = json_encode( $answer );
echo $json;
} else {
echo 'No files';
}
?>
我只是将/ var / www添加到路径中,现在我没有收到任何错误,但没有发生任何事情,文件没有被复制。
由于某种原因,似乎临时名称包含/ tmp /而不仅仅是文件名,这是正常的吗?
答案 0 :(得分:1)
只需将tmp_file_upload的权限更改为755以下是命令chmod -R 755 tmp_file_upload
这是因为images
和tmp_file_upload
只能由root
用户写入。要上传到工作,我们需要使这些文件夹的所有者与httpd进程所有者相同,或者使它们全局可写(不良做法)。
$ps aux | grep httpd
。第一列通常是nobody
将images
和tmp_file_upload
的所有者更改为nobody
或您在步骤1中找到的所有者。
$sudo chown nobody /var/www/html/mysite/images/
$sudo chown nobody /var/www/html/mysite/tmp_file_upload/
Chmod images
和tmp_file_upload
现在可以由所有者写入,如果需要[似乎你已经有了这个]。在@Dmitry Teplyakov的回答中提到。
$ sudo chmod -R 0755 /var/www/html/mysite/images/
$ sudo chmod -R 0755 /var/www/html/mysite/tmp_file_upload/
有关此行为发生的详细信息,请查看手册http://php.net/manual/en/ini.core.php#ini.upload-tmp-dir,注意它还在讨论open_basedir
指令。