2009-07-20 50 views
14

trong PHP (XAMPP) được cài đặt trên máy tính Windows XP Tôi đang cố đọc một thư mục tồn tại trên máy chủ mạng cục bộ. Tôi đang sử dụng is_dir() để kiểm tra xem đó có phải là thư mục mà tôi có thể đọc hay không.Đường dẫn mạng truy cập php dưới cửa sổ

Trong Windows Explorer, tôi nhập \\\server\dir và thư mục đó đang được hiển thị. Khi tôi ánh xạ ổ đĩa mạng, bạn cũng có thể truy cập nó bằng z:\dir.

Trong PHP tôi có mà kịch bản:

<?php if(is_dir($dir){ echo 'success' }) ?> 

Đối $dir tôi đã cố gắng:

  • /server/dir
  • //server/dir
  • \server\dir
  • \\server\dir
  • \\\\server\\dir

  • z:\dir
  • z:\\dir
  • z:/dir
  • z://dir

Nhưng tôi không bao giờ có được thành công? Bất kỳ ý tưởng nào? thx

Trả lời

9

Tôi giải quyết nó bằng cách thay đổi một số nội dung trong registry của máy chủ như được giải thích trong câu trả lời cuối cùng của cuộc thảo luận này:

http://bugs.php.net/bug.php?id=25805

Nhờ VolkerK và Gumbo anyway! Tôi yêu stackoverflow và những người tuyệt vời của họ, những người giúp bạn cực kỳ nhanh chóng !!

EDIT (lấy từ php.net):

Dịch vụ này đã hạn chế quyền truy cập vào tài nguyên mạng, chẳng hạn như cổ phiếu và ống dẫn, bởi vì nó không có thông tin quan trọng và phải kết nối sử dụng một null phiên. Khóa đăng ký sau chứa các giá trị NullSessionPipes và NullSessionShares, được sử dụng để chỉ định các đường ống và các cổ phiếu mà phiên không có thể kết nối: HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ LanmanServer \ Parameters Hoặc, bạn có thể thêm giá trị REG_DWORD RestrictNullSessAccess để chìa khóa và đặt nó là 0 để cho phép tất cả null Session để truy cập tất cả các đường ống và cổ phiếu tạo ra trên machine.`

mà thêm RestrictNullSessAccess = 0 đến registery của bạn.

+1

Điều này đúng với Windows Server 2003. Đối với Windows XP, hãy đảm bảo cài đặt Chính sách bảo mật cục bộ "Truy cập mạng: Cho phép mọi quyền áp dụng cho người dùng ẩn danh" được đặt thành Đã bật. – Max

+3

Một số nội dung đó sẽ là gì? Liên kết đến php.net không hữu ích lắm. Bạn có thể củng cố giải pháp của mình ở đây không? – Wes

+1

@ Tôi đã chỉnh sửa câu trả lời của mình. Hy vọng rằng sẽ giúp. – Max

3

Hãy thử các chương trình file: URI:

file://server/dir 
file:///Z:/dir 

Các bắt đầu luôn luôn là file://. Đoạn đường dẫn tiếp theo là máy chủ. Nếu trên máy cục bộ của bạn, hãy để trống (xem ví dụ thứ hai). Xem thêm File URIs in Windows.

+0

cảm ơn câu trả lời của bạn, gumbo! Thật không may cả hai giải pháp đều không hoạt động. is_dir() alsways trả về false. PS: trên một thư mục địa phương (ví dụ c:/dir) nó trả về true! – Max

+0

Bạn đã thử đường dẫn đó trong Windows Explorer chưa? Nó cũng sẽ hoạt động ở đó. – Gumbo

7

Bạn có thể để xampp cài đặt apache làm dịch vụ và chạy tập lệnh php máng apache này. Và dịch vụ apache (chạy như localsystem) không được phép truy cập vào mạng theo cách tài khoản người dùng của bạn.

Dịch vụ chạy trong ngữ cảnh của tài khoản LocalSystem thừa kế ngữ cảnh bảo mật của SCM. SID người dùng được tạo từ giá trị SECURITY_LOCAL_SYSTEM_RID. Tài khoản không được liên kết với bất kỳ tài khoản người dùng đã đăng nhập nào.
này có một số ý nghĩa:
...
      * Dịch vụ này trình bày các thông tin của máy tính đến các máy chủ từ xa. ...

Bạn có thể kiểm tra điều này bằng cách bắt đầu apache dưới dạng ứng dụng bảng điều khiển (apache_start.bat trong thư mục xampp nên làm điều đó) và chạy lại tập lệnh. Bạn có thể sử dụng cả hai dấu gạch chéo về phía trước và phía sau trong đường dẫn unc. Tôi muốn đề nghị sử dụng // server/share vì php không quan tâm đến/trong chuỗi ký tự.

<?php 
$uncpath = '//server/dir'; 
$dh = opendir($uncpath); 
echo "<pre>\n"; 
var_dump($dh, error_get_last()); 
echo "\n</pre>"; 
Các vấn đề liên quan