0

私は単に許可を持っていないことをかなり確信しています。とにかく答えてくれてありがとう!セルフホスティングに切り替えるので、許可を得ています。

(私はこれを削除しますが、答えがあるとは言えません)

4

5 に答える 5

1

まず、 の実際の値は$username? 空でないことを確認しましたか?

このようにファイルシステムを扱うと、いくつかの異なる問題が発生する可能性があります。私は多くの余分なチェックを行うのが好きなので、何かが失敗した場合、その理由を簡単に知ることができます. また、可能であれば絶対ディレクトリ名を扱うのが好きなので、相対パスで問題が発生することはありません。

$filesDir = '/path/to/files';
if (!file_exists($filesDir) || !is_dir($filesDir)) {
    throw new Exception("Files directory $filesDir does not exist or is not a directory");

} else if (!is_writable($filesDir)) {
    throw new Exception("Files directory $filesDir is not writable");
}

if (empty($username)) {
    throw new Exception("Username is empty!");
}

$userDir = $filesDir . '/' . $username;

if (file_exists($userDir)) {
    // $userDir should be all ready to go; nothing to do.
    // You could put in checks here to make sure it's 
    // really a directory and it's writable, though.

} else if (!mkdir($userDir)) {
    throw new Exception("Creating user dir $userDir failed for unknown reasons.");
}

mkdir()アクセス許可を設定し、フォルダを複数レベル深くするための非常に便利なオプションがいくつかあります。PHP の mkdir ページをまだチェックしていない場合はチェックしてください。

セキュリティのため、例外によってシステム パスがエンド ユーザーに公開されないようにしてください。コードが公開サーバーに送信されるときに、エラー メッセージからフォルダー パスを削除したい場合があります。または、例外がログに記録されても Web ページには表示されないように構成します。

于 2012-07-25T20:05:15.373 に答える
0

これを試して。

mkdir ("./files/$username");
于 2012-07-25T20:00:08.013 に答える
0

それらは同じフォルダではありませんか?files/Alex と files/Alex/ は同じです。files/$username と files/$username/files のことですか? 同じディレクトリを2回実行しているため、エラーです

于 2012-07-25T20:00:23.317 に答える
0

これは、この種のシナリオのアルゴリズムです。

  1. フォルダが存在するかどうかを確認します。
  2. フォルダーが存在する場合は、フォルダーに別の名前を付けるか、乱数を追加します。
  3. 新しいフォルダーを作成します。

    http://pastebin.com/VefbrzRS

于 2012-07-25T19:58:32.103 に答える
0

Linux または MacO を使用している場合は、シェルの mkdir 関数を呼び出す別のシナリオもあります。

次のようになります。

system('mkdir -p yourdir/files/$username')
于 2012-07-25T20:04:54.910 に答える