2016-05-17 53 views
0

777未満のフォルダのアクセス許可を設定するにはどうすればよいですか?これらのためのMkdir()パーミッションを設定する777

mkdir(getcwd() . '/public/profile/usr'.$user->getId(), 0777, true); 
mkdir(getcwd() . '/public/profile/usr'.$user->getId() . '/patients', 0777, true); 
mkdir(getcwd() . '/public/profile/usr'.$user->getId() . '/picture', 0777, true); 

フォルダのパーミッションは以下のタイプです:

drwxr-xr-x 

そして、私はそれがに設定したい:どのようにこの問題を解決するためにしてください

drwxrwxrwx 

あなたは私に言うことはできますか?

答えて

1

チェックこの記事を:そこからhttp://php.net/manual/de/function.mkdir.php

回答...

それなしモードを設定するために)(あなたはMKDIR後のchmod()を使用している場合は、その心の中で再帰的なパラメータのクマを使用してuchar()の値によって変更され、作成されたすべてのディレクトリでchmod()を呼び出す必要があります。すなわち:

<?php 
mkdir('/test1/test2', 0777, true); 
chmod('/test1/test2', 0777); 
?> 

は、0777のモードが、それでもます。mkdir()呼び出しから0755のモードを有する "/ TEST1" を有する "/ TEST1/TEST2" をもたらすことができます。あなたがする必要があるでしょう:

<?php 
mkdir('/test1/test2', 0777, true); 
chmod('/test1', 0777); 
chmod('/test1/test2', 0777); 
?> 
1

まず第一に、通常どちらかが盲目的に(悪い以下の通りですこれを実行する必要性を感じて777人にフォルダやファイルのアクセス権を設定する決して良い理由があります)オンラインチュートリアルで解決できない基本的なセキュリティ/権限の問題がある。通常、アップロード/書き込みの問題は、フォルダ(通常はwww-dataまたはapacheユーザー)に適切な所有者/グループを設定することで解決できます。あなたは基本的にバックドアを開いたままにしておき、悪い近所でロックを解除しています。詳細については、How will a server become vulnerable with chmod 777?も参照してください。

これまでにmkdir()でこのような問題が発生しました。これは通常、システム上のある特定のumaskが新しく作成されたフォルダに755の権限を持つように設定されているためです。

mkdir(getcwd() . '/public/profile/usr'.$user->getId(), 0777, true); 
chmod(getcwd() . '/public/profile/usr'.$user->getId(), 777); 
// And so on... 

しかし、よりよい解決策:特定chmod()呼び出しを行うといえトリックを行いますあなたの権限/セキュリティ問題を修正します。適切な所有者(PHPが実行されているプロセス)を設定するだけで、777の権限を設定する必要はなくなりますが、適切なアップロード処理が可能になります。これは、すでにデフォルトにする必要がありますが、あなたがそれを強制することができます

// This will get the user the PHP process is running under on Linux machines: 
$user = `whoami`; 

mkdir(getcwd() . '/public/profile/usr'.$user->getId(), 0755, true); 
chown(getcwd() . '/public/profile/usr'.$user->getId(), $user); 
// And so on 

これは、フォルダに755回のアクセス権を設定し、PHPプロセスに所有権を設定し、PHPは、フォルダの完全な権限を有することを意味するが、他ますユーザーはしません。これはより安全ですが、あまり便利ではありません。

SELinuxによってもこの問題が発生する可能性があります。この場合、chmod 777はあまり助けになりません。アップロードフォルダには通常httpd_public_content_rw_tというコンテキストが必要です。ここで

0

はそれを行うための多くの可能な方法の一つである:

<?php 
     $baseDir = getcwd() . '/public/profile/usr'. $user->getId(); 
     $arrFolders = array('/patients', '/picture'); 

     // FIRST chmod THE BASE DIRECTORY TO HAVE THE PERMISSIONS YOU WANT: 
     chmod($baseDir, 0777); 

     // LOOP THROUGH THE ARRAY OF FOLDERS YOU WANT TO CREATE & CREATE THEM WITH APPROPRIATE PERMISSIONS:   
     foreach($arrFolders as $folder){ 
      try{ 
       mkdir($baseDir . $folder, 0777, true); 
      }catch(Exception $e){ 
       // HANDLE ANY EXCEPTION SHOULD ONE OCCUR... 
      } 
     } 
関連する問題