PHPのmkdir関数を使用してディレクトリを作成しようとしていますが、次のエラーが発生しますWarning: mkdir() [function.mkdir]: Permission denied in ...。問題を解決する方法は?
PHPのmkdir関数を使用してディレクトリを作成しようとしていますが、次のエラーが発生しますWarning: mkdir() [function.mkdir]: Permission denied in ...。問題を解決する方法は?
回答:
私はこれが古いスレッドであることを知っていますが、より良い答えが必要です。アクセス許可を777に設定する必要はありません。これは、読み取りと書き込みのアクセス権を世界中に与えるため、セキュリティ上の問題です。あなたのApacheユーザーがディレクトリに対する読み取り/書き込み権限を持っていない可能性があります。
Ubuntuでの操作は次のとおりです
すべてのファイルがApacheグループとユーザーによって所有されていることを確認してください。Ubuntuでは、www-dataグループとユーザーです。
chown -R www-data:www-data /path/to/webserver/www
次に、www-dataグループのすべてのメンバーがファイルを読み書きできるようにしました
chmod -R g+rw /path/to/webserver/www
PHP mkdir()関数がエラーを返さずに機能するようになりました
/opt/lampp/htdocs/www/my-app/public/uploads..基本的に私がしようとしているのは、アップロードされたフォルダ内のファイルをアップロードし、写真を保存するためにアルバムフォルダ(これはphpで行われます)を作成するすべてのログインしたユーザーです..
将来グーグル経由でこれを見つける人々のための遅い答え。私は同じ問題に出くわしました。
注:私はMAC OSX LIONを使用しています
何が起こるかというと、Apacheはユーザー "_www"として実行されており、ファイルを編集する権限がないということです。PHPを介して機能するファイルシステム関数がないことがわかります。
直し方:
ファインダーウィンドウを開き、メニューバーから[移動]> [フォルダーへ移動]> / private / etc / apache2を選択します。
今httpd.confを開きます
見つける:
User _www
Group _www
ユーザー名を変更します。
User <YOUR LOGIN USERNAME>
次に、このフォームのターミナルを実行してApacheを再起動します。
sudo apachectl -k restart
それでも機能しない場合は、上記を実行する前に、次の操作を実行します。関連している可能性があります。
ターミナルを開き、次のコマンドを実行します(Webサーバーのファイルは/ライブラリ/ WebServer / wwwにあります。Webサイトの場所に応じて変更してください)。
sudo chmod 775 /Library/WebServer/www
sudo chmod 775 /Library/WebServer/www/*
_www、Apacheを実行したままにし、あなたとApacheのグループを作成します。新しいグループを作成し、と呼ばれtrusted、自分自身とその_www中に入れます。次に、サーバーのドキュメントディレクトリにあるすべてのファイルのグループオーナーを信頼できるものにします。最後に、chmod g+rwxApacheがアクセスする必要のあるファイルに対してのみ必要に応じて、trustedグループがファイルを編集する権限を持つようにします。
リンクのみの回答はStackOverflowでの良い習慣とは見なされませんが、ここで与えられるアドバイスは通常フォローアップされるべきではありません。
同様の質問でこの素晴らしい答えに戻りたいと思います。私は引用します:
777の使用を提案するのをやめてください。あなたは誰でもファイルを書き込み可能にしています。これは、アクセス許可システムが設計されたすべてのセキュリティを失うことを意味します。これを提案する場合は、適切に構成されていないWebサーバーへの影響について考えてください。ファイルを上書きすることで、Webサイトを「ハッキング」するのが非常に簡単になります。だから、しないでください。
私はこのスレッドが古いことを知っていますが、おそらくこれは誰かを助けるでしょう。
PHPがmkdir()に対して「アクセス権が拒否されました」と言う理由の問題-間違ったURLパス。したがって、修正するには、正しいパスを取得するだけです。私はこのようにしました:
<?php
$root = $_SERVER["DOCUMENT_ROOT"];
$dir = $root . '/somefolder/';
if( !file_exists($dir) ) {
mkdir($dir, 0755, true);
}
?>
ディレクトリを作成するには、ファイルシステムの権限が必要です。
例:Ubuntu 10.04では、Apache(php)はユーザーとして実行されます:グループのwww-data:www-data
ユーザーwww-dataには、ディレクトリを作成するためのアクセス権が必要です。
これを自分で試すには、「su www-data」を使用してwww-dataユーザーになります。
簡単な修正として、次のことができます:sudo chmod 777 my_parent_dir
chmod 0777読み取りと書き込みのアクセス権を世界に与えます!あなたはそのようなことを助言するべきではありません。ただし、ユーザーグループへのアドバイスは、現時点では最高です:)
他にできることは、次の場所に移動することです:/ etc / sudoers
そのユーザーに許可を与える次の行を追加しますwww-data ALL =(ALL:ALL)ALLなぜwww-dataですか?これは、Apacheがこのユーザー名で実行されているためです。
ユーザーが異なる場合は、ユーザー名ALL =(ALL:ALL)ALLを試してください。
これでうまくいきました。
sudoers直接編集せずに、rootとしてログインし、te visudoコマンドを使用します。これにより、すべての変更をチェックして、誤った編集を回避します。これにより、sudoersファイルがロードされたときに解析エラーが発生し、(権限がないなど)何かを変更)
私は今この問題を抱えています、あなたが今あなたに与えることができる私の最善の解決策は(あなたがあなたのコードを含まなかったとしても):
サブフォルダーを作成するために再帰コマンドを使用していた場合は、mkdirコマンドに0755(最初に0を含めることを忘れないでください)を忘れずに入力してください。
if(!file_exists($output)){
if (!mkdir($output, 0755, true)) {//0755
die('Failed to create folders...');
}
}これはちょうど今私のためにも働いています。
LINUXを使用している場合は、最初にapacheのユーザーを確認します。一部のディストリビューションでは異なる場合があるためです。
egrep -i '^user|^group' /etc/httpd/conf/httpd.conf
結果が「http」であるとしましょう。以下を実行し、path_to_folderをフォルダーパスに変更することを忘れないでください。
chown -R http:http path_to_folder
chmod -R g+rw path_to_folder
umaskに問題がないかどうかを確認してください
if (!function_exists('mkdir_r')) {
/**
* create directory recursively
* @param $dirName
* @param int $rights
* @param string $dir_separator
* @return bool
*/
function mkdir_r($dirName, $rights = 0744, $dir_separator = DIRECTORY_SEPARATOR) {
$dirs = explode($dir_separator, $dirName);
$dir = '';
$created = false;
foreach ($dirs as $part) {
$dir .= $part . $dir_separator;
if (!is_dir($dir) && strlen($dir) > 0) {
$created = mkdir($dir, $rights);
}
}
return $created;
}
}
if (!function_exists('ensure_dir')) {
/**
* ensure directory exist if not create
* @param $dir_path
* @param int $mode
* @param bool $use_mask
* @param int $mask
* @return bool
*/
function ensure_dir($dir_path, $mode = 0744, $use_mask = true, $mask = 0002) {
// set mask
$old_mask = $use_mask && $mask != null
? umask($mask)
: null;
try {
return is_dir($dir_path) || mkdir_r($dir_path, $mode);
} finally {
if ($use_mask && $old_mask != null) {
// restore original
umask($old_mask);
}
}
}
}
FTPサーバーをインストールしたら、sudo apt-get install vsftpdそれを設定する必要があります。書き込みアクセスを有効にするには、/etc/vsftpd.confファイルを編集してコメントを解除する必要があります
#write_enable=YES
行なので、読む必要があります
write_enable=YES
ファイルを保存して、で再起動vsftpdしsudo service vsftpd restartます。
他の構成オプションについては、このドキュメントを参照するか、man vsftpd.conf
このエラーは、間違ったパスを使用している場合に発生します。
たとえば:
私はubuntuシステムを使用していて、プロジェクトフォルダー名は「myproject」です
私が持っていると仮定でmyproject /公共/レポートのディレクトリが存在すると呼ばれる新しいフォルダを作成したい注文を
次に、プロジェクトが存在する完全なパスが必要です。PWDコマンドでパスを取得できます
したがって、私のルートパスは= '/ home / htdocs / myproject /'になります
$ dir = '/ home / htdocs / myproject / public / report / Orders';
if (!is_dir($dir)) {
mkdir($dir, 0775, true);
}
それはあなたのために働くでしょう!! 楽しい !!