2012-11-28 27 views
10

tôi chạy đoạn mã sau:Tại sao mkdir không thành công với tùy chọn đệ quy được đặt đúng?

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

mục "a" được tạo ra, trong khi thư mục "1" không phải là, bản in trang cảnh báo.

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

tôi có quyền đầy đủ về mnt thư mục cho người dùng apache đang chạy: phiên bản

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

PHP - PHP 5.3.3. Apache phiên bản 2.2.15.

Bất kỳ ý tưởng nào, tại sao mkdir không thành công với tùy chọn đệ quy được đặt thành true?

Cập nhật! Vâng, tôi xóa các thư mục, làm cho php-kịch bản sau đây và chạy nó một lần nữa:

<?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); 
?> 

Đây là kết quả:

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 

Dưới đây là nội dung của mnt thư mục sau khi thực hiện kịch bản:

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 

tôi cũng đã cố gắng đường dẫn tuyệt đối cho mkdir đệ quy - vẫn không có may mắn, trong khi mkdir không đệ quy hoạt động tốt bất kể có bao con đường được thiết lập. Có gì sai với đệ quy mkdir? Tôi vẫn không có ý tưởng ..

Cập nhật! Tiếp tục điều tra tiết lộ rằng những việc như vậy xảy ra vì mnt là một thư mục, gắn kết bởi lệnh

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 

Trong tất cả các thư mục khác mkdir đệ quy hoạt động tốt, trong khi trong thư mục đó công trình mkdir chỉ không đệ quy!

Cập nhật!femtoRgon giả định mkdir, khi chạy từ tập lệnh trong thư mục mnt, hoạt động tốt cả đệ quy và không đệ quy. Nhưng tôi vẫn không thể tìm ra, tại sao nó không thành công, khi chạy từ/home/bitrix/www? Tôi thậm chí đã thử gắn kết với các tùy chọn file_mode=0775,dir_mode=0775 - không may mắn. Hệ điều hành của tôi = CentOS 6.3, nếu nó quan trọng ..

+0

Bạn đã có thư mục '1' trong' mnt' chưa? – Arjan

+0

Không. Cả thư mục 'a' lẫn '1' đều tồn tại trước khi thực thi tập lệnh –

+0

Chủ sở hữu/nhóm và quyền của thư mục 'a' khi nó được tạo ra là gì? Một ý tưởng khác là cuộc gọi đệ quy * có thể * đang cố thay đổi quyền của thư mục 'mnt' mà người dùng apache không sở hữu. – mkilmanas

Trả lời

2

Sau khi một số googling tôi tìm thấy câu trả lời trên php.net. Đó là tất cả về tùy chọn gắn kết serverino. Khi tôi gắn thư mục với noserverino mọi sự cố đã biến mất. Dù sao nhờ guys cho tring để giúp đỡ!

0

Bạn có thể thử thêm một ký tự gạch chéo vào tham số đầu tiên của bạn.

mkdir('./mnt/1/',0777,true); 
0

Đây là cách phải tạo thư mục:

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

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

Vì vậy, lỗi của bạn có lẽ là về một số dòng thiếu .. Không theo cách mà bạn tạo các thư mục.

Để biết thêm chi tiết bạn có thể kiểm tra ở đây: http://php.net/manual/en/function.mkdir.php

Các vấn đề liên quan