10

次のコードを実行します。

mkdir('mnt/1',0777,true);
mkdir('mnt/a',0777);

ディレクトリ「a」は作成されますが、ディレクトリ「1」は作成されず、ページに警告が出力されます。

Warning: mkdir(): File exists in /home/bitrix/www/php_test.php on line 3

ユーザーapacheが実行されているため、ディレクトリmntに対する完全な権限があります。

drwxr-xr-x 1 bitrix bitrix   4096 Nov 28 10:10 mnt

PHP バージョン - PHP 5.3.3。アパッチ バージョン 2.2.15。

再帰オプションをtrueに設定するとmkdirが失敗するのはなぜですか?

アップデート! さて、フォルダーをクリアし、次のphpスクリプトを作成して再度実行しました。

<?php
        error_reporting(E_ALL);
        mkdir('mnt/1',0777,true);
        mkdir('mnt/2/',0777,true);
        mkdir('./mnt/3',0777,true);
        mkdir('./mnt/4/',0777,true);

        mkdir('mnt/a',0777);
        mkdir('mnt/b/',0777);
        mkdir('./mnt/c',0777);
        mkdir('./mnt/d/',0777);
?>

出力は次のとおりです。

Warning: mkdir(): File exists in /home/bitrix/www/php_test.php on line 3 
Warning: mkdir(): File exists in /home/bitrix/www/php_test.php on line 4 
Warning: mkdir(): File exists in /home/bitrix/www/php_test.php on line 5 
Warning: mkdir(): File exists in /home/bitrix/www/php_test.php on line 6

スクリプト実行後のフォルダ mnt の内容は次のとおりです。

drwxr-xr-x  1 bitrix bitrix  4096 Nov 28  2012 .
drwxrwx--- 11 bitrix bitrix 12288 Nov 28 11:10 ..
drwxr-xr-x  1 bitrix bitrix     0 Nov 28  2012 a
drwxr-xr-x  1 bitrix bitrix     0 Nov 28  2012 b
drwxr-xr-x  1 bitrix bitrix     0 Nov 28  2012 c
drwxr-xr-x  1 bitrix bitrix     0 Nov 28  2012 d

再帰的な mkdir の絶対パスも試してみましたが、パスがどのように設定されていても、非再帰的な mkdir は問題なく動作します。再帰的な mkdir の何が問題になっていますか? 私はまだアイデアがありません..

アップデート!さらに調査すると、mnt はコマンドによってマウントされるフォルダーであるために、このようなことが発生することが判明しました。

mount -t cifs -o username=***user***,password=***password***,uid=bitrix,gid=bitrix,iocharset=utf8,codepage=866 //192.168.1.6/folder /home/bitrix/www/mnt

他のすべてのディレクトリでは再帰的な mkdir が正常に機能しますが、そのディレクトリでは非再帰的な mkdir のみが機能します!

アップデート!femtoRgonは mkdir を想定していたため、フォルダー内のスクリプトから実行すると、再帰的および非再帰的の両方で正常に動作します。mntしかし、/home/bitrix/www から実行すると、なぜ失敗するのかわかりません。オプションを付けてマウントしようとしましたがfile_mode=0775,dir_mode=0775、うまくいきませんでした。私のOS = CentOS 6.3、それが問題なら..

4

3 に答える 3

2

グーグルで調べた後、 php.netで答え​​を見つけました。それはすべてserverinoマウントオプションに関するものです。フォルダーをマウントすると、noserverinoすべての問題がなくなりました。とにかく、助けてくれてありがとう!

于 2012-11-29T07:14:13.930 に答える
0

最初のパラメーターにスラッシュ文字を追加してみてください。

mkdir('./mnt/1/',0777,true);
于 2012-11-28T14:25:02.203 に答える
0

これはディレクトリを作成する正しい方法です:

mkdir('/test1/test2', 0777, true);

mkdir("test1/test2",0777,true);

したがって、エラーはおそらく欠落している行の一部にあります.ディレクトリを作成する方法ではありません。

詳細については、ここで確認できます: http://php.net/manual/en/function.mkdir.php

于 2012-11-28T14:52:58.997 に答える