Chạy tập lệnh PHP từ dòng lệnh


83

Làm cách nào tôi có thể chạy tập lệnh PHP từ dòng lệnh bằng trình thông dịch PHP được sử dụng để phân tích cú pháp các tập lệnh web?

Tôi có một phpinfo.phptệp được truy cập từ các chương trình web đã Germanđược cài đặt. Tuy nhiên, nếu tôi chạy phpinfo.phptừ dòng lệnh bằng - php phpinfo.phpgrepcho German, tôi không tìm thấy nó. Vì vậy, cả hai phps là khác nhau. Tôi cần chạy một tập lệnh được cài đặt phptrên đó German.

Tôi có thể làm cái này như thế nào?


1
chỉ cần làm php -ivà phân tích rằng
Lawrence Cherone

1
Điều đó nghĩa là gì? Tôi đã làm điều đó vẫn nhưng không
Siddharth

1
Vui lòng thêm chi tiết về phần mềm máy chủ web đã cài đặt , ví dụ thêm đầu ra từ phpinfo();câu hỏi của bạn. Cũng đã cập nhật câu trả lời của tôi.
Sampo Sarrala - codidact.org

Câu trả lời:


162

CẬP NHẬT:

Sau khi hiểu lầm, cuối cùng tôi đã hiểu những gì bạn đang cố gắng làm. Bạn nên kiểm tra các tệp cấu hình máy chủ của mình; bạn đang sử dụng apache2 hay một số phần mềm máy chủ khác?

Tìm các dòng bắt đầu bằng LoadModule php... Có thể có các tệp cấu hình / thư mục được đặt tên modshoặc tương tự như vậy, bắt đầu từ đó.

Bạn cũng có thể kiểm tra đầu ra từ php -r 'phpinfo();' | grep phpvà so sánh các dòng phpinfo();từ máy chủ web.

Để chạy phptương tác:

(vì vậy bạn có thể dán / viết mã trong bảng điều khiển)

php -a

Để làm cho nó phân tích cú pháp tệp và xuất ra bảng điều khiển:

php -f file.php

Phân tích cú pháp tệp và xuất ra tệp khác:

php -f file.php > results.html

Bạn có cần thứ gì khác không?

Để chỉ chạy một phần nhỏ, một dòng hoặc tương tự, bạn có thể sử dụng:

php -r '$x = "Hello World"; echo "$x\n";'

Nếu bạn đang chạy linux thì hãy làm man phptại console.

nếu bạn cần / muốn chạy php qua fpm, hãy sử dụng cli fcgi

SCRIPT_NAME="file.php" SCRIP_FILENAME="file.php" REQUEST_METHOD="GET" cgi-fcgi -bind -connect "/var/run/php-fpm/php-fpm.sock"

trong đó /var/run/php-fpm/php-fpm.sock là tệp ổ cắm php-fpm của bạn.


4
Không. Vấn đề là có nhiều phps trên hệ thống. Tôi cần tìm hiểu php nào được sử dụng để phân tích cú pháp các tập lệnh web. Nếu tôi chạy php từ bảng điều khiển thì nó không thể tìm thấy một lớp - nhưng nếu tôi gọi tập lệnh đó từ web thì vấn đề đó không ở đó. Vì vậy, nó có nghĩa là PHP được sử dụng là khác nhau, phải không?
Siddharth

2
@Siddharth Bạn nên kiểm tra điều đó từ cấu hình s / w máy chủ của mình. Thêm chi tiết máy chủ của bạn vào câu hỏi.
Sampo Sarrala - codidact.org

2
Đúng. Làm thế nào tôi có thể kiểm tra điều đó? Trong ngắn hạn, làm thế nào tôi có thể sử dụng php chính xác từ dòng lệnh?
Siddharth

2
Trong linux, bạn có thể sử dụng which phpđể cho bạn biết bạn đang chạy tệp thực thi nào theo mặc định. Để sử dụng tệp thực thi khác, bạn phải chỉ định đường dẫn đầy đủ đến tệp thực thi mà bạn muốn sử dụng:/path/to/specific/php -f file.php > results.html
Emilio P.

1
chi tiết hay, +1 để giải thích. Chỉ cần vào đây để nhận xét, hãy đồng hồ với môi trường vars, có lẽ bạn cần phải sử dụng các đường dẫn thư mục hoàn chỉnh ngay cả khi kịch bản là trong cùng thư mục mà php.exe
Leandro

3

Tôi đang tìm cách giải quyết vấn đề này trong Windows và có vẻ như nếu bạn không có môi trường ổn định, bạn cần phải đặt thư mục hoàn chỉnh. Ví dụ. với một tệp trong cùng thư mục với PHP:

F:\myfolder\php\php.exe -f F:\myfolder\php\script.php

Nếu bạn chạy nguyên văn này từ dấu nhắc lệnh, >lúc bắt đầu có thể sẽ chuyển hướng đầu ra của -f ...(có thể là lỗi) sang tệp php.exe của bạn và xóa nội dung.
mwfearnley

2

Trên SuSE, có hai tệp cấu hình khác nhau cho PHP: một tệp dành cho Apache và một tệp dành cho CLI (giao diện dòng lệnh). Trong thư mục / etc / php5 /, bạn sẽ tìm thấy một thư mục "apache2" và một thư mục "cli". Mỗi tệp có một tệp "php.ini". Các tệp có cùng mục đích (cấu hình php), nhưng áp dụng cho hai cách chạy PHP khác nhau. Những tệp này, trong số những thứ khác, tải các mô-đun mà PHP sử dụng.

Nếu hệ điều hành của bạn tương tự, thì hai tệp này có thể không giống nhau. Apache php.ini của bạn có thể đang tải mô-đun gearman, trong khi cli php.ini thì không. Khi mô-đun được cài đặt (tự động hoặc thủ công), nó có thể chỉ cập nhật tệp Apache php.ini.

Bạn chỉ cần sao chép tệp Apache php.ini vào thư mục cli để tạo môi trường CLI giống hệt môi trường Apache.

Hoặc, bạn có thể tìm thấy dòng tải mô-đun gearman trong tệp Apache và chỉ sao chép / dán nó vào tệp CLI.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.