Lý do chính khiến bạn không nhận được đầu ra từ một lệnh như dir
là do dir
không tồn tại. Đó là một phần của dấu nhắc lệnh, và giải pháp cho vấn đề cụ thể này là tốt, trong trang này ở đâu đó.
Bạn có thể tìm thấy điều này bằng cách nhấn WIN + R
, và gõ vào dir
hoặc start
cho rằng vấn đề - một thông báo lỗi xuất hiện!
Tuy nhiên, điều này có thể xảy ra, tôi thấy rằng cách đáng tin cậy nhất để thực hiện bất kỳ quá trình liên quan nào trong Windows là sử dụng Mô hình đối tượng thành phần. Bạn nói cho chúng tôi để chia sẻ kinh nghiệm của chúng tôi, phải không?
$ tôi nghe mọi người cười
lấy lại bình tĩnh của bạn chưa?
Vì vậy, đầu tiên chúng ta sẽ tạo ra các đối tượng COM:
$pCOM = new COM("WScript.Shell");
Sau đó, chúng tôi sẽ chỉ cần chạy những gì bao giờ cần phải được chạy.
$pShell = $pCom->Exec("C:\Random Folder\Whatever.exe");
Cool! Bây giờ, nó sẽ treo cho đến khi mọi thứ được hoàn thành trong nhị phân đó. Vì vậy, những gì chúng ta cần làm bây giờ là lấy đầu ra.
$sStdOut = $pShell->StdOut->ReadAll; # Standard output
$sStdErr = $pShell->StdErr->ReadAll; # Error
Có một số thứ khác bạn có thể làm - tìm hiểu là những gì quá trình ID, mã lỗi, vv Mặc dù this example là dành cho Visual Basic, nó dựa trên các chương trình tương tự.
có thể do có lỗi? :) kiểm tra xem mã lỗi 1 có nghĩa là gì ... – Catalin
nếu tôi khởi chạy cùng lệnh trên cmd shell với php script.php nó hoạt động, khi tôi khởi chạy nó từ trình duyệt (vì vậy máy chủ web) nó không hoạt động, tôi thực sự không hiểu trong đó lỗi là – albanx
@albanx: Điều đó sẽ dẫn tôi tin rằng các quyền nếu nó hoạt động khi bạn chạy nó và không phải khi IIS. –