Hướng dẫn php run bat file - php chạy tập tin bat

Đoạn này là từ mã làm việc.

Nội phân chính

  • Làm thế nào để bạn chạy một tệp .bat từ PHP?
  • Làm thế nào để bạn chạy một tập tin hàng loạt từng bước?
  • Làm cách nào để chạy một tập tin hàng loạt từ HTML?
  • %1 có nghĩa là gì trong một tập tin hàng loạt?

Bạn có thể kích hoạt tệp Bat không chỉ từ Windows GUI hoặc Trình lập lịch tác vụ, mà trực tiếp từ tập lệnh PHP khi bạn cần. Nhưng trong hầu hết các trường hợp, nó sẽ thực thi trong 30-60 giây. Tùy thuộc vào cấu hình PHP của bạn. Nếu công việc trong tệp BAT dài và bạn không muốn đóng băng các tập lệnh PHP của mình, bạn cần phải bỏ công việc dơi như một quy trình khác bằng cách sử dụng php.exe và không đáng tin cậy từ Apache.

Điều này chạy ở chế độ nền trong Windows, được xem là các quy trình riêng biệt cmd.exephp.exe từ Trình quản lý tác vụ không tạm dừng các tập lệnh APACHE PHP của bạn. Các tin nhắn được tạo bởi tập lệnh của bạn có thể được lưu trữ và lấy lại qua các tệp nhật ký.background mode in Windows, seen as separate processes cmd.exe and php.exe from Task Manager not halting your Apache PHP scripts. The messages produced by your script may be stored and retrieved back via log files.

Trong trường hợp của tôi trong file_scanner.php, tôi thực hiện một số tính toán nặng trong vòng lặp cho các tệp lớn có thể kéo dài trong vài giờ với chức năng PHP sleep() không quá tải CPU.

Kết quả thành công của Poiner từ File $r mà bạn có thể truy vấn qua AJAX nếu bạn muốn biết thành công hoặc bắt đầu. Trong trường hợp của tôi, file_scanner.php viết tệp nhật ký với các tin nhắn

@echo Off
D:\PHP\php.exe D:\Web\example.com\tasks\file_scanner.php > D:\Web\example.com\tasks\file_scanner.log
exit
1, bạn có thể tải vào giao diện người dùng của mình với AJAX cứ sau vài giây để hiển thị tiến trình.

PHP

/**
 * Runs bat file in background mode
 *
 */
 function run_scanner() {

    $c='start /b D:\Web\example.com\tasks\file_scanner.bat'; 
    $r=pclose(popen($c, 'r')); 
    return json_encode(array('result'=>$r));

 }

CON DƠI

@echo Off
D:\PHP\php.exe D:\Web\example.com\tasks\file_scanner.php > D:\Web\example.com\tasks\file_scanner.log
exit

Trước khi mọi người bắt đầu với "Rủi ro bảo mật" "không thể thực hiện" dừng lại ở đó và đọc toàn bộ bài đăng

Tôi có một máy chủ web được thiết lập từ máy tính xách tay gia đình đang đóng vai trò là máy chủ web trò chơi, tôi đang cố gắng tạo GUI để chúng tôi dễ dàng duy trì máy chủ và tôi đang cố gắng sử dụng các tệp hàng loạt để thực hiện các hành động trên máy tính

Vì vậy, để đặt điều này vào quan điểm, tôi có chỉ mục chỉ mục của mình.php

Và startederver.bat của tôi sẽ chạy trên máy tính xách tay chạy máy chủ và sẽ thực hiện tất cả các hành động nesscary để khởi động máy chủ trò chơi của chúng tôi để có một thư mục khác "thể hiện" có chứa một "server.exe" có thể chạy được mà tệp hàng loạt sẽ chạy

Vấn đề tôi đang gặp đang chạy máy chủ web và kiểm tra nó không hoạt động nếu tôi mở tệp hàng loạt nó hoạt động trực tiếp nhưng có vẻ như mã PHP không hoạt động

Để làm rõ, tôi đang sử dụng Apache và trình duyệt của tôi là Chrome

Và chỉ là một câu hỏi nhanh cho bất cứ ai sẵn sàng trả lời tuyến đường tôi sẽ đúng phải không? Sử dụng PHP sẽ cho phép mọi thứ chạy trên máy lưu trữ máy chủ để người dùng cuối sẽ chỉ thấy GUI và máy chủ sẽ chạy các tệp hàng loạt và mọi thứ trên máy chủ web chứ không phải máy cục bộ nếu điều đó có ý nghĩa?

Chỉnh sửa: Để rõ ràng hơn về những gì đang diễn ra trên Chức năng thực hiện nhưng nó chỉ bị treo như ứng dụng đang tải Tôi cần một giải pháp thực sự sẽ mở ứng dụng là máy tính chủ của tôi chẳng hạn nếu tôi muốn mở Notepad, tôi nhấn một nút Trên máy chủ web và notepad sẽ mở trên máy tính

EDIT 2: Tôi muốn lưu ý rằng tôi không chính xác cần sử dụng hàm

@echo Off
D:\PHP\php.exe D:\Web\example.com\tasks\file_scanner.php > D:\Web\example.com\tasks\file_scanner.log
exit
2 và tôi đã thử tất cả các câu trả lời cho ngày 7/19/2017: 3: 45pm không ai hoạt động nếu tôi làm điều gì đó trên các loại
@echo Off
D:\PHP\php.exe D:\Web\example.com\tasks\file_scanner.php > D:\Web\example.com\tasks\file_scanner.log
exit
3 tôi sẽ nhận được Aneed to use the
@echo Off
D:\PHP\php.exe D:\Web\example.com\tasks\file_scanner.php > D:\Web\example.com\tasks\file_scanner.log
exit
2 function and I have tried all the answers to date 7/19/2017:3:45pm none are working if I do something on the sorts
@echo Off
D:\PHP\php.exe D:\Web\example.com\tasks\file_scanner.php > D:\Web\example.com\tasks\file_scanner.log
exit
3 I will get a
@echo Off
D:\PHP\php.exe D:\Web\example.com\tasks\file_scanner.php > D:\Web\example.com\tasks\file_scanner.log
exit
4 and simply just have
@echo Off
D:\PHP\php.exe D:\Web\example.com\tasks\file_scanner.php > D:\Web\example.com\tasks\file_scanner.log
exit
5 in the batch file the main issue I am having is the server is not physically showing the opened file like displaying the GUI lets just take notepad for example

Tôi có thể mở notepad và nhận được một số giá trị trả về miễn là tệp hàng loạt của tôi đóng Notepad sau khi nó chạy hoàn thành tuy nhiên GUI cho notepad không bao giờ được hiển thị và điều đó rất quan trọng

Tôi đã đọc trong một vài bài viết về việc sử dụng Apache làm dịch vụ mà tôi khá chắc chắn nhưng tôi biết rằng Xaammp có quyền riêng tư và tôi đã kiểm tra hộp nói rằng "cho phép Apache tương tác với máy tính để bàn" tuy nhiên không có GUI nào xuất hiện Điểm chính tôi đoán tôi đang cố gắng vượt qua là tôi cần hiển thị GUI không chỉ mở tệp dưới dạng dịch vụ nền.

Nếu nó giúp việc trả lời dễ dàng hơn, tôi sẵn sàng chuyển đổi ngôn ngữ lập trình nếu có một thứ có thể làm những gì tôi muốn dễ dàng hơn

Xem thêm:

Kịch bản:

Có hai tệp trong "C: \ TestFolder \" -> Batch.bat -> Command.cmd
->Batch.bat
->Command.cmd

Câu hỏi:

Làm cách nào để chạy các tệp này?

Những gì tôi đã thử cho đến nay và thất bại

Method1
$shell = new COM("WScript.Shell") or die("Requires Windows Scripting Host");
$exePath = ("C:\TestFolder\Batch.bat");//also tried Command.cmd
$shell->exec($exePath);

Method2
$result = `C:\TestFolder\Batch.bat`;//also tried Command.cmd

Method3
exec("C:\TestFolder\Batch.bat", &$Result);//also tried Command.cmd

Method4
system("cmd /c C:\TestFolder\Batch.bat");//also tried Command.cmd

Bình luận


1 giải pháp solution

Giải pháp 1

Không sử dụng "wscript.shell". Chỉ cần sử dụng

@echo Off
D:\PHP\php.exe D:\Web\example.com\tasks\file_scanner.php > D:\Web\example.com\tasks\file_scanner.log
exit
6 hoặc sử dụng bất kỳ tên tệp thực thi nào khác. Vui lòng xem: http://php.net/manual/en/function.exec.php [^].
http://php.net/manual/en/function.exec.php[^].

Tốt hơn là đừng sử dụng các đường dẫn tuyệt đối. Sử dụng đường dẫn so với trang. Có thể có một vấn đề khác: Máy chủ HTTP chạy các ứng dụng trong môi trường hộp cát không cho phép truy cập bất kỳ tệp nào ngoài thư mục gốc dành cho phía bạn. Nhiều khả năng, thư mục như "C: \ testFolder" không hợp pháp.

—Sa

Bình luận

1 giải pháp

Hướng dẫn php run bat file - php chạy tập tin bat

Chuyên gia hàng đầu
24 giờ cuối cùngTháng này

Codeproject, 20 Bay Street, Tầng 11 Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900

Làm thế nào để bạn chạy một tệp .bat từ PHP?

Sử dụng các trích dẫn đơn như $ str = exec ('start /b path \ to \ batch.bat'); /B có nghĩa là dơi sẽ được thực thi trong nền, vì vậy phần còn lại của PHP sẽ tiếp tục sau khi chạy dòng đó, trái ngược với $ str = exec ('start /b /c lệnh', $ result); Trường hợp lệnh được thực thi và sau đó kết quả được lưu trữ để sử dụng sau.$str = exec('start /B Path\to\batch. bat'); The /B means the bat will be executed in the background so the rest of the php will continue after running that line, as opposed to $str = exec('start /B /C command', $result); where command is executed and then result is stored for later use.

Làm thế nào để bạn chạy một tập tin hàng loạt từng bước?

Thực hiện các tập tin hàng loạt..

Bước 1 - Mở dấu nhắc lệnh (cmd.exe) ..

Bước 2 - Đi đến vị trí nơi. dơi hoặc. Tệp CMD được lưu trữ ..

Bước 3 - Viết tên của tệp như được hiển thị trong hình ảnh sau và nhấn nút Enter để thực thi tệp hàng loạt ..

Làm cách nào để chạy một tập tin hàng loạt từ HTML?

Chỉ cần tạo một tệp hàng loạt và lưu ở vị trí nơi có tệp HTML của bạn. Thẻ neo này sẽ thực thi tệp hàng loạt (BAT). Sau khi nhấp vào liên kết, bạn sẽ nhận được cửa sổ nhắc mở/lưu/đóng, nếu bạn sẽ nhấp vào mở thì tệp Batch sẽ được thực thi.create a batch file and save in the location where your html file is there. this anchor tag will execute the (test. bat) batch file. After clicking on the link , you will get the window prompting to open/save/close, if you will click on open then batch file will be executed.

%1 có nghĩa là gì trong một tập tin hàng loạt?

Khi được sử dụng trong dòng lệnh, tập lệnh hoặc tệp hàng loạt, %1 được sử dụng để biểu diễn một chuỗi biến hoặc chuỗi khớp. Ví dụ: trong tệp Batch Microsoft, %1 có thể in những gì được nhập sau tên tệp hàng loạt.used to represent a variable or matched string. For example, in a Microsoft batch file, %1 can print what is entered after the batch file name.