36
Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.
Learn more.
Tôi cần thực hiện một tệp PHP với các tham số thông qua shell.
Đây là cách tôi sẽ chạy tệp PHP:
PHP -Q htdocs/file.php
Tôi cần phải có tham số 'Hiển thị' được truyền qua và
PHP -Q htdocs/file.php? show = show_name
không hoạt động
Nếu ai đó có thể đánh vần cho tôi lệnh thực thi nào để thực hiện tệp PHP để thực thi với các tham số đã đặt, thì nó sẽ được đánh giá cao. Nếu không, hãy cố gắng dẫn tôi đúng hướng.
Tshepang
11.7K21 Huy hiệu vàng90 Huy hiệu bạc134 Huy hiệu đồng21 gold badges90 silver badges134 bronze badges
Đã hỏi ngày 20 tháng 7 năm 2011 lúc 15:01Jul 20, 2011 at 15:01
Patrick Loriopatrick LorioPatrick Lorio
5.49011 Huy hiệu vàng44 Huy hiệu bạc72 Huy hiệu đồng11 gold badges44 silver badges72 bronze badges
1
test.php:
<?php print_r($argv); ?>Shell:
$ php -q test.php foo bar Array ( [0] => test.php [1] => foo [2] => bar )
Neil
13.9k3 Huy hiệu vàng27 Huy hiệu bạc 50 Huy hiệu Đồng3 gold badges27 silver badges50 bronze badges
Đã trả lời ngày 20 tháng 7 năm 2011 lúc 15:07Jul 20, 2011 at 15:07
1
Nếu bạn có máy chủ web (không chỉ cài đặt trình thông dịch PHP mà còn là đèn/lnmp/vv) - chỉ cần thử điều này
wget -O - -q -t 1 "//mysite.com/file.php?show=show_name" >/dev/null 2>&1where:
- «-O -» - (Thư "O", không phải Zero!)
- «>/Dev/null 2> & 1» - Chuyển hướng đầu ra Stdout & Stderr chuyển hướng đến hư không
- «-Q» -Wget Run yên tĩnhwget run
- «-T 1» -Chỉ cần 1 cố gắng kết nối (không giống như mặc định 20)1 try to connect (not like default 20)
Trong "Exec" của PHP, nó sẽ giống như thế này:
function exec_local_url($url) { exec('/usr/bin/wget -O - -q -t 1 "//'. $_SERVER['HTTP_HOST'] .'/' . addslashes($url) . '" >/dev/null 2>&1' ); } // ... exec_local_url("file.php?show=show_name"); exec_local_url("myframework/seo-readable/show/show_name");Vì vậy, bạn không cần phải thay đổi tập lệnh của mình để xử lý Argc/argv và có thể sử dụng $ _get như thường lệ.
Nếu bạn muốn các công việc chạy trong nền - xem cho người yêu cũ. UNIX/Windows, Quy trình nền thiết lập? từ mã PHP
Tôi sử dụng cách tiếp cận với wget trong công việc cron của tôi; hy vọng nó giúp.
Đã trả lời ngày 18 tháng 4 năm 2013 lúc 9:47Apr 18, 2013 at 9:47
FlamestormflamestormFlameStorm
91416 Huy hiệu bạc20 Huy hiệu Đồng16 silver badges20 bronze badges
2
Bạn cần đọc các tham số dòng lệnh từ $ argc và $ argv.
Sử dụng một dấu hỏi là một cái gì đó bạn làm trong URL và không liên quan gì đến việc thực hiện PHP từ một dòng lệnh.
Xem thêm: //www.sitepoint.com/php-command-line-1/
Đã trả lời ngày 20 tháng 7 năm 2011 lúc 15:04Jul 20, 2011 at 15:04
BradbradBrad
155K48 Huy hiệu vàng341 Huy hiệu bạc512 Huy hiệu Đồng48 gold badges341 silver badges512 bronze badges
Ngoài các câu trả lời khác (khá chính xác), bạn cũng có thể chuyển các đối số dưới dạng các tham số môi trường, như thế này:
FOO=42 BAR=quux php test.phpSau đó, chúng sẽ có sẵn trong Superglobal $_ENV.
Đã trả lời ngày 20 tháng 7 năm 2011 lúc 15:15Jul 20, 2011 at 15:15
Troelskntroelskntroelskn
Huy hiệu vàng 113K2525 gold badges132 silver badges154 bronze badges
3
Nếu bạn đang sử dụng nó từ tệp PHP thì bạn có thể sử dụng popen () và làm điều gì đó như sau:
$part = $show_name; //or whatever you want with spaces $handle = popen("php -q nah.php -p=". escapeshellarg($part) . " 2>&1", "r");Điều này sử dụng hàm escapeshellarg () để bọc biến $part trong các trích dẫn (và thoát bất kỳ trích dẫn nào bên trong nó), để nó có thể được sử dụng như một đối số shell một cách an toàn.
Diemuzi
3,4777 Huy hiệu vàng39 Huy hiệu bạc60 Huy hiệu Đồng7 gold badges39 silver badges60 bronze badges
Đã trả lời ngày 20 tháng 7 năm 2011 lúc 15:30Jul 20, 2011 at 15:30
Krityakrityakritya
3.2726 Huy hiệu vàng41 Huy hiệu bạc59 Huy hiệu Đồng6 gold badges41 silver badges59 bronze badges