【发布时间】:2014-01-07 04:51:33
【问题描述】:
这已经困扰我好几个小时了..
我正在用 angularjs 编写一个应用程序,并试图让文件上传的 php 端正常工作。
似乎 php 脚本正在尝试将文件从 /tmp/randomuniquefilename 复制到正确的目录。问题是我根本不希望它存储在我的根临时文件夹中。我已将 PHP.ini 默认文件上传路径更改为 /var/www/tmp/ /var/www/tmp/ 文件夹存在并具有正确的权限。
我想知道我的$_FILES[ 'file' ][ 'tmp_name' ] 变量的设置方式/位置,以便我可以更改它。我之前确实尝试过简单的$_FILES[ 'file' ][ 'tmp_name' ] = '/var/www/tmp/' 这对我不起作用。
我的 php 错误:
[2014 年 1 月 7 日星期二 15:46:14] [错误] [客户端 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] [error] [client 127.0.0.1] PHP Warning: move_uploaded_file(): Unable to move '/tmp/phpbkz0xn' to '/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/ 而不仅仅是文件名,这正常吗?
【问题讨论】:
-
您在更改
php.ini后是否重新启动了Web 服务器?仅供参考,tmp_name设置在服务器端,您的 permission denied 错误与源文件无关,但与目标路径无关 -
是的,我知道了,谢谢,没有时间处理目标路径,只想获取正确的源路径。
-
检查
phpinfo()为upload_tmp_dir设置显示的内容。此外,tmp_name将包含完整路径。你不要在它前面加上任何东西 -
好的,所以默认设置
tmp_name?我现在就这样做谢谢 -
是的,通常
move_uploaded_file()的第一个参数就是$_FILES['file']['tmp_name']。另请注意手册 - “如果此处指定的目录 (upload_tmp_dir) 不可写,则 PHP 将回退到系统默认临时目录。”。这可以解释你所看到的。如果系统 tmp 目录可用,使用它也没有任何问题