Tệp php được khởi chạy. Chạy tập lệnh PHP trong bảng điều khiển

Bài viết này cung cấp hướng dẫn từng bước một về việc cài đặt PHP cho sự hợp tác với máy chủ HTTP Apache trên Windows. Quy trình này đã được thử nghiệm trên cả Windows XP và Vista. Giả định rằng bạn đã hoàn tất quá trình cài đặt Apache.

Các bước thiết lập PHP 5

1. Tải xuống PHP 5

Trước khi bạn bắt đầu, hãy tải xuống bản sao PHP 5 từ tải trang. Tải xuống gói VC6 an toàn từ phần "Windows Binaries" - nghĩa là không tải xuống trình cài đặt. Ví dụ: chọn gói được đánh dấu " Gói zip PHP 5.2.5", nếu bật khoảnh khắc này Phiên bản hiện tại — 5.2.5 .

Lưu ý: Xin lưu ý rằng tôi chưa thử nghiệm quy trình dưới đây với các phiên bản PHP 5.3, chỉ với phiên bản 5.2.5. phiên bản mới nhất tại thời điểm viết bài. Về mặt lý thuyết, các bước tương tự nên được thực hiện đối với Cài đặt PHP 7 .

2. Cài đặt PHP 5

Tạo một thư mục trên ổ cứng của bạn cho PHP. Tôi đề xuất c:php , mặc dù bạn có thể sử dụng tên và vị trí thư mục khác. Cá nhân tôi không thích sử dụng tên có dấu cách.

Trích xuất tất cả các tệp từ kho lưu trữ đã tải xuống vào thư mục này. Để thực hiện việc này, chỉ cần nhấp đúp vào tệp zip. Và sau đó kéo tất cả các tệp vào thư mục c:php.

3. Đối với những người nâng cấp gói: Xóa tệp PHP.INI cũ khỏi thư mục Windows

Nếu bạn đang nâng cấp lên PHP 5 từ trên phiên bản cũ, đi tới thư mục Windows, ( thông thường đây là c:windows) và xóa mọi tệp php.ini mà bạn đã đặt trước đó ở đó.

4. Thiết lập PHP

Đi tới thư mục c:php và tạo bản sao của tệp được đề xuất bởi php.ini. Tên tập tin mới php.ini . Bây giờ bạn sẽ có tệp c:phpphp.in có nội dung giống với tệp được đề xuất c:phpphp.ini.

Ghi chú: Nếu bạn đang sử dụng Apache 1, bạn cần di chuyển tệp php.ini vào thư mục Windows ( c:cửa sổ) hoặc cấu hình biến môi trường PATH để bao gồm c:php . Nếu bạn không biết cách thực hiện việc này, chỉ cần di chuyển tệp php.ini vào thư mục c:windows. Bạn không cần thực hiện việc này nếu bạn đang sử dụng Apache 2, vì sau này chúng tôi sẽ chỉ định một lệnh trong tệp cấu hình Apache 2 với vị trí của tệp php.ini.

Để cài đặt PHP trên Windows 7 bằng cách sử dụng soạn thảo văn bản (ví dụ: chẳng hạn như Notepad, có thể tìm thấy trong phần Hệ thống của menu Bắt đầu)? mở tệp php.ini. Bạn có thể cần thực hiện những thay đổi sau đối với tệp:

a) Bao gồm các thẻ mở ngắn

Tìm dòng sau:

short_open_tag = Tắt

Nếu short_open_tag được đặt thành tắt , các thẻ như "

Vì nhiều tập lệnh PHP của bên thứ ba sử dụng "

short_open_tag=Bật

b) Những câu nói ma thuật

Khi Apache PHP được cài đặt theo mặc định, dữ liệu đến không được tự động thoát bằng dấu gạch chéo. Ví dụ: nếu bạn muốn đầu vào có dấu gạch chéo ngược ("") để tái tạo cài đặt lưu trữ, hãy tìm dòng sau:

magic_quotes_gpc = Tắt

và thay thế nó bằng:

magic_quotes_gpc = Bật

Không nên làm điều này nếu tham số này không được đặt trên máy chủ lưu trữ. Ngay cả khi được đặt thành Tắt, bạn vẫn có thể sử dụng Hàm PHP thêm dấu gạch chéo()để thêm dấu gạch chéo cho các phần dữ liệu cụ thể.

c) Sử dụng biến toàn cục

Một số tập lệnh cũ hơn, khi được thực thi, giả định rằng tất cả dữ liệu được gửi qua biểu mẫu sẽ tự động có một biến PHP có cùng tên. Ví dụ: nếu một biểu mẫu có trường đầu vào có tên là "something", các tập lệnh PHP cũ hơn sẽ giả định rằng bộ xử lý PHP sẽ tự động tạo một biến có tên $something chứa giá trị được chỉ định thông qua trường đó.

Nếu bạn sử dụng các tập lệnh như vậy, bạn cần tìm dòng sau:

register_globals = Tắt

và thay đổi nó thành:

register_globals = Bật

Cảnh báo: Khi cài đặt PHP trên Windows, không làm điều này trừ khi bạn có tập lệnh của bên thứ ba yêu cầu điều này hoạt động. Khi viết tập lệnh mới, tốt nhất bạn nên luôn giả định rằng phần tử register_globals được đặt thành " Tắt«.

d) Hiển thị lỗi

Trên một trang web trực tiếp, các lỗi trong tập lệnh thường được ghi lại mà không xuất hiện trong tệp lỗi PHP. Nhưng trên máy cục bộ, trong khi bạn đang kiểm tra và gỡ lỗi tập lệnh PHP, sẽ thuận tiện hơn khi gửi thông báo lỗi khi chúng được phát hiện trực tiếp tới cửa sổ trình duyệt. Bằng cách này, bạn sẽ không bỏ sót lỗi ngay cả khi quên kiểm tra tệp nhật ký lỗi.

Để PHP hiển thị thông báo lỗi trực tiếp trong cửa sổ trình duyệt, hãy tìm dòng sau:

display_errors = Tắt

và thay đổi nó thành:

display_errors=Bật

Cài đặt này phải luôn được đặt thành Tắt trên trang web đang chạy.

e) Đường dẫn phiên

Nếu tập lệnh sử dụng phiên, hãy tìm dòng sau:

;session.save_path = "/tmp"

session.save_path chỉ định thư mục nơi PHP lưu các tệp phiên. Vì thư mục /tmp không tồn tại trong Windows nên bạn cần cài đặt một thư mục khác. Một cách là tạo một thư mục có tên c:tmp ( như trước đây chúng tôi đã tạo c:php) và chỉ định thư mục này cho tham số này. Nếu bạn làm điều này, hãy thay đổi dòng này như sau:

session.save_path = "c:tmp"

Lưu ý rằng ngoài việc thay đổi đường dẫn, tôi cũng xóa tiền tố dấu chấm phẩy (";") khỏi chuỗi.

Bạn cũng có thể sử dụng thư mục TEMP hiện tại trên máy tính của mình. Hoặc tạo thư mục tmp trong thư mục PHP của bạn, như c:phptmp và đặt tệp cấu hình tương ứng. Có thể có nhiều lựa chọn có thể. Nếu bạn không thể quyết định nên chọn cái nào, chỉ cần tạo c:php và làm như tôi đã nói ở trên.

f) Máy chủ SMTP

Nếu bạn đã cài đặt PHP 55, nếu tập lệnh của bạn sử dụng hàm mail() và bạn muốn hàm này gửi thư thành công trên máy cục bộ của mình, hãy tìm phần sau:

; Chỉ dành cho Win32. SMTP = localhost smtp_port = 25; Chỉ dành cho Win32. ;sendmail_from= [email được bảo vệ]

Thay đổi nó để bao gồm địa chỉ máy chủ SMTP và tài khoản email của bạn. Ví dụ, nếu bạn Máy chủ SMTP mail.example.com và địa chỉ email [email được bảo vệ], thay đổi mã như thế này:

SMTP = mail.example.com smtp_port = 25 sendmail_from = [email được bảo vệ]

Xin lưu ý rằng sau đó, khi tập lệnh cố gắng sử dụng hàm mail(), tập lệnh sẽ cần kết nối với ISP của bạn để tập lệnh hoạt động thành công. Nếu bạn không thay đổi các dòng trên và cố gắng sử dụng hàm mail() trong tập lệnh, hàm này sẽ trả về mã lỗi và hiển thị thông báo lỗi.

Cách định cấu hình Apache cho PHP 5

Có hai cách để cài đặt Apache PHP. Đầu tiên: thiết lập để tải xuống Trình thông dịch PHP như một mô-đun Apache. Thứ hai: định cấu hình nó để chạy trình thông dịch dưới dạng nhị phân CGI. Chỉ một trong số chúng cần được sử dụng. Chọn phương thức mô-đun nếu PHP cũng được cài đặt trên máy chủ lưu trữ, như mô-đun Apache hoặc sử dụng phương thức CGI nếu nó được triển khai trên máy chủ lưu trữ.

a) Chạy PHP 5 dưới dạng mô-đun Apache

Để định cấu hình Apache để tải PHP dưới dạng mô-đun phân tích các tập lệnh PHP, hãy sử dụng trình soạn thảo văn bản ASCII để mở tệp cấu hình Apache, httpd.conf.

Nếu bạn đang sử dụng Apache 1.x, tệp sẽ nằm trong thư mục c:Tệp chương trìnhNhóm ApacheApacheconf. Người dùng Apache 2.0.x có thể tìm thấy nó trong thư mục C:Tệp chương trìnhNhóm ApacheApache2conf và người dùng Apache 2.2.x có trong thư mục C:Tệp chương trìnhNền tảng phần mềm ApacheApache2.2conf. Thông thường, nó nằm trong thư mục conf của thư mục cài đặt Apache.

Xác định vị trí phần của tệp có câu lệnh LoadModule. Các khai báo có ký hiệu băm "#" đứng trước được coi là đã được nhận xét.

Nếu bạn đang sử dụng Apache 1.x, hãy thêm dòng sau sau tất cả các câu lệnh LoadModule:

LoadModule php5_module "c:/php/php5apache.dll"

Nếu bạn đang sử dụng Apache 2.0.x, hãy thêm dòng sau sau tất cả các câu lệnh LoadModule:

LoadModule php5_module "c:/php/php5apache2.dll"

Nếu bạn đang sử dụng Apache 2.2.x, hãy thêm dòng sau:

LoadModule php5_module "c:/php/php5apache2_2.dll"

Lưu ý rằng ví dụ cài đặt PHP này sử dụng ký tự dấu gạch chéo lên (“/”) thay vì dấu gạch chéo ngược truyền thống của Windows (“”). Đây không phải là một lỗi đánh máy.

Nếu bạn đang sử dụng Apache 1.x, hãy tìm chuỗi câu lệnh "AddModule" và thêm dòng sau vào sau tất cả các dòng.

AddModule mod_php5.c

Sau đó tìm khối AddType trong tệp và thêm dòng sau sau câu lệnh AddType cuối cùng. Việc này cần phải được thực hiện bất kể bạn đang sử dụng phiên bản Apache nào. Đối với Apache 2.2.x bạn cần tìm dòng AddType trong phần . Thêm một dòng ngay trước khi đóngcho phần này.

Nếu bạn cần hỗ trợ cho các loại tệp khác, chẳng hạn như ".phtml", hãy thêm chúng vào danh sách, ví dụ như thế này:

Đối với những người sử dụng một trong các phiên bản Apache 2, bạn cần chỉ định vị trí của tệp PHP ini. Thêm dòng sau vào cuối httpd.conf.

PHPIniDir "c:/php"

Nếu bạn đã sử dụng một thư mục khác, bạn sẽ cần thay đổi c:/php thành đường dẫn chính xác. Đừng quên sử dụng dấu gạch chéo lên ("/").

Nếu bạn đang sử dụng Apache 1, bạn đã đặt tệp php.ini vào thư mục Windows hoặc một nơi nào đó trong PATH của bạn. Vì vậy PHP sẽ phải tự tìm nó.

Chạy PHP 5 dưới dạng nhị phân CGI

Nếu bạn đã định cấu hình PHP 5 để tải dưới dạng mô-đun Apache, bạn có thể bỏ qua phần này. Nó dành cho những ai muốn cấu hình PHP để chạy dưới dạng nhị phân CGI.

Quy trình thực hiện việc này khi cài đặt PHP 7 giống nhau đối với cả Apache 1.x và tất cả các phiên bản của dòng 2.x.

Xác định vị trí phần tệp cấu hình Apache chứa phần ScriptAlias. Thêm dòng bên dưới ngay sau dòng ScriptAlias ​​cho " cgi-bin" Nếu bạn đang sử dụng Apache 2.2.x, hãy đảm bảo dòng này nằm trước khi đóngcho phần .

ghi chú: Nếu bạn đã cài đặt PHP ở một vị trí khác, ví dụ c:Program Filesphp , thay vào đó bạn cần chỉ định đường dẫn thích hợp c:/php/ (ví dụ: c:Program Filesphp). Đừng quên rằng ở đây chúng ta đang sử dụng dấu gạch chéo lên ("/") thay vì dấu gạch chéo ngược của Windows ("").

ScriptAlias ​​/php/ "c:/php/"

Apache cần định cấu hình loại MIME PHP. Tìm khối nhận xét AddType giải thích cách sử dụng nó và thêm dòng sau vào bên dưới nó. Đối với Apache 2.2.x, hãy tìm dòng AddType bên dưới . Thêm dòng dưới đây ngay trước khi đóng cho phần này.

Ứng dụng AddType/x-httpd-php .php

Giống như việc cài đặt PHP dưới dạng mô-đun Apache, bạn có thể thêm bất kỳ tiện ích mở rộng nào để Apache nhận dạng chúng dưới dạng tập lệnh PHP, ví dụ:

Ứng dụng AddType/x-httpd-php .phtml

Sau đó, bạn cần yêu cầu máy chủ thực thi tệp thực thi PHP mỗi khi nó gặp tập lệnh PHP. Thêm đoạn mã sau vào tệp, ví dụ sau một khối nhận xét giải thích " Hoạt động«.

Nếu bạn đang sử dụng Apache 2.2.x, hãy thêm mã ngay sau câu lệnh AddType được mô tả ở trên; Apache 2.2.x không có khối bình luận " Hoạt động«.

Ứng dụng hành động/x-httpd-php "/php/php-cgi.exe"

Lưu ý: Phần "/php/" sẽ được nhận dạng là ScriptAlias, một loại macro sẽ được Apache mở rộng thành "c:/php/" ( hoặc "c:/Program Files/php/" nếu bạn đã cài đặt PHP ở đó). Nói cách khác, không đặt đường dẫn "c:/php/php.exe" hoặc "c:/Tệp chương trình/php/php.exe", nhưng hãy sử dụng “/php/php-cgi.exe”.

Nếu bạn đang sử dụng Apache 2.2.x, hãy tìm phần sau trong tệp httpd.conf của bạn:

Thêm các dòng bên dưới ngay sau phần bạn vừa tìm thấy.

AllowOverride Không có Tùy chọn Không Cho phép thứ tự, từ chối Cho phép từ tất cả

c) Đặt trang chỉ mục mặc định

Phần này áp dụng cho tùy chọn cài đặt PHP trên Windows dưới dạng cả mô-đun Apache và nhị phân CGI.

Nếu bạn tạo một tệp index.php và muốn Apache tải nó làm trang chủ của trang web, bạn sẽ phải thêm một dòng khác vào tệp httpd.conf. Tìm dòng bắt đầu bằng " Chỉ mục thư mục", và thêm" chỉ mục.php" vào danh sách các tập tin. Ví dụ: nếu bạn có mã như thế này:

DirectoryIndex index.html

thay đổi nó thành:

DirectoryIndex Index.php Index.html

Lần tiếp theo bạn đăng nhập vào máy chủ web thông qua tên thư mục như " localhost" hoặc " localhost/thư mục/", Apache sẽ gửi tất cả các tập lệnh từ index.php hoặc nội dung của tệp index.html nếu không có index.php.

Khởi động lại máy chủ web Apache

Khởi động lại máy chủ Apache. Điều này là cần thiết để Apache đọc các chỉ thị cấu hình PHP mới mà bạn đã đặt trong tệp httpd.conf. Có thể khởi động lại máy chủ Apache 2.2 bằng cách nhấp đúp vào biểu tượng Apache Service Monitor trên thanh tác vụ và nhấp vào nút “Khởi động lại” trong cửa sổ xuất hiện.

Kiểm tra cài đặt PHP

Sau khi cài đặt PHP 5 5 hoặc phiên bản khác của ngôn ngữ, hãy tạo tệp php với dòng sau:

Lưu tệp có tên test.php vào thư mục htdocs Apache. Nếu bạn sử dụng Notepad thì nhớ lưu tên " test.php" với dấu ngoặc kép. Nếu không, chương trình sẽ tự động thêm phần mở rộng .txt.

Mở tệp này trong trình duyệt của bạn bằng cách nhập “localhost/test.php” (không có dấu ngoặc kép) vào thanh địa chỉ. Không mở tệp trực tiếp thông qua Explorer—bạn sẽ chỉ thấy mã bạn đã nhập trước đó. Bạn cần sử dụng URL trên để yêu cầu trình duyệt truy cập vào máy chủ web Apache chạy PHP để diễn giải tập lệnh.

Nếu mọi việc suôn sẻ, bạn sẽ thấy một trang có thông tin về cách thiết lập PHP. Xin chúc mừng - bạn đã cài đặt thành công PHP và định cấu hình Apache để hoạt động với nó. Bạn có thể tải cùng một tệp test.php lên máy chủ của mình và chạy nó ở đó để tìm hiểu cách máy chủ lưu trữ đã định cấu hình PHP và thử tái tạo các cài đặt này trên máy của bạn.

Nếu cách này không hiệu quả, hãy kiểm tra xem liệu cài đặt PHP hoặc cài đặt Apache có bị lỗi hay không. Để thực hiện việc này, hãy mở cửa sổ nhắc lệnh và chạy php-cgi.exe trên tệp test.php, ví dụ c:phpphp-cgi test.php .

Nếu bạn gọi PHP từ dòng lệnh và thấy một tệp HTML lớn có tất cả thông tin cấu hình PHP thì PHP đã được định cấu hình đúng. Vấn đề có lẽ liên quan đến cấu hình Apache. Đảm bảo bạn khởi động lại Apache sau khi thực hiện thay đổi cấu hình và bạn đã định cấu hình máy chủ web chính xác.

Bắt đầu với phiên bản 4.3, PHP hỗ trợ loại SAPI (Giao diện lập trình ứng dụng máy chủ) mới có tên CLI, có nghĩa là Giao diện dòng lệnh. Đúng như tên gọi, mục đích chính của loại SAPI này là phát triển các ứng dụng shell (hoặc máy tính để bàn) bằng PHP. Có những khác biệt rất nhỏ giữa CLI SAPI và các SAPI khác, những khác biệt này sẽ được thảo luận sâu hơn trong chương này.

SAPI CLI lần đầu tiên được phát hành với PHP 4.2.0, nhưng hồi đó nó là một bản thử nghiệm và phải được kích hoạt rõ ràng bằng --enable-cli khi khởi động./configure. Kể từ PHP 4.3.0, SAPI CLI không còn mang tính thử nghiệm nữa và Luôn luônđược tích hợp và cài đặt dưới dạng tệp thực thi nhị phân php (được gọi là php.exe trên Windows).

Sự khác biệt đáng kể giữa CLI SAPI và các SAPI khác:

    Không giống như CGI SAPI, không có tiêu đề nào được ghi vào đầu ra.

    Mặc dù CGI SAPI có cách chặn các tiêu đề HTTP nhưng không có công tắc tương đương nào để kích hoạt chúng trong CLI SAPI.

    Có một số lệnh php.ini nhất định bị ghi đè trong CLI SAPI vì chúng không có ý nghĩa trong môi trường shell:

Bảng 24-1. Ghi đè chỉ thị php.ini
chỉ thịCLI SAPI - giá trị mặc địnhMột lời bình luận
html_errors SAI Có thể khá khó khăn để đọc thông báo lỗi trong shell chứa đầy những thẻ HTML vô nghĩa đó, vì vậy giá trị mặc định của lệnh này là SAI .
ẩn_flush ĐÚNG VẬY Điều mong muốn là bất kỳ kết luận nào từ in() , tiếng vang() và company ngay lập tức được ghi vào đầu ra, thay vì được gửi đến bộ đệm nào đó. Bạn vẫn có thể sử dụng bộ đệm đầu ra nếu muốn làm việc với đầu ra tiêu chuẩn.
max_execution_time0 (không giới hạn) Do khả năng sử dụng PHP trong môi trường shell là vô hạn nên không có thời gian thực thi tối đa. Trong khi các ứng dụng được viết cho web thực thi trong chưa đầy một giây, thì các ứng dụng shell cố gắng hoàn thành càng lâu càng tốt.
đăng ký_argc_argv ĐÚNG VẬY Các biến toàn cục PHP $argc (số lượng đối số được truyền cho ứng dụng) và $argv (mảng đối số hiện tại) luôn được đăng ký và chứa đầy các giá trị thích hợp khi sử dụng SAPI CLI.

Ghi chú: Các lệnh này không thể được khởi tạo bằng giá trị khác từ tệp cấu hình php.ini hoặc một tệp đặc biệt (nếu được chỉ định). Điều này có phần hạn chế vì các giá trị mặc định này được áp dụng sau khi tất cả các tệp cấu hình đã được phân tích cú pháp. Tuy nhiên, giá trị của chúng có thể được thay đổi trong thời gian chạy (điều này không có ý nghĩa đối với tất cả các lệnh khác, ví dụ: đối với register_argc_argv).

    Sẽ dễ dàng hơn để làm việc trong môi trường shell khi các hằng số sau được xác định:

    Bảng 24-2. Hằng số CLI cụ thể
    Không thay đổiSự miêu tả
    STDIN Đã mở luồng trong stdin. Nó bảo vệ người mở nó

    Bạn không cần phải đóng các luồng này một cách rõ ràng; PHP thực hiện việc này một cách tự động.

  • CLI SAPI Không thay đổi thư mục hiện tại thành thư mục của tập lệnh thực thi!

    Ví dụ cho thấy sự khác biệt giữa CGI SAPI:

    Khi sử dụng phiên bản CGI, đầu ra sẽ là:

    Điều này mang lại sự linh hoạt cao hơn khi viết các tiện ích dòng lệnh trong PHP.

    Ghi chú: CGI SAPI hỗ trợ hành vi CLI SAPI bằng cách sử dụng khóa chuyển -C khi chạy từ dòng lệnh.

  • Bạn có thể lấy danh sách các tùy chọn dòng lệnh cho tệp thực thi PHP bất kỳ lúc nào bằng cách chạy PHP bằng khóa chuyển đổi -h:

    CLI SAPI có ba cách khác nhau để thực thi mã PHP:

    1. Yêu cầu PHP thực thi một tệp cụ thể.

      Phải đặc biệt cẩn thận khi thay thế các biến shell và sử dụng dấu ngoặc kép.

      Ghi chú: Hãy xem kỹ ví dụ, không có thẻ bắt đầu và thẻ kết thúc! Công tắc -r đơn giản là không cần chúng. Sử dụng chúng trong trường hợp này sẽ dẫn đến lỗi trình phân tích cú pháp.

    2. Cung cấp mã PHP để được thực thi thông qua đầu vào tiêu chuẩn (stdin).

      Điều này cho phép bạn tự động tạo mã PHP và chuyển nó sang tệp thực thi, như trong ví dụ (giả tạo) này:

      $some_application | some_filter | php | sắp xếp -u >final_output.txt

    Bạn không thể kết hợp ba phương pháp này khi thực thi mã.

    Như với bất kỳ ứng dụng shell nào, không chỉ bản thân PHP mà các tập lệnh PHP của bạn cũng chấp nhận các đối số. Số lượng đối số được truyền cho tập lệnh trong PHP không bị giới hạn (shell có giới hạn về số lượng ký tự được truyền).
    Các đối số được truyền cho tập lệnh của bạn có sẵn thông qua mảng $argv toàn cục. Chỉ số 0 luôn chứa tên của tập lệnh (là một ký tự - trong trường hợp mã PHP đến từ đầu vào tiêu chuẩn hoặc sử dụng chuyển đổi dòng lệnh -r).
    Biến toàn cục thứ hai được đăng ký là $argc, chứa số phần tử trong mảng $argv (và Không số lượng đối số được truyền cho tập lệnh).

    Nếu các đối số bạn muốn truyền vào tập lệnh không bắt đầu bằng ký tự dấu gạch nối (-), thì không có gì đặc biệt cần quan sát. Việc truyền một đối số bắt đầu bằng - vào tập lệnh sẽ gây ra vấn đề vì PHP cho rằng nó phải tự xử lý chúng. Để ngăn chặn điều này, hãy sử dụng -- làm dấu phân cách đối số danh sách. Khi đối số được phân tích cú pháp bằng PHP, mỗi đối số tiếp theo sẽ được chuyển đến tập lệnh của bạn ở trạng thái không thay đổi/không được phân tích cú pháp.

    Tuy nhiên, đây là một cách khác để sử dụng PHP cho shell script. Bạn có thể viết một tập lệnh có dòng đầu tiên bắt đầu bằng #!/usr/bin/php , theo sau là mã PHP thông thường nằm giữa thẻ bắt đầu và kết thúc PHP và các thuộc tính thực thi của tệp được đặt tương ứng. Bằng cách này, nó có thể được thực thi như một tập lệnh Shell hoặc Perl thông thường:

    Như bạn có thể thấy, bạn không phải làm gì đặc biệt khi truyền tham số cho tập lệnh bắt đầu bằng - .

    Bảng 24-3. Tùy chọn dòng lệnh
    Lựa chọnSự miêu tả
    -S

    Hiển thị cú pháp bằng màu sắc.

    Tùy chọn này sử dụng cơ chế phân tích nội bộ của tệp, tạo ra phiên bản HTML có màu của tệp và ghi nó vào đầu ra tiêu chuẩn. Xin lưu ý rằng chỉ một khối […] thẻ HTML được tạo mà không có tiêu đề HTML.

    Ghi chú:

    -w

    Hiển thị văn bản gốc mà không có nhận xét hoặc dấu cách.

    Ghi chú: Tùy chọn này không hoạt động cùng với tùy chọn -r.

    -f

    Phân tích cú pháp và thực thi tệp đã cho. Công tắc này là tùy chọn và có thể được bỏ qua. Chỉ cần cung cấp tên tệp để thực thi là đủ.

    -v

    Viết các phiên bản PHP, PHP SAPI và Zend vào đầu ra tiêu chuẩn, ví dụ:

    -Một

    Chạy PHP tương tác.

    -d

    Tùy chọn này cho phép bạn đặt một giá trị đặc biệt cho từng lệnh cấu hình được phép trong php.ini. Cú pháp là:

    -e

    Tạo thông tin mở rộng cho trình gỡ lỗi/trình biên dịch.

    -z

    Tải phần mở rộng Zend. Nếu chỉ cung cấp tên tệp, PHP sẽ cố tải tiện ích mở rộng đã cho từ đường dẫn thư viện mặc định hiện tại trên hệ thống của bạn (thường được chỉ định là /etc/ld.so.conf trên hệ thống Linux). Truyền tên tệp bằng đường dẫn tuyệt đối sẽ không sử dụng đường dẫn tìm kiếm hệ thống của thư viện. Tên tệp tương đối có thông tin thư mục sẽ yêu cầu PHP thử tải phần mở rộng liên quan đến thư mục hiện tại.

    -l

    Tùy chọn này cung cấp một cách thuận tiện để thực hiện kiểm tra cú pháp trên một mã PHP nhất định. Nếu thành công, văn bản Không phát hiện thấy lỗi cú pháp nào sẽ được ghi vào đầu ra tiêu chuẩn và mã trả về shell sẽ là 0 . Nếu thất bại, văn bản Lỗi phân tích cú pháp cùng với thông báo lỗi nội bộ của trình phân tích cú pháp sẽ được ghi vào đầu ra tiêu chuẩn và mã trả về của shell sẽ là 255 .

    Tùy chọn này sẽ không tìm thấy các lỗi nghiêm trọng (chẳng hạn như các hàm không xác định). Sử dụng -f nếu bạn cũng muốn kiểm tra các lỗi nghiêm trọng.

    Ghi chú: Tùy chọn này không hoạt động cùng với -r.

    -m

    Sử dụng tùy chọn này, PHP in ra các mô-đun PHP và Zend tích hợp (và được tải):

    $ php -m xml mã thông báo phiên tiêu chuẩn posix pcre quá tải mysql mbstring ctype
    -TôiTùy chọn dòng lệnh này gây ra phpinfo() và in kết quả. Nếu PHP không hoạt động chính xác, chúng tôi khuyên bạn nên chạy php -i và xem liệu thông báo lỗi có được in trước hoặc thay vì bảng thông tin hay không. Hãy nhớ rằng đầu ra sẽ ở dạng HTML và do đó khá lộn xộn.
    -r

    Tùy chọn này cho phép bạn chạy PHP trực tiếp trên dòng lệnh. Thẻ bắt đầu và kết thúc PHP () Không cần thiết và gây ra lỗi phân tích cú pháp.

    Ghi chú: Phải cẩn thận khi sử dụng dạng PHP này để đảm bảo không có xung đột với việc thay thế biến dòng lệnh do shell thực hiện.

    Một ví dụ tạo ra lỗi phân tích cú pháp:

    Sử dụng dấu ngoặc đơn " là đúng. Các biến chuỗi được đặt trong dấu ngoặc đơn không được mở rộng khi chạy sh/bash.

    Tệp thực thi PHP có thể được sử dụng để chạy các tập lệnh PHP hoàn toàn độc lập với máy chủ web.
    Nếu bạn đang chạy Unix, bạn nên thêm một dòng đầu tiên đặc biệt vào các tập lệnh PHP của mình và làm cho chúng có thể thực thi được để hệ thống biết chương trình nào sẽ thực thi các tập lệnh đó.
    Trên Windows, bạn có thể liên kết php.exe với tùy chọn nhấp đúp vào tệp .php hoặc tạo một tệp bó (.bat) để chạy tập lệnh thông qua PHP. Một dòng được thêm vào đầu tập lệnh để chạy trên Unix sẽ hoạt động tốt trên Windows, vì vậy bạn có thể viết các chương trình đa nền tảng theo cách này. Dưới đây là một ví dụ về một chương trình PHP đơn giản được thực thi từ dòng lệnh.

    Ở đây chúng tôi sử dụng dòng đầu tiên đặc biệt để cho biết rằng tệp này sẽ được chạy bằng PHP. Ở đây chúng tôi đang làm việc với phiên bản CLI nên các tiêu đề HTTP không được xuất ra. Có hai biến bạn có thể sử dụng khi viết các ứng dụng PHP dòng lệnh: $argc và $argv. Đầu tiên là số đối số cộng 1 (tên script đang chạy). Thứ hai là một mảng các đối số, bắt đầu bằng tên tập lệnh có chỉ số 0 ($argv).

    Chúng tôi kiểm tra xem có ít hơn hoặc nhiều hơn một đối số. Ngoài ra, nếu đối số là --help , -help , -h hoặc -? , chúng tôi in một thông báo trợ giúp, hiển thị tên tập lệnh một cách linh hoạt. Nếu chúng tôi nhận được bất kỳ đối số nào khác, chúng tôi lặp lại nó.

    Nếu bạn muốn chạy tập lệnh trên trên Unix, bạn cần làm cho nó có thể thực thi được và chỉ cần gọi nó là script.php echothis hoặc script.php -h . Trên Windows, bạn có thể tạo một tệp bó để thực hiện tác vụ này:

    Giả sử rằng bạn đã đặt tên cho chương trình là script.php và php.exe của bạn nằm ở c:\php\php.exe , tệp bó này sẽ chạy nó với các tùy chọn bạn đã thêm: script.bat echothis hoặc script.bat -h .

    Xem thêm tài liệu về tiện ích mở rộng Readline để biết các tính năng bạn có thể sử dụng để nâng cao ứng dụng PHP dòng lệnh của mình.

Tôi quyết định dành bài viết này cho tất cả những ai đang bắt đầu học PHP bởi vì mọi người đều mắc lỗi như nhau. Tôi không biết tại sao họ lại cho phép điều đó, nhưng họ luôn làm như vậy. Tôi sẽ không cường điệu nói rằng tôi đã nhận được khoảng một trăm câu hỏi sẽ được trả lời trong bài viết này. Lỗi này liên quan đến khởi chạy không chính xác trong PHP.

Như hầu hết những người mới bắt đầu đều làm:

  1. Tạo nên tập tin PHP(Thỉnh thoảng tập tin HTML, nhưng đây là những người mới bắt đầu nhất).
  2. Viết nó xuống đó Mã PHP.
  3. Và họ nhấp đúp để mở nó trong trình duyệt.

Kết quả là trình duyệt mở mã nhưng không vội thực thi. Nó chỉ hiển thị một số đoạn mã ở dạng văn bản thuần túy hoặc không hiển thị gì cả.

Sai lầm của phương pháp này là học sinh không hiểu được PHP là ngôn ngữ phía máy chủ, không phải khách hàng. Cái này HTML hoặc JavaScript ngôn ngữ máy khách, tất nhiên chúng được trình duyệt xử lý. Nếu không có PHP cần một thông dịch viên. Và trình thông dịch này được máy chủ khởi chạy.

Phần kết luận: bạn cần chạy mã PHP thông qua máy chủ. Nếu bạn có Denwer, tức là thông qua anh ta.

Hiện nay, cách chạy mã PHP qua Denwer. Hầu hết những người mới bắt đầu đều mắc lại sai lầm tương tự. Có vẻ như họ đang làm mọi thứ một cách chính xác, tạo các thư mục cần thiết, khởi động lại Denwer và có vẻ như tất cả những gì còn lại là gọi tệp một cách chính xác. Nhưng ở đây lại xảy ra lỗi: họ lại mở tệp chỉ trong trình duyệt (bằng cách kéo tệp vào trình duyệt hoặc bằng cách nhấp đúp). Điều này có thể dễ dàng được nhìn thấy bằng địa chỉ trên thanh địa chỉ. Sẽ có một cái gì đó như: tập tin:///Z:\home\mysite.local\www\script.php.

Và bạn cần khởi chạy nó một cách chính xác, nhập địa chỉ máy chủ ảo. Nghĩa là, trực tiếp trên thanh địa chỉ của trình duyệt, nhập: http://mysite.local/script.php- Vậy là xong, bây giờ script sẽ chạy và hiển thị kết quả của nó.

Mình hy vọng bài viết này sẽ giúp ích được nhiều người mới bắt đầu học PHP.

Có ba cách khác nhau để chạy mã PHP trong SAPI CLI:

    Chỉ định một tập tin cụ thể để chạy.

    $ php my_script.php $ php -f my_script.php

    Cả hai phương pháp (với việc chỉ định tùy chọn -f hoặc không) sẽ chạy tệp my_script.php. Không có hạn chế nào về việc chạy tệp nào và các tập lệnh PHP không bắt buộc phải có phần mở rộng .php.

    Bình luận:

    Nếu bạn cần truyền đối số cho tập lệnh thì khi sử dụng tùy chọn -fđối số đầu tiên nên là -- .

  1. Truyền mã PHP trực tiếp trên dòng lệnh.

    $ php -r "print_r(get_d xác định_constants());"

    Bạn cần đặc biệt cẩn thận khi sử dụng phương pháp này vì việc thay thế biến shell có thể xảy ra khi sử dụng dấu ngoặc kép.

    Bình luận:

    Đọc ví dụ cẩn thận: không có thẻ mở hoặc đóng! Lựa chọn -r nó chỉ không cần chúng. Việc sử dụng chúng sẽ dẫn đến lỗi trình phân tích cú pháp.

  2. Truyền mã PHP đang chạy thông qua đầu vào tiêu chuẩn ( stdin).

    Điều này mang lại khả năng mạnh mẽ để tạo mã PHP và đưa nó vào tệp khởi động, như trong ví dụ (hư cấu) này:

    $some_application | some_filter | php | sắp xếp -u > Final_output.txt

Bạn không thể kết hợp bất kỳ cách nào trong ba cách này để chạy mã.

Giống như bất kỳ ứng dụng bảng điều khiển nào khác, tệp nhị phân PHP chấp nhận các đối số, nhưng tập lệnh PHP cũng có thể nhận các đối số. PHP không giới hạn số lượng đối số được truyền cho tập lệnh (giao diện điều khiển shell đặt một ngưỡng nhất định cho số lượng ký tự có thể được truyền; giới hạn này thường là đủ). Các đối số được truyền có sẵn trong mảng toàn cục $argv . Chỉ mục đầu tiên (không) luôn chứa tên của tập lệnh được gọi từ dòng lệnh. Xin lưu ý rằng nếu mã được gọi nhanh chóng từ dòng lệnh bằng tùy chọn -r, giá trị của $argv sẽ chỉ là dấu gạch nối ( - ). Điều này cũng đúng với mã được dẫn từ STDIN.

Biến toàn cục thứ hai được đăng ký là $argc, chứa số phần tử trong mảng $argv ((và Không số lượng đối số được truyền cho tập lệnh).

Nếu các đối số được thông qua không bắt đầu bằng ký tự - , thì sẽ không có bất kỳ vấn đề đặc biệt nào. Một đối số được truyền cho tập lệnh bắt đầu bằng - sẽ tạo ra vấn đề vì PHP sẽ quyết định rằng nó sẽ tự xử lý nó. Để ngăn chặn hành vi này, hãy sử dụng dấu phân cách danh sách đối số -- . Khi dấu phân cách này được PHP đọc, tất cả các đối số tiếp theo sẽ được chuyển nguyên vẹn vào tập lệnh.

# Lệnh này sẽ không chạy mã này nhưng sẽ hiển thị thông tin về cách sử dụng PHP $ php -r "var_dump($argv);" -h Cách sử dụng: php [-f] [...] # Lệnh này sẽ chuyển đối số "-h" cho tập lệnh, ngăn không cho hiển thị trợ giúp PHP $ php -r "var_dump($argv);" -- -h mảng(2) ( => string(1) "-" => string(2) "-h" )

Tuy nhiên, trên hệ thống Unix có một cách khác để sử dụng PHP cho các tập lệnh console. Bạn có thể viết một đoạn script có dòng đầu tiên bắt đầu bằng #!/usr/bin/php(hoặc một đường dẫn chính xác khác tới tệp nhị phân PHP CLI). Sau dòng này, bạn có thể đặt mã PHP thông thường, kèm theo các thẻ mở và đóng PHP. Ngay sau khi các thuộc tính khởi chạy chính xác được đặt cho tệp (ví dụ: kiểm tra chmod +x), tập lệnh có thể được chạy dưới dạng bảng điều khiển thông thường hoặc tập lệnh Perl:

Ví dụ #1 Chạy tập lệnh PHP dưới dạng tập lệnh console

#!/usr/bin/php
var_dump ($argv);
?>

Giả sử rằng tệp này được gọi là test và nằm trong thư mục hiện tại, bạn có thể thực hiện các thao tác sau:

$ chmod +x test $ ./test -h -- foo array(4) ( => string(6) "./test" => string(2) "-h" => string(2) "--" => chuỗi(3) "foo" )

Như bạn có thể thấy, trong trường hợp này bạn không cần phải lo lắng về việc truyền các tham số bắt đầu bằng - .

Tệp thực thi PHP có thể được sử dụng để chạy các tập lệnh PHP độc lập với máy chủ web. Trong trường hợp làm việc trên hệ thống giống Unix, bạn cần thêm một dòng đặc biệt vào tất cả các tập lệnh #! (còn được gọi là "shebang") ở đầu tệp và làm cho chúng có thể thực thi được để cho biết chương trình nào sẽ xử lý các tập lệnh này. Trên nền tảng Windows, bạn có thể chỉ định trình xử lý php.exe cho các tệp có phần mở rộng .php hoặc tạo tệp bó (.bat) để chạy tập lệnh bằng PHP. Dòng được thêm vào đầu tập lệnh dành cho hệ thống Unix không ảnh hưởng đến hoạt động của chúng trên hệ điều hành Windows, do đó có thể tạo các tập lệnh đa nền tảng. Dưới đây là một tập lệnh ví dụ đơn giản được thực thi từ dòng lệnh:

Ví dụ #2 Tập lệnh được thiết kế để chạy từ dòng lệnh (script.php)

#!/usr/bin/php

If ($argc != 2 || in_array ($argv [ 1 ], array("--help" , "-help" , "-h" , "-?" ))) (
?>

Đây là tập lệnh bảng điều khiển PHP có một đối số.

Cách sử dụng:

) khác (
echo $argv [ 1 ];
}
?>

Đoạn script trên bao gồm một dòng Unix đặc biệt chỉ ra rằng nó nên được chạy bằng PHP. Chúng tôi đang làm việc với phiên bản CLI, vì vậy sẽ không có một tiêu đề HTTP nào được hiển thị.

Ví dụ trên cũng kiểm tra số lượng đối số được truyền. Trong trường hợp có nhiều hơn hoặc ít hơn một, và trong trường hợp đối số được truyền là --giúp đỡ , -giúp đỡ , -h hoặc -? , một thông báo trợ giúp được in bằng $argv , chứa tên của tập lệnh đang được thực thi. Nếu không, đối số nhận được sẽ được in đơn giản.

Để chạy ví dụ trên trên hệ thống Unix, bạn cần làm cho nó có thể thực thi được và chỉ cần thực thi nó trong bảng điều khiển script.php echothis hoặc script.php -h. Trên hệ thống Windows, bạn có thể tạo một tệp bó:

Ví dụ #3 Tệp hàng loạt để chạy tập lệnh PHP từ dòng lệnh (script.bat)

@echo TẮT "C:\php\php.exe" script.php %*

Giả sử tập lệnh được gọi script.php và đường dẫn đầy đủ đến php.exe CLI là C:\php\php.exe , tệp bó đã cho sẽ chạy tập lệnh với các tham số đã truyền: script.bat echothis hoặc script.bat -h.

Bạn cũng có thể kiểm tra tiện ích mở rộng Readline, tiện ích mở rộng này có thể được sử dụng để cải thiện tập lệnh bảng điều khiển PHP của bạn.

Trên Windows, PHP có thể được cấu hình để chạy mà không cần phải chỉ định C:\php\php.exe và phần mở rộng .php. Chủ đề này được mô tả chi tiết hơn trong phần

PHP là một trong những ngôn ngữ lập trình phổ biến nhất trên web. Nó nổi tiếng chủ yếu nhờ tính dễ học và tính linh hoạt. Nhưng phạm vi ứng dụng của nó không chỉ dừng lại ở việc tạo ra các trang web đơn giản. Các tập lệnh PHP có thể được chạy từ dòng lệnh, cho phép bạn viết các ứng dụng bảng điều khiển chính thức trên đó.

Làm cách nào để chạy tập lệnh php từ dòng lệnh?

Bất kể bạn đang sử dụng hệ điều hành nào, để chạy tập lệnh, bạn cần gõ lệnh sau trong bảng điều khiển:

Php script.php

Hệ điều hành của bạn có thể hiển thị thông báo rằng lệnh php không xác định được. Trong trường hợp này và nếu bạn chắc chắn rằng trình thông dịch PHP đã được cài đặt chính xác, việc chỉ định đường dẫn đầy đủ đến trình thông dịch khi chạy tập lệnh sẽ giúp ích.

C:\php\php.exe script.php

Đối với các hệ thống giống UNIX:

/usr/bin/php script.php

Xin lưu ý rằng đường dẫn đến trình thông dịch PHP trên hệ thống của bạn có thể khác, vì vậy điều này cũng phải được tính đến. Ví dụ: đối với người dùng gói WampServer phổ biến, đường dẫn có thể là:

C:\wamp\bin\php\php5.3.8\php.exe

Cuối cùng, để tránh phải nhập đường dẫn đầy đủ mỗi lần, bạn nên thêm đường dẫn đến trình thông dịch vào biến môi trường PATH của hệ điều hành.

Chúng tôi đang viết một tập lệnh đơn giản để kiểm tra mã phản hồi của máy chủ

Để hiển thị các tính năng của tập lệnh từ dòng lệnh, chúng tôi sẽ viết một ứng dụng đơn giản lấy một tệp văn bản có liên kết và kiểm tra mã phản hồi của máy chủ cho từng liên kết này. Hơn nữa, chúng tôi sẽ cung cấp khả năng chọn tệp mong muốn một cách tương tác, để đồng thời tìm hiểu cách thực hiện việc này.

Ngay sau khi khởi chạy, tập lệnh sẽ chọn tất cả các tệp có phần mở rộng *.txt từ thư mục tệp. Sau đó nó hiển thị danh sách này cho người dùng theo dạng số => tên và chờ người dùng nhập số file quan tâm.

Việc truy xuất tất cả các tệp bằng mặt nạ rất dễ dàng; để làm được điều này, chúng ta sẽ sử dụng hàm glob tiêu chuẩn, nhưng việc đọc dữ liệu từ bảng điều khiển sẽ thú vị hơn một chút. Thực tế là sau khi chạy tập lệnh từ dòng lệnh, ba luồng tiêu chuẩn được mở trong đó: cho đầu ra (STDOUT), đầu vào (STDIN) và lỗi (STDERR). Con trỏ tới các luồng này có sẵn cho tập lệnh ở dạng hằng số cùng tên và bạn có thể làm việc với chúng theo cách tương tự như với các tệp thông thường. Do đó, để đọc dữ liệu từ bảng điều khiển, chỉ cần đọc dòng từ luồng đầu vào: fgets(STDIN) .

$files = glob("files/*.txt"); $files hoặc exit("Không có tệp nào để kiểm tra.".PHP_EOL); echo "Các tập tin trong thư mục: ".count($files).PHP_EOL; foreach ($files as $index => $name) ( echo "[($index)] => ($name).PHP_EOL; ) echo "Chọn tệp: "; $choice = intval(fgets(STDIN));

Sau khi người dùng thực hiện lựa chọn của mình và xác minh rằng lựa chọn đó là chính xác, chúng ta có thể mở tệp để đọc.

Array_key_exists($choice, $files) hoặc exit("Đã chọn sai tệp.".PHP_EOL); $file = $files[$choice]; echo "Đang xử lý tập tin "($file)...".PHP_EOL; $start_time = microtime(true); $code_stats = mảng(); $f = fopen($file, "r");

Sử dụng vòng lặp while, chúng ta bắt đầu lặp qua tất cả các dòng trong tệp. Các chuỗi phải là URL hợp lệ, nếu không chúng tôi sẽ không thể xác định mã phản hồi chính xác của máy chủ. Tiêu đề cho mỗi địa chỉ được lấy bằng hàm get_headers tiêu chuẩn và mã phản hồi thường được tìm thấy ở dòng đầu tiên của tiêu đề.

Trong khi ($url = Trim(fgets($f))) ( $headers = get_headers($url); if (is_array($headers)) ( array_key_exists($headers, $code_stats) hoặc $code_stats[$headers] = 0 ; $code_stats[$headers]++; echo date("H:i:s")." Mã HTTP "($headers)" cho url "($url)".PHP_EOL; ) khác ( array_key_exists("Unknown ", $code_stats) hoặc $code_stats["Unknown"] = 0; $code_stats["Unknown"]++; echo date("H:i:s")." Sự cố với url "($url)"". PHP_EOL; ) ) fclose($f);

Do đó, sau khi xử lý tệp, bạn có thể hiển thị số liệu thống kê nhỏ về thời gian xử lý và những mã phản hồi đã gặp cũng như số lần.

$elapsed_time = round(microtime(true) - $start_time, 3); echo "Tệp được xử lý trong ($elapsed_time)s".PHP_EOL; echo "Số liệu thống kê mã là:".PHP_EOL; print_r($code_stats);

Ví dụ, kết quả của một ứng dụng như vậy có thể là kết quả sau:

$ php check.php Các file trong thư mục: 1 => files/db.txt Chọn file: 0 Đang xử lý file "files/db.txt"... 18:33:43 HTTP code "HTTP/1.0 200 OK" cho url "http://mail.ru/" 18:33:45 Mã HTTP "HTTP/1.1 301 Đã di chuyển vĩnh viễn" cho url "http://yandex.ru/" 18:33:46 Mã HTTP "HTTP/1.1 302 Đã di chuyển Tạm thời" cho url "http://rambler.ru/" 18:33:47 Mã HTTP "HTTP/1.0 301 Đã di chuyển vĩnh viễn" cho url "http://google.ru/" Tệp được xử lý trong 5,558 giây Số liệu thống kê mã là: Mảng ( => 1 => 1 => 1 => 1)

kết luận

Thế là xong, một ứng dụng bảng điều khiển đơn giản và tương tác trong PHP đã sẵn sàng. Tôi không muốn viết một số chương trình hoàn toàn vô dụng, vì vậy tập lệnh này không chỉ phù hợp cho việc học mà còn phù hợp để sử dụng. Ví dụ: nếu bạn lưu sơ đồ trang web vào một tệp văn bản, tập lệnh sẽ giúp xác định các lỗi có thể xảy ra với các liên kết và nếu bạn sửa đổi nó một chút, nó thậm chí sẽ chỉ ra lỗi nào :).

Bản thân ứng dụng có thể được tải xuống.