2017-05-01 19 views
1

私は別のフォルダにPHPでアップロードされたファイルを移動しようとしているんだけど、何とかこれは、その結果、動作しませんにファイルを移動することができません私はupload/tmp(実際には/var/www/html/upload/tmp)の適切な権限を持っていません。PHP:別のフォルダ

私はに許可を設定しており、/var/www/html/upload/tmpのオーナーはroot:rootに問題がないことを確かめています。
しかし、それはそれを解決しませんでした...

他のものは、私が試してみた:

  • セットの所有者777に変更し、ソースファイルのパーミッション
  • apache:apacheにし、所有者root(デフォルト、所有者)apacheに設定されている
  • PHPの設定(かなりのデフォルト、/var/www/html/tmpopen_basedir内、upload_tmp_dirが設定されていないです)+ Lを確認しますogs
  • Apache設定+ログを確認する
  • 同じフォルダ内でファイルを移動する - >これが動作します!

    <?php 
    
    echo 'TESTING FILE MOVE' . '<br><br>'; 
    
    echo getcwd() . '<br>'; 
    echo get_current_user() . '<br>'; 
    
    error_reporting(E_ALL); 
    
    file_put_contents('/tmp/tst.txt', 'this is a test'); 
    chdir('/var/www/html/upload/tmp'); 
    echo getcwd() . '<br><br>'; 
    rename('/tmp/tst.txt', 'tst-2.txt'); 
    
    print_r(error_get_last()); 
    
    :>は777と所有者rootまたは

apacheに、すべての親ディレクトリを設定

  • 動作しないと私はテストスクリプトを作成 -
  • 異なる他のフォルダに移動します

    次のような出力が得られます。

    テストファイルMOVE

    /VAR/WWW/HTML
    ルート
    の/ var/WWW/HTML /アップロード/ TMP

    アレイ([タイプ] => 2 [メッセージ] =>リネーム(/tmp/tst.txt 、TST-2.txt): 許可拒否された[ファイル] => /var/www/html/test.php [ライン] => 13)

    これは、スクリプトを実行しているユーザーの下で私に語ったと、私は正しいディレクトリにいます。また、ファイルの移動に焦点を当てて、余分なチェックを省略します(move_uploaded_file)。

    私のセットアップに関するいくつかの情報:

    • CentOSの7
    • PHP 7.1
    • PHP-FPM
    • のApache 2.4。6

    /tmp/systemd-private-xxxx-php71-php-fpm.service-yyyy/tmp/のように、PHP-FPMに別の一時ディレクトリを使用します。おそらく、このディレクトリの外にファイルを移動できない何らかの理由がありますか?私はそれに何かを見つけることができません...

    私は誰かが何が起こっているかもしれないという手がかりを私に提供することを願っています!

  • 答えて

    0

    それは、SELinuxのであることが判明しました。

    多かれ少なかれ同じ質問がここで答え:https://unix.stackexchange.com/questions/50639/httpd-cant-write-to-folder-file-because-of-selinux

    をもFTPは、読み取り/書き込み可能にしながら、私は、Apacheのに利用できるようにSELinuxのでウェブサーバのフォルダのセットアップを持っていました。また

    chcon --user system_u --type httpd_sys_rw_content_t -R upload 
    

    、A:しかし、私は、この(コマンドでrwビットを注意してください)のようなものによって達成することができるのApacheによって読み取り/書き込みできるようにする(その下とフォルダ)uploadフォルダを設定するために必要なチェックのための便利なコマンド:

    ls -Z 
    

    これは今示しています。それはapache`そこ `と呼ばれています、

    drwxr-xr-x. apache apache system_u:object_r:httpd_sys_rw_content_t:s0 upload 
    
    0

    ディレクトリまたはウェブサーバーの所有者をwww-dataに変更し、自分自身をwww-dataグループに追加するか、ログアウトするか再起動してください。

    sudo adduser <username> www-data 
    sudo chown -R www-data:www-data /var/www 
    sudo chmod -R g+rwX /var/www 
    

    chown helpchmod help

    +0

    ' WWW-data'はCentOSの上に存在しないが、 'apachでこれらのコマンドを実行します'www-data'の代わりに' e'を使うと解決できません... – kasimir

    関連する問題