Php 在哪里设置我的$u文件[';temp#u name';]-angularjs应用程序

Php 在哪里设置我的$u文件[';temp#u name';]-angularjs应用程序,php,angularjs,Php,Angularjs,这件事已经困扰我好几个小时了 我正在用angularjs编写一个应用程序,并试图让文件上传的php端正常工作 php脚本似乎试图将文件从/tmp/randomuniquefilename复制到正确的目录。问题是我根本不希望它存储在我的根临时文件夹中。我已将PHP.ini默认文件上载路径更改为/var/www/tmp/the/var/www/tmp/文件夹存在并具有正确的权限 我想知道如何/在哪里设置我的$\u文件['file']['tmp\u name']变量,以便我可以更改它。。我以前只尝试了

这件事已经困扰我好几个小时了

我正在用angularjs编写一个应用程序,并试图让文件上传的php端正常工作

php脚本似乎试图将文件从/tmp/randomuniquefilename复制到正确的目录。问题是我根本不希望它存储在我的根临时文件夹中。我已将PHP.ini默认文件上载路径更改为/var/www/tmp/the/var/www/tmp/文件夹存在并具有正确的权限

我想知道如何/在哪里设置我的
$\u文件['file']['tmp\u name']
变量,以便我可以更改它。。我以前只尝试了
$\u文件['file']['tmp\u name']='/var/www/tmp/'
,但这对我不起作用

我的php错误:

[Tue Jan 07 15:46:14 2014][error][client 127.0.0.1]PHP警告:移动上传的文件(/var/www/funandgames/jobernize/upload/bleg.png):无法打开流:第18行/var/www/funandgames/jobernize/upload/test.PHP中的权限被拒绝,请参考:
http://127.0.0.1/funandgames/jobernize/

[Tue Jan 07 15:46:14 2014][error][client 127.0.0.1]PHP警告:移动上传的文件():无法将“/tmp/phpbkz0xn”移动到“/var/www/funandgames/jobernize/upload/bleg.png”中的/var/www/funandgames/jobernize/upload/test.PHP”,请参考:
http://127.0.0.1/funandgames/jobernize/

可能是我的js设置,还是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添加到路径中,现在我没有收到任何错误,但是没有发生任何事情,文件没有被复制


由于某种原因,temp name似乎包含/tmp/而不仅仅是一个文件名,这正常吗?

只需将tmp\u file\u upload的权限更改为755以下是命令chmod-R 755 tmp\u file\u upload

这是因为
images
tmp\u file\u upload
只能由
root
用户写入。为了使上传工作正常进行,我们需要使这些文件夹的所有者与httpd进程所有者相同,或者使它们全局可写(糟糕的做法)

  • 检查apache进程所有者:
    $ps aux | grep httpd
    。第一列是所有者,通常是
    nobody
  • images
    tmp\u file\u upload
    的所有者更改为
    nobody
    或步骤1中找到的任何所有者

    $sudo chown nobody/var/www/html/mysite/images/

    $sudo chown nobody/var/www/html/mysite/tmp\u file\u upload/

  • Chmod
    images
    tmp\u文件上传
    现在可以由所有者写入,如果需要[看起来您已经准备好了]。在@Dmitry Teplyakov回答中提到

    $sudo chmod-R 0755/var/www/html/mysite/images/

    $sudo chmod-R 0755/var/www/html/mysite/tmp\u file\u upload/

  • 有关此行为发生的更多详细信息,请查看手册,注意手册中也提到了
    open\u basedir
    指令


  • 更改
    php.ini
    后是否重新启动了web服务器?仅供参考,
    tmp\u名称
    设置在服务器端,您的权限被拒绝错误与源文件无关,但与目标路径无关。是的,我做了,是的,我知道,谢谢,还没有时间处理目标路径,只是想获得正确的源路径。检查
    phpinfo()
    显示的设置内容。另外,
    tmp\u name
    将包含完整路径。您没有在它前面加任何前缀,所以默认设置了
    tmp\u name
    ?我现在就这么做,谢谢,通常
    move\u uploaded\u file()
    的第一个参数就是
    $\u FILES['file']['tmp\u name']
    。另请注意手册中的“如果此处指定的目录(
    upload\u tmp\u dir
    )不可写,PHP将返回到系统默认的临时目录。”。这可以解释你所看到的。如果系统tmp dir可用,那么使用它也没有什么错。更多的主机以普通用户的身份通过suExec或类似的方式运行PHP脚本。自动假定httpd用户是必需的是愚蠢的。我检查了,它不是以无人身份运行的,而是以拥有所有必需文件权限的同一用户身份运行的