2

以下は Windows で機能します。

mkdir('../my/folder/somewhere/on/the/server', 0777, true);

PHP mkdirについて話しています。

それは完全に機能し、サブフォルダーを再帰的に作成します。ただし、Linux サーバーで同じコマンドを実行すると、フォルダーが作成されません。

以前は、パスを分割し、各フォルダーを 1 つずつ作成することでこれを解決していました。しかし、「resurive」フラグをtrueに設定して動作するはずなので、私はそれをしたくありません。なぜ機能しないのですか?

4

3 に答える 3

3

申し訳ありませんが、mkdirコマンド自体以外に問題があるはずです。

この小さな例は期待どおりに機能し、Linux で実行するとディレクトリが再帰的に作成されます。

#!/usr/bin/php
<?php
mkdir ('testdir/testdir2/testdir3',0777,TRUE);
?>
于 2012-11-30T09:53:07.080 に答える
1

www-dataPHP ユーザー (例: ) が、作成しようとしているフォルダーの親フォルダーへの書き込み権限を持っていることを確認してください。PHP は、既に存在する最下位のものに書き込むことができる必要があります。

たとえば、 が../my/folder/somewhere/on/the/server既に../my存在し、PHP が に書き込めるが書き込め..ない場合mymkdir失敗します。

ユーザーが の場合、 を使用してとそのすべてのサブフォルダーに書き込み許可を与えるwww-dataことができます。sudo chown -R www-data:www-data ../mymy

于 2016-04-01T07:34:10.870 に答える
1

これは発見されたものです

  • ルートパスが存在することを確認してください
  • ルートパスが書き込み可能であることを確認してください
  • 使用しないでください..常に実際のパスを使用してください...

$fixedRoot = __DIR__;
$recusivePath = 'my/folder/somewhere/on/the/server';

if (is_writable($fixedRoot) && is_dir($fixedRoot)) {
    mkdir($fixedRoot . DIRECTORY_SEPARATOR . $recusivePath, 0, true);
} else {
    trigger_error("can write to that path");
}
于 2012-11-30T09:49:17.087 に答える