2017-05-18 5 views
0

私はDebian Jessieマシンでapache2ウェブサーバーをセットアップしました。 http://php.net/manual/en/function.move-uploaded-file.phpの後に、PHPスクリプトを使用してサーバーにファイルをアップロードしています。Linux Apache/PHPファイルアップロード:move_uploaded_fileでエラーが発生する

ファイルのアップロードを有効にするために/etc/php/apache/php.iniを設定しました。ファイルをうまくアップロードできます。

私は0664.として設定権限を持っているためにアップロードされたファイルは、スタックオーバーフローの上に周り読んたいでは/ etc/apache2の/ envvarsが、私はPHPインタプリタのumaskを設定しなければならないと考えている
umask 002 

を行っていますファイルアップロードディレクトリの所有権とアクセス権は、www-data:www-data 770(つまりApacheユーザー)に設定されています。

ただし、move_uploaded_fileを使用して一時PHPファイルをアップロードディレクトリに移動すると、ファイルのアクセス許可は600になります。つまり、グループのアクセス許可は保持されません。

誰かが間違っている可能性のあるアイデアは誰でも提供できますか?

以下のコメントに続いて、私は移動ファイルに0664のアクセス許可を持たせたいと述べたはずです。

chmod($_FILES['file']['tmp_name'], 0664); 
rename($_FILES['file']['tmp_name'], $new_filename); 

そして、この:

私もこの試みた

chmod($_FILES['file']['tmp_name'], 0664); 
copy($_FILES['file']['tmp_name'], $new_filename); 

しかし、これは動作しませんでしたが、私はまだ移動したファイルの両方のケースで0600を取得します。

答えて

0

あなたの試行で何が間違っているのか分かりませんが、アップロードしたファイルを移動した直後にPHPのchmod機能を使用できます。

例:move_uploaded_fileを使用して後EDIT

使用はchmod()

$destination = '/absolute/path/to/upload/' . $filename; 

if (move_uploaded_file($filename, $destination)) { 
    chmod($destination, 0664); 
} 

()およびmove_uploaded_fileで同じ$先変数(使用上の私の例のように)」 2番目のパラメータとchmod()の最初のパラメータです。

1

move_uploaded-fileは、apache umaskに設定されているすべてのアップロードファイルに対して常に600にアクセス権を設定します。 ファイルをアップロードしてアクセス許可を設定するときに、コードとの関連でchmodを使用することができます。彼らは同じことを記述しているので、他のユーザーが同じ問題を持ってコメント欄で

chmod($target_path, 0664); 

http://php.net/manual/en/function.move-uploaded-file.php

+0

0664の権限を持つには、移動したファイルが必要です。詳細は私の質問編集をご覧ください。 – user12066

0

サヒールカタリアが正しく指摘するように、move_uploaded_fileは、私はそれが上陸したいとき、私はディレクトリ内のファイルのための0660の許可を必要として0600

に先のファイルのパーミッションを強制します。私が使用して終了この問題を回避するには、これは私が望んでいたようなアクセス許可を強制し、その端宛先にファイルを移動するときにそれらを保存し

rename($_FILES['file']['tmp_name'], $another_temporary_file); 
chmod($another_temporary_file, 0660); 
rename($another_temporary_file, $final_destination_file); 

にしました。

move_uploaded_fileのセキュリティ機能を利用するには、上記のコードで最初の名前の変更呼び出しでその関数を使用できます。

関連する問題