Cách chạy PHP từ dòng lệnh Windows trong WAMPServer


81

Tôi mới sử dụng php và muốn chạy php từ dòng lệnh. Tôi đã cài đặt WAMP và đặt "Biến hệ thống" vào thư mục php của mình (chính là C:\wamp\bin\php\php5.4.3).

Khi tôi đi tới Run-> CMD-> Nhập php -avà nhấn enter, nó sẽ hiển thị interactive mode enabled. Nhưng khi tôi viết echo 'Hi';nó không hiển thị gì.

Tôi thậm chí không thấy bất cứ điều gì giống như 'php> "khi tôi nhập php -avà nhấn enter.



Theo như tôi có thể nói lựa chọn duy nhất đúng đắn dành cho Windows là sử dụng tuyệt vời psysh , được đề nghị từ câu trả lời này SO khác: stackoverflow.com/a/33790472/327074
icc97

Câu trả lời:


72

PHP CLI như được gọi (php cho Giao diện dòng lệnh) được gọi là php.exe Nó tồn tại c:\wamp\bin\php\php5.x.y\php.exe ( trong đó x và y là số phiên bản của php mà bạn đã cài đặt)

Nếu bạn muốn tạo các tập lệnh php để chạy từ dòng lệnh thì nó rất dễ dàng và rất hữu ích.

Tạo cho mình một tệp hàng loạt như thế này, hãy gọi nó là phppath.cmd:

PATH=%PATH%;c:\wamp\bin\php\phpx.y.z
php -v

Thay đổi x.y.ztên thư mục hợp lệ cho một phiên bản PHP mà bạn đã cài đặt trong WAMPServer

Lưu tệp này vào một trong các thư mục đã có trên PATH của bạn, vì vậy bạn có thể chạy nó từ mọi nơi.

Bây giờ từ một cửa sổ lệnh, cd vào thư mục nguồn của bạn và chạy> phppath.

Sau đó chạy

php your_script.php

Nó sẽ hoạt động như một giấc mơ.

Đây là một ví dụ cấu hình PHP Composer và PEAR nếu được yêu cầu và chúng tồn tại

@echo off

REM **************************************************************
REM * PLACE This file in a folder that is already on your PATH
REM * Or just put it in your C:\Windows folder as that is on the
REM * Search path by default
REM * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
REM * EDIT THE NEXT 3 Parameters to fit your installed WAMPServer
REM **************************************************************


set baseWamp=D:\wamp
set defaultPHPver=7.4.3
set composerInstalled=%baseWamp%\composer
set phpFolder=\bin\php\php

if %1.==. (
    set phpver=%baseWamp%%phpFolder%%defaultPHPver%
) else (
    set phpver=%baseWamp%%phpFolder%%1
)

PATH=%PATH%;%phpver%
php -v
echo ---------------------------------------------------------------


REM IF PEAR IS INSTALLED IN THIS VERSION OF PHP

IF exist %phpver%\pear (
    set PHP_PEAR_SYSCONF_DIR=D:\wamp\bin\php\php%phpver%
    set PHP_PEAR_INSTALL_DIR=D:\wamp\bin\php\php%phpver%\pear
    set PHP_PEAR_DOC_DIR=D:\wamp\bin\php\php%phpver%\docs
    set PHP_PEAR_BIN_DIR=D:\wamp\bin\php\php%phpver%
    set PHP_PEAR_DATA_DIR=D:\wamp\bin\php\php%phpver%\data
    set PHP_PEAR_PHP_BIN=D:\wamp\bin\php\php%phpver%\php.exe
    set PHP_PEAR_TEST_DIR=D:\wamp\bin\php\php%phpver%\tests

    echo PEAR INCLUDED IN THIS CONFIG
    echo ---------------------------------------------------------------
) else (
    echo PEAR DOES NOT EXIST IN THIS VERSION OF php
    echo ---------------------------------------------------------------
)

REM IF A GLOBAL COMPOSER EXISTS ADD THAT TOO
REM **************************************************************
REM * IF A GLOBAL COMPOSER EXISTS ADD THAT TOO
REM *
REM * This assumes that composer is installed in /wamp/composer
REM *
REM **************************************************************
IF EXIST %composerInstalled% (
    ECHO COMPOSER INCLUDED IN THIS CONFIG
    echo ---------------------------------------------------------------
    set COMPOSER_HOME=%baseWamp%\composer
    set COMPOSER_CACHE_DIR=%baseWamp%\composer

    PATH=%PATH%;%baseWamp%\composer

    rem echo TO UPDATE COMPOSER do > composer self-update
    echo ---------------------------------------------------------------
) else (
    echo ---------------------------------------------------------------
    echo COMPOSER IS NOT INSTALLED
    echo ---------------------------------------------------------------
)

set baseWamp=
set defaultPHPver=
set composerInstalled=
set phpFolder=

Gọi tệp lệnh này như thế này để sử dụng phiên bản mặc định của PHP

> phppath

Hoặc để tải một phiên bản PHP cụ thể như thế này

> phppath 5.6.30

1
Nó hoạt động, cảm ơn. Bạn có thể giải thích cách hoạt động của nó? Tôi thấy đường dẫn đến thư mục php nhưng làm thế nào mà liên kết nó với biến dòng lệnh "php", và PATH =% PATH% đó làm gì?
TetraDev

PATH=%PATH%nói rằng tạo một biến môi trường PATH mới với đường dẫn hiện tại, tức là %PATH%cộng với thư mục mới mà chúng tôi muốn thêm vào nó. Windows tìm kiếm các thư mục trong PATH để tìm các tệp thực thi tức là 'php.exe' mà nó không thể tìm thấy trong thư mục làm việc hiện tại.
RiggsFolly

1
Nó hoạt động tốt trên W10. Bạn phải có làm điều gì đó sai
RiggsFolly

OP đã yêu cầu một cách hiệu quả PHP REPL trong Windows. Tôi không nghĩ rằng câu trả lời này câu hỏi
icc97

1
@Cullub Không làm việc trong Power Shell - trong vỏ bình thường nó hoạt động
Johanness

36

Tôi nhớ một lần khi tôi tình cờ gặp vấn đề này cách đây vài năm, đó là vì các cửa sổ không có readline, do đó không có shell tương tác, để sử dụng chế độ tương tác php mà không hỗ trợ readline, bạn có thể thực hiện điều này thay thế:

C:\>php -a 
Interactive mode enabled 

<?php 
echo "Hello, world!"; 
?> 
^Z 
Hello, world!

Sau khi vào chế độ tương tác, nhập bằng thẻ php mở ( <?php) và đóng ( ?>) và kết thúc bằng điều khiển Z ( ^Z) biểu thị phần cuối của tệp.

Tôi cũng nhớ lại rằng tôi đã tìm thấy giải pháp từ nhận xét của người dùng trang web của php: http://www.php.net/manual/en/features.commandline.interactive.php#105729


PHP 7.1 đã readlineđược kích hoạt trong bản dựng windows. Việc thực hiện php -asẽ đưa bạn đến Interactive Shellvà cho phép thực hiện các lệnh khi bạn nhấn enter, không cần nhập <?phpv.v ... hãy xem nhận xét này để biết sự khác biệt: be2.php.net/manual/en/…
superphonic

12

Thử sử dụng tệp hàng loạt

  1. Mở notepad
  2. kiểu php -S localhost:8000
  3. Lưu file dưới dạng .bat phần mở rộng,server.bat
  4. bây giờ hãy nhấp vào server.battệp máy chủ của bạn đã sẵn sànghttp://localhost:8000

Sự phụ thuộc

nếu bạn gặp lỗi php không nhận ra bất kỳ lệnh bên trong hoặc bên ngoài nào thì hãy biến môi trường goto và chỉnh sửa đường dẫn thành php.exe "C:\wamp\bin\php\php5.4.3"


Với WAMPServer, bạn không bao giờ nên thêm bất cứ thứ gì vào đường dẫn. Nó phá hủy khả năng dễ dàng chuyển đổi giữa nhiều phiên bản PHP
RiggsFolly

11

Sự cố bạn đang mô tả có vẻ như phiên bản PHP của bạn có thể bị thiếu mô-đun PHP readline, khiến trình bao tương tác không hoạt động. Tôi căn cứ vào lỗi PHP này gửi .

Thử chạy

php -m

Và xem liệu "readline" có xuất hiện trong đầu ra hay không.

Có thể có những lý do chính đáng để bỏ qua dòng đọc khỏi bản phân phối. PHP thường được thực thi bởi một máy chủ web; vì vậy nó không thực sự cần thiết cho hầu hết các trường hợp sử dụng. Tôi chắc chắn rằng bạn có thể thực thi mã PHP trong một tệp từ dấu nhắc lệnh, bằng cách sử dụng:

php file.php

Ngoài ra còn có phpsh dự án cung cấp một trình bao tương tác (tốt hơn) cho PHP. Tuy nhiên, một số người đã gặp sự cố khi chạy nó trong Windows (bản thân tôi đã không thử điều này).

Chỉnh sửa : Theo tài liệu ở đây , readlinekhông được hỗ trợ trong Windows:

Lưu ý: Tiện ích mở rộng này không khả dụng trên nền tảng Windows.

Vì vậy, nếu điều đó là chính xác, các tùy chọn của bạn là:

  • Tránh trình bao tương tác và chỉ thực thi mã PHP trong các tệp từ dòng lệnh - điều này sẽ hoạt động tốt
  • Thử làm cho phpsh hoạt động trong Windows

Không nó không xuất hiện? Nó có nghĩa là gì?
Daman

Có nghĩa là chế độ tương tác không hoạt động trong bản phân phối PHP của bạn. Tôi nghĩ tốt nhất là bạn nên đặt mã trong tệp .php và thực thi chúng từ dòng lệnh hoặc thông qua máy chủ web - điều đó sẽ hoạt động. Liên kết trong câu trả lời của tôi đề cập rằng bạn có thể biên dịch PHP từ nguồn và bao gồm readlineđể làm cho điều này hoạt động - nhưng đó có thể là một nỗ lực nhỏ trên Windows nếu bạn không có kinh nghiệm cần thiết và toàn bộ chuỗi công cụ được cài đặt.
driis

@driis Tôi đã cài đặt python để sử dụng phpsh từ Facebook nhưng sau nhiều nghiên cứu, tôi phát hiện ra rằng phpsh không tương thích với python 3 :( Có gì giống với phpsh được hỗ trợ bởi python 3 không?
Daman

@Daman, xin lỗi, tôi không biết gì cả. Có lẽ cài đặt Python 2? Ngoài ra, tôi nghĩ rằng mọi người cũng gặp vấn đề khi chạy phpsh trong Windows, một lần nữa, tôi đã không tự mình thử.
driis

10

Nếu bạn chỉ muốn chạy một đoạn mã nhanh, bạn có thể sử dụng tùy chọn -r:

php -r "echo 'hi';"

-r cho phép chạy mã mà không cần sử dụng thẻ script <?..?>


4

Bạn có thể chạy các trang php bằng cách sử dụng php.exe, tạo một số tệp php với mã php và trong cmd ghi "[PATH to php.ext]\php.exe [path_to_file]\file.php"


đường dẫn của php.exe của bạn là gì?
Adidi

C: \ wamp \ bin \ php \ php5.4.3 \ php.exe
Daman

1
vì vậy tạo cho phép nói tên trang php test.php với <? php echo ('test'); ?> - đặt nó trên c: / mở dòng lệnh của bạn và gõ "C: \ wamp \ bin \ php \ php5.4.3 \ php.exe" "c: \ test.php" - bạn thấy sao?
Adidi

2

CẬP NHẬT Sau một vài nghiên cứu, giải pháp tốt nhất là sử dụng thông tin đó một luồng stackoverflow khác để tránh đầu vào ctrl + z và cả từ đầu ra màn hình. Vì vậy, thay vì php -abạn nên sử dụngcall "php.exe" -f NAMED_SCRIPT.php

Không thể đọc trong Windows, vì vậy không có trình bao php nào tồn tại được viết bằng php sẽ hoạt động. Nhưng có một cách giải quyết bằng cách sử dụng -a chế độ tương tác.

2 vấn đề phổ biến ở đây. Bạn không thể thấy kết quả cho đến khi thực hiện lệnh CTRL Z để chỉ ra cuối cùng của mã / tệp như EOF. Khi bạn làm vậy, kết quả trong hầu hết các trường hợp là kết quả được in ra và cửa sổ đóng nhanh. Dù sao, bạn sẽ được trả về cmd không phải là chế độ tương tác -a.

Lưu nội dung này vào tệp .bat và xác định PHP PATH của bạn thành các biến Windows hoặc sửa đổi php.exe thành "đường dẫn đầy đủ đến exe" để thay thế:

::
:: PHP Shell launch wrapper
::
@ECHO off
call "php.exe" -a

echo.
echo.

call "PHP Shell.bat"

Đây là một chế độ -a khởi chạy hàng loạt đơn giản của php.exe. Khi nó khởi chạy php, tập lệnh dừng ngay cả khi không có đoạn tạm dừng nào được viết bởi vì "vào" sự chờ đợi tương tác cho đầu vào. Khi bạn nhấn CTRL Z, nhận được SIGSTEP (bước tiếp theo) không phải SIGSTOP (đóng, thường là CTRL + C), sau đó đọc phần nhập tiếp theo, đây là lệnh gọi đệ quy đến chính .bat. Vì bạn luôn ở chế độ PHP -a, không có lệnh thoát. Bạn phải sử dụng CTRL + C hoặc nhấn nút thoát bằng chuột. (Không có alt + f4)

Bạn cũng có thể sử dụng công cụ chuyển đổi "Bat to Exe" để dễ sử dụng.


1

chỉ cần thực hiện các bước sau nếu bạn không cần phiên bản php cũ của mình:

  • mở wamp và nhấp chuột phải vào wamp manager hơn go: tools / Change PHP CLI Version thay vì thay đổi phiên bản php thành mới nhất
  • một lần khác nhấp chuột phải vào trình quản lý wamp hơn là go: tools / Xóa phiên bản không sử dụng được và xóa phiên bản cũ nhất mà hệ thống của bạn nhấn mạnh rằng nó là phiên bản php máy tính của bạn: D
  • đi tới bảng điều khiển / tài khoản người dùng / thay đổi các biến môi trường của tôi và trong biến PATH, nhấp vào chỉnh sửa và thêm đường dẫn phiên bản php mới nhất của bạn trong thư mục bin máy chủ wamp của bạn
  • đóng tất cả các dòng lệnh hoặc IDE và khởi động lại chúng và kiểm tra php -v

cái này hoạt động tốt


0

Đó là vì bạn đang ở 'Chế độ tương tác' nơi php đánh giá mọi thứ bạn nhập. Để xem kết quả cuối cùng, bạn thực hiện 'ctrl + z' và Enter. Bạn sẽ thấy kết quả được đánh giá ngay bây giờ :)

ps chạy cmd với tư cách Quản trị viên!


0

Giải pháp sau dành riêng cho môi trường wamp:

Điều này đã báo cáo tôi trong một thời gian ngắn, đã thử tất cả các đề xuất khác, $ PATH, v.v. thậm chí còn tìm kiếm sổ đăng ký cửa sổ để tìm manh mối:

GUI (wampmanager) cho biết tôi đã chọn phiên bản 7 và có nếu tôi phpinfo () trong một trang trong trình duyệt, nó sẽ cho tôi biết phiên bản 7.xx của nó nhưng php -v trong dấu nhắc lệnh báo cáo là 5.xx

Nếu bạn nhấp chuột phải vào đầu wampmanager đến biểu tượng-> công cụ-> xóa các phiên bản không sử dụng và xóa phiên bản cũ, để nó khởi động lại các dịch vụ thì dấu nhắc lệnh sẽ trả về 7.xx

Giải pháp này có nghĩa là bạn không còn phiên bản cũ nếu bạn muốn chuyển đổi giữa các phiên bản php nhưng có một tệp cấu hình trong C: \ wamp64 \ wampmanager.conf xuất hiện để chỉ định phiên bản sử dụng với CLI (tham số được gọi là phpCliVersion) . Tôi đã thay đổi nó, khởi động lại máy chủ ... nghĩ rằng tôi đã giải quyết nó nhưng không có tác dụng có lẽ tôi hơi thiếu kiên nhẫn nên tôi có cảm giác có thể có một số dặm trong đó.

Hy vọng điều đó sẽ giúp ai đó


1
Phiên bản cũ như bạn gọi là phiên bản PHP mà tất cả các tập lệnh nội bộ của WAMPServer đều được thử nghiệm. Nếu bạn xóa PHP5.xx có nghĩa là bạn có nguy cơ các tập lệnh này không hoạt động!
RiggsFolly

-1

Trong windows, hãy đặt tệp php.exe của bạn vào windows / system32 hoặc bất kỳ thư mục thực thi hệ thống nào khác, sau đó đi tới dòng lệnh và nhập php và nhấn enter sau đó, nếu nó không tạo ra bất kỳ lỗi nào thì bạn đã sẵn sàng sử dụng PHP trên dòng lệnh . Nếu bạn đã đặt php.exe của mình ở một nơi khác ngoài các thư mục hệ thống mặc định thì bạn cần đặt đường dẫn của nó trong các biến môi trường! Bạn có thể đến đó theo đường dẫn sau ....

bảng điều khiển -> Hệ thống -> Chỉnh sửa các biến môi trường trong tài khoản của bạn -> Môi trường Vaiables -> đường dẫn -> chỉnh sửa sau đó đặt đường dẫn tuyệt đối của php.exe của bạn ở đó và làm theo quy trình tương tự như trong đoạn đầu tiên, nếu không có lỗi nào sau đó bạn đã sẵn sàng để sử dụng php từ dòng lệnh!


Không bao giờ đặt PHP trên PATH khi sử dụng WAMPServer. WAMPServer có thể có nhiều phần mềm PHP được cài đặt. Đưa một phiên bản vào PTH có nghĩa là bạn không thể chuyển đổi giữa các phiên bản.
RiggsFolly
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.