2011-07-21 37 views
19

Tôi đã thực hiện một tập lệnh bash chạy tập lệnh php. Nó hoạt động tốt mà không có thông số nhưng khi tôi thêm thông số (id và url), có một số lỗi:Làm thế nào để chuyển các tham số từ bash sang tập lệnh php?

PHP Deprecated: Comments starting with '#' are deprecated in /etc/php5/cli/conf                      .d/mcrypt.ini on line 1 in Unknown on line 0 
Could not open input file: /var/www/dev/dbinsert/script/automatisation.php?                      id=1 

tôi chạy php script từ bash như thế này:

php /var/www/dev/dbinsert/script/automatisation.php?id=19&url=http://bkjbezjnkelnkz.com 

Trả lời

26

Gọi nó như:

php /path/to/script/script.php -- 'id=19&url=http://bkjbezjnkelnkz.com' 

Ngoài ra, sửa đổi kịch bản PHP của bạn để sử dụng parse_str():

parse_str($argv[1]); 

Nếu chỉ mục $_SERVER['REMOTE_ADDR'] không được đặt.


More xử lý tiên tiến có thể cần getopt(), nhưng parse_str() là một cách quick'n'dirty để làm cho nó làm việc.

+0

Yep! cảm ơn bạn Tino – user420574

+0

Bạn sẽ chuyển một thư mục vào tập lệnh php bằng cách nào? – Michael

+1

@Michael, cùng một cách, chỉ cần đọc nó từ mảng '$ argv'. Ngoài ra, necromancy thread là xấu. –

6

Bạn không thể chuyển các tham số truy vấn GET vào giao diện dòng lệnh PHP. Hoặc là vượt qua các đối số dưới dạng đối số dòng lệnh chuẩn và sử dụng $argc and $argv globals để đọc chúng hoặc (nếu bạn phải sử dụng tham số GET/POST), hãy gọi tập lệnh thông qua curl/wget và chuyển các tham số theo cách đó - giả sử bạn có tập lệnh có thể truy cập thông qua máy chủ web cục bộ.

Đây là cách bạn có thể vượt qua đối số được đọc bởi $argc và (các - chỉ ra rằng tất cả các đối số tiếp theo nên đến kịch bản chứ không phải nhị phân PHP phiên dịch):

php myfile.php -- argument1 argument2

+1

Bạn có thể chuyển các tham số truy vấn GET nếu bạn sử dụng php-cgi :) Xem ví dụ tại đây: https://serverfault.com/questions/187025/how-to-pass-get-variables-to-a-php-script- qua-the-line-line – Bastion

+0

@Bastion liên kết ma thuật, cảm ơn! – icc97

4

- Tùy chọn 1: php-cgi -

Sử dụng 'php-cgi' thay cho 'php' để chạy tập lệnh của bạn. Đây là cách đơn giản nhất là bạn sẽ không cần phải đặc biệt sửa đổi mã php của bạn để làm việc với nó:

php-cgi -f /my/script/file.php id=19 myvar=xyz 

- Phương án 2: nếu bạn có một máy chủ web -

Nếu tập tin php là trên một máy chủ web mà bạn có thể sử dụng 'wget' trên dòng lệnh:

wget 'http://localhost/my/script/file.php?id=19&myvar=xyz' 

OR:

wget -q -O - "http://localhost/my/script/file.php?id=19&myvar=xyz" 

- Truy cập vào các biến trong php -

Trong cả hai lựa chọn 1 & 2 bạn truy cập vào các thông số như thế này:

$id = $_GET["id"]; 
$myvar = $_GET["myvar"]; 
Các vấn đề liên quan