Tôi không thể tạo lại điều này trên hệ thống của mình, Ubuntu Hardy.Dưới đây là một ví dụ:
/tmp$ mkdir /tmp/sbuzz
/tmp$ cd /tmp/sbuzz
/tmp/sbuzz$ echo '<?php exit(1); ?>' >script_a.php
/tmp/sbuzz$ cat >script_b.php
<?php
system('php script_a.php', $return);
var_dump($return);
?>
/tmp/sbuzz$ php script_b.php
int(1)
/tmp/sbuzz$ echo '<?php exit(2); ?>' >script_a.php
/tmp/sbuzz$ php script_b.php
int(2)
/tmp/sbuzz$
Thoát mã 0 có nghĩa là thực hiện thành công của chương trình, vì vậy nó loại âm thanh như bạn đang có lẽ chạy script_a.php sai hoặc có lẽ là "php" thực thi không được làm những gì bạn đang mong đợi? Có lẽ bạn có một kịch bản gọi là "php" đó là trong con đường của bạn trước khi thông dịch viên? Báo cáo "php" nào? Trên hệ thống của tôi nó nói "/ usr/bin/php".
Nếu PHP không thể tìm thấy kịch bản, nó sẽ thoát ra với 1, ví dụ:
/tmp/sbuzz$ cat script_b.php
<?php
system('php doesnt_exist_script_a.php', $return);
var_dump($return);
?>
/tmp/sbuzz$ php script_b.php
Could not open input file: doesnt_exist_script_a.php
int(1)
/tmp/sbuzz$
Trong trường hợp này tôi đã thay đổi script_b.php để cố gắng chạy một kịch bản không tồn tại, và tôi nhận được mã thoát 1 (nó phải là 2 nếu nó hoàn thành thành công, bởi vì tôi đã thay đổi script_a ở trên), nhưng nó cũng cho thấy lỗi mà nó không thể chạy chương trình.
Bạn có thể muốn thử thay đổi nó để đặc biệt chạy đường dẫn đầy đủ để thực thi PHP:
system('/usr/bin/php script_a.php')
hay còn đầy đủ đường dẫn đến kịch bản cũng như:
system('/usr/bin/php /tmp/sbuzz/script_a.php')
Bạn cũng có thể hãy thử thực hiện cụ thể chương trình sẽ trả về 1, giống như một điểm dữ liệu khác, chẳng hạn như:
system('false')
system('bash -c "exit 69"')
Bạn có thể muốn thử một mã thoát khác hơn 1, đây là lỗi thường gặp. Đó là lý do tại sao tôi đã "thoát 69" ở trên. "False" sẽ thoát ra với 1.
Ngoài ra, tất nhiên, hãy thử chạy script_a.php trực tiếp:
/tmp/sbuzz$ php script_a.php
/tmp/sbuzz$ echo $?
2
/tmp/sbuzz$
Các "$?" là mã thoát của lệnh chạy cuối cùng, tại dấu nhắc trình bao.
'$?' Chứa gì khi chạy script_a.php từ dòng lệnh? –
Phiên bản php nào bạn đang sử dụng trên máy chủ Unix, so sánh với các cửa sổ – RobertPitt
Nếu tôi chạy script_b từ dòng lệnh, mọi thứ hoạt động tốt. $ Là gì? –