Hướng dẫn dùng argv argc trong PHP

Tôi muốn chuyển các tham số từ Giao diện dòng lệnh PHP, sau đó đọc các giá trị bằng cách sử dụng tập lệnh PHP, giống như sau:


Tôi chuyển biến từ CLI như thế này:

C:\xampp\php\php.exe name.php Robby

Các công việc trên, tôi lấy Robby làm đầu ra.

Nhưng tôi muốn làm một cái gì đó như thế này:

C:\xampp\php\php.exe name.php -inputFirstName="Robby"

Vì vậy, người dùng được thông báo để nhập các thông số chính xác vào những nơi chính xác. Cách thích hợp để phân tích cú pháp các tham số này là gì?

  • php
  • parameter-passing
  • command-line-interface

33 hữu ích 0 bình luận 61k xem chia sẻ

answer

42

Hướng dẫn dùng argv argc trong PHP

Khi gọi một tập lệnh PHP từ dòng lệnh, bạn có thể sử dụng $ argc để biết có bao nhiêu tham số được truyền và $ argv để truy cập chúng. Ví dụ: chạy tập lệnh sau:


Như thế này:-

php script.php arg1 arg2 arg3

Sẽ cho kết quả sau

int(4)
array(4) {
  [0]=>
  string(21) "d:\Scripts\script.php"
  [1]=>
  string(4) "arg1"
  [2]=>
  string(4) "arg2"
  [3]=>
  string(4) "arg3"
}

Xem $ argv và $ argc để biết thêm chi tiết.

Để làm những gì bạn muốn, hãy nói

php script.php arg1=4

Bạn sẽ cần phải bùng nổ đối số về dấu bằng: -

list($key, $val) = explode('=', $argv[1]);
var_dump(array($key=>$val));

Bằng cách đó, bạn có thể có bất cứ thứ gì bạn muốn ở phía trước dấu bằng mà không cần phải phân tích cú pháp, chỉ cần kiểm tra các cặp khóa => giá trị là đúng. Tuy nhiên, đó là một chút lãng phí, chỉ cần hướng dẫn người dùng về thứ tự chính xác để chuyển các đối số.

42 hữu ích 4 bình luận chia sẻ

answer

17

Hướng dẫn dùng argv argc trong PHP

Tôi sử dụng phương pháp khá ngắn gọn này:

if($argc>1)
  parse_str(implode('&',array_slice($argv, 1)), $_GET);

Cái nào sẽ xử lý một cuộc gọi như:

php script.php item1=4 item2=300

Bằng cách gửi nó vào $ _GET, bạn sẽ tự động xử lý quyền truy cập web hoặc CLI.

Đối với bình luận, điều này đang làm như sau:

  • Nếu số đối số lớn hơn một (vì mục đầu tiên là tên của tập lệnh) thì tiến hành
  • Lấy mảng đối số loại trừ mục đầu tiên
  • Biến nó thành một định dạng chuỗi truy vấn tiêu chuẩn với ký hiệu và
  • sử dụng parse_str để giải nén vào mảng $ _GET

17 hữu ích 0 bình luận chia sẻ

answer

13

Hướng dẫn dùng argv argc trong PHP

Mặc dù câu trả lời là đúng và bạn có thể thực hiện phân tích cú pháp bằng tay, nhưng PHP cũng cung cấp getopt()chức năng có thể thực sự hữu ích ở đây.

Ngoài ra còn có các lựa chọn thay thế hướng đối tượng (được viết bằng PHP, có sẵn trong một số thư viện) có thể trở thành thứ bạn cần. Googling cho "php getopt" sẽ mang lại kết quả hữu ích.

13 hữu ích 1 bình luận chia sẻ

answer

2

Hướng dẫn dùng argv argc trong PHP

bạn có thể gửi các tham số dưới dạng một đối số sau đó phân tích cú pháp đối số đó như một mảng $ _GET

C:\xampp\php\php.exe name.php "inputFirstName=Robby&LastName=John"

và trong tệp PHP của bạn

if (!empty($argv[1])) {
  parse_str($argv[1], $_GET);
}

bạn sẽ nhận được các đối số trong mảng $ _GET như bình thường

2 hữu ích 0 bình luận chia sẻ

answer

1

Hướng dẫn dùng argv argc trong PHP

Các getopt()chức năng có lẽ là câu trả lời đúng nhất trong trường hợp của câu hỏi. Đặc biệt là vì nó được tạo nền tảng độc lập với PHP 5.3. Trong trường hợp cụ thể của câu hỏi này và phân tích cú pháp nhiều tham số, một cách để tận dụng hàm này sẽ như sau:

$defaultValues = array("inputFirstName" => "");
$givenArguments = getopt("", array("inputFirstName:"));
$options = array_merge($defaultValues, $givenArguments);
$inputFirstName = $options['inputFirstName'];

Lệnh gọi để đặt $ inputFirstName với giá trị "Robby" sẽ là:

> php script.php --inputFirstName="Robby"

Giải trình

Giá trị mặc định cho tất cả các tham số mong đợi được đặt trong $defaultValuesmảng. Đầu vào được gửi qua các đối số dòng lệnh được getopthàm của PHP thu thập và được lưu trữ bởi $givenArguments. Lưu ý rằng dấu hai chấm ( :) ở cuối "inputFirstName:"chuỗi cho biết đây là đối số bắt buộc. Nếu không có dấu hai chấm ở đây, chỉ sự hiện diện của đối số sẽ được phát hiện, không phải giá trị thực ( thêm thông tin trong Hướng dẫn sử dụng PHP ). Việc hợp nhất hai mảng này với nhau trên dòng thứ ba dẫn đến mảng có tất cả các tham số mong đợi được đặt với các giá trị hoặc đối số mặc định được cung cấp từ dòng lệnh / thiết bị đầu cuối nếu chúng có sẵn.

1 hữu ích 0 bình luận chia sẻ

answer

0

Hướng dẫn dùng argv argc trong PHP

Nếu bạn không phiền khi sử dụng thư viện, tôi khuyên bạn nên xem Thành phần Bảng điều khiển của Symfony .

Nó có thể được sử dụng để tạo các ứng dụng dòng lệnh và hỗ trợ việc sử dụng Arguments & Options .

Trang tài liệu chứa một vài ví dụ tuyệt vời để giúp bạn bắt đầu.

Tất nhiên, nó sử dụng các kỹ thuật tương tự như giải thích của vascowhite.

0 hữu ích 0 bình luận chia sẻ

answer

0

Hướng dẫn dùng argv argc trong PHP

Tôi không biết liệu tại thời điểm câu hỏi này có được hỏi hay không, tôi sẽ trả lời nó có sẵn không nhưng nếu bạn gọi, php-cgi -f myfile.php var=somethingbạn có thể lấy ra $var=$_GET['var']; từ dòng lệnh thì bạn không cần phải thay đổi mã của mình để gọi nó từ trình duyệt web hoặc dòng lệnh

0 hữu ích 0 bình luận chia sẻ

answer

-1

Hướng dẫn dùng argv argc trong PHP

Bạn có thể phân tích cú pháp đầu vào của người dùng trên chương trình của mình để tìm kiếm các chuỗi cụ thể như -inputFirstName="x"(ví dụ: sử dụng biểu thức chính quy) và sau đó đặt biến chính xác thành x.

-1 hữu ích 0 bình luận chia sẻ

Hướng dẫn dùng argv argc trong PHP

Đăng nhập để trả lời câu hỏi

Có thể bạn quan tâm

Hướng dẫn dùng argv argc trong PHP