我的$ _FILES ['temp_name']在哪里设置? -angularjs app

时间:2014-01-07 04:51:33

标签: php angularjs

这一直困扰我好几个小时..

我正在用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 /而不仅仅是文件名,这是正常的吗?

1 个答案:

答案 0 :(得分:1)

只需将tmp_file_upload的权限更改为755以下是命令chmod -R 755 tmp_file_upload

这是因为imagestmp_file_upload只能由root用户写入。要上传到工作,我们需要使这些文件夹的所有者与httpd进程所有者相同,或者使它们全局可写(不良做法)。

  1. 检查apache进程所有者:$ps aux | grep httpd。第一列通常是nobody
  2. 的所有者
  3. imagestmp_file_upload的所有者更改为nobody或您在步骤1中找到的所有者。

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

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

  4. Chmod imagestmp_file_upload现在可以由所有者写入,如果需要[似乎你已经有了这个]。在@Dmitry Teplyakov的回答中提到。

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

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

  5. 有关此行为发生的详细信息,请查看手册http://php.net/manual/en/ini.core.php#ini.upload-tmp-dir,注意它还在讨论open_basedir指令。