2014-01-07 2 views
0

이것은 지금 몇 시간 동안 나를 괴롭 히고 있습니다.

나는 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 오류 :

[Tue Jan 07 15:46:14 2014] [error] [client 127.0.0.1] PHP Warning: move_uploaded_file(/var/www/funandgames/jobernize/uploaded/bleg.png): failed to open stream: Permission denied in /var/www/funandgames/jobernize/uploaded/test.php on line 18, referer: 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/uploaded/bleg.png' in /var/www/funandgames/jobernize/uploaded/test.php on line 18, referer: http://127.0.0.1/funandgames/jobernize/

가 그 VAR 설정 내 JS 수 있을까, 아니면 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가를 추가, 지금은 오류를 받고 있지 않다,하지만 아무것도 발생되지 않으며, 파일이 복사되지 않는 :

여기 내 PHP입니다.

파일 이름이 아닌 임시 이름에/tmp /가 포함되어있는 것 같습니다. 정상입니까?

+0

'php.ini'를 변경 한 후 웹 서버를 다시 시작 했습니까?참고로, 'tmp_name'은 서버 측으로 설정되어 있고 * 권한이 거부되었습니다. * 오류는 소스 파일과 관련이 없으며 대상 경로와 관련이 없습니다. – Phil

+0

예, 나는 감사를 느낍니다. 대상 경로, 올바른 소스 경로를 가져 오려고합니다. – Melbourne2991

+0

['upload_tmp_dir'] (http://php.net/manual/ini.core.php#ini.upload-tmp-dir) 설정에 대해'phpinfo()'가 보여주는 것을 확인하십시오. 또한,'tmp_name'은 전체 경로를 포함합니다. 접두어를 붙이지 마십시오. – Phil

답변

1

그냥 imagestmp_file_uploadroot 사용자들만 쓸 수 있기 때문이다 chmod 명령의 -R 755 tmp_file_upload

되어 다음 755에 tmp_file_upload의 권한을 변경합니다. 업로드가 작동하려면 해당 폴더의 소유자를 httpd 프로세스 소유자와 같게 만들거나 전역 적으로 쓰기 가능하도록해야합니다 (나쁜 습관).

  1. 아파치 프로세스 소유자 : $ps aux | grep httpd을 확인하십시오. 첫 번째 열은 소유자가 전형적으로 nobody
  2. 변경 nobody 될 될 imagestmp_file_upload의 소유자 또는 당신이 무엇을 1 단계

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

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

  3. 에있는 소유자가됩니다 될 것입니다
  4. Chmod imagestmp_file_upload은 이제 소유자가 쓸 수 있습니다. 필요한 경우 [이미 사용하고있는 것으로 보입니다]. @ 드미트리 Teplyakov 대답에서 언급.

    이 행동 앞으로 일어날이, 수동 http://php.net/manual/en/ini.core.php#ini.upload-tmp-dir을 확인 그것은 또한에 대한 open_basedir 지침을 이야기 있습니다 이유 자세한 내용은

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

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

+1

점점 더 많은 호스트가 suExec를 통해 일반 사용자로 PHP 스크립트를 실행하거나 비슷한. 자동으로 httpd 사용자가 필요하다고 가정하는 것은 어리 석다. – Phil

+0

내가 확인했는데 아무도 실행하지 않고 모든 필요한 파일에 대한 권한을 가진 동일한 사용자로 실행 중입니다. – Melbourne2991

관련 문제