Trạng thái thoát PHP 255: có nghĩa là gì?


33

Gần đây tôi đã biên dịch một tệp nhị phân PHP 5.2.9 và tôi đã cố gắng thực thi một số tập lệnh PHP với nó. Tôi có thể thực thi một số tập lệnh mà không gặp vấn đề gì, nhưng một trong số chúng tạm dừng quá trình thực thi giữa chừng, thoát mà không có lỗi hoặc cảnh báo. Mã trạng thái được trả về của quá trình là 255.

Tôi đã đọc trong hướng dẫn rằng trạng thái như vậy là 'dành riêng'. Câu hỏi là: để làm gì?

Tôi tin rằng nó có một cái gì đó để làm với sự phụ thuộc bị thiếu trong tệp thực thi PHP, nhưng tôi không thể chắc chắn.

Bất cứ ai cũng biết mã thoát 255 có nghĩa là gì?

PS Không có lỗi trong các tập lệnh PHP, chúng chạy OK trên các máy khác.

Câu trả lời:


34

255 là một lỗi, tôi có thể sao chép mã thoát tương tự bằng cách có một lỗi nghiêm trọng.

Điều này có nghĩa là bằng cách nào đó, báo cáo lỗi của bạn bị ẩn, có một số nguyên nhân có thể xảy ra cho việc này:

  • error_Vporting không được xác định và báo cáo php không có lỗi gì cả
  • Một @(toán tử triệt tiêu lỗi) ẩn đầu ra của lỗi
  • STDERR được chuyển hướng ở một nơi khác (php -f somefile.php 2> / dev / null, xóa chuyển hướng)
  • Đây vẫn có thể là một lỗi nội bộ do thiếu phụ thuộc và lỗi nghiêm trọng có cùng mã thoát với sự cố chương trình.

1
Trong một số trường hợp hiếm hoi trên Windows, điều này có liên quan đến một php.initệp bị hỏng (tức là tệp đã bị hỏng ký tự bên trong). Mất 2 giờ để tìm hiểu điều này. Mẹo: Nếu tập lệnh của bạn (tức là composer.phar) hoạt động với php -n composer.phar, thì php.initệp của bạn có thể bị hỏng.
tftd

9

Điều đó cũng có nghĩa là /etc/php5/cli/php.ini(trên Debian / Ubuntu) hoặc /etc/php.ini(trên RHEL / CentOS / v.v.) có display_errors = Offnghĩa là bất kỳ lỗi hoặc cảnh báo nào từ các tập lệnh dòng lệnh sẽ không đi đến đâu, trừ khi log_errors = On(cũng xem error_logcài đặt).

Hãy thử chạy tập lệnh của bạn với tập lệnh bao bọc sử dụng php -d display_errors=on ...


3
Tôi chỉ muốn nói lời cảm ơn về -d display_errors=onmẹo mà tôi đã cố gắng gỡ lỗi một tập lệnh tùy chỉnh cho ứng dụng PHP của ai đó cố gắng tự xử lý tất cả các bản ghi ngoại lệ, nhưng thường ăn ngoại lệ. Sử dụng cờ đó tôi có thể có ngoại lệ để in lên CLI!
ge Muffguy

Trong trường hợp của tôi, điều này cho tôi thấy rằng tập lệnh php vượt quá thời gian thực hiện tối đa của nó. Cám ơn về tiền bo nhiều!
Max Vernon

0

Điều này có thể do PHP thông báo lỗi bị chặn (dòng bắt đầu bằng @). Tôi tìm thấy dòng

grep -r "@" src/ 

và sau đó nhận xét @. Sau đó, tôi đã nhận được lỗi thực tế và có thể sửa nó một cách dễ dàng. Sau đó tôi cũng nhận thấy rằng PHPStorm đã phát hiện ra lỗi tương tự, nhưng tôi đã không sửa / nhận thấy nó.


0

Nó cũng có thể có nghĩa là

  • /etc/php5/cli/php.ini (trên Debian / Ubuntu)

  • /etc/php.ini (trên RHEL / CentOS / v.v.)

đã thiết lập

display_errors = Off 

điều đó có nghĩa là bất kỳ lỗi hoặc cảnh báo nào từ các tập lệnh dòng lệnh sẽ không đi đến đâu, trừ khi

log_errors = On 

Xem thêm cài đặt error_log.

Hãy thử chạy tập lệnh của bạn với trình bao bọc


0

Trong trường hợp của tôi đó là cái chết xDebug vì xdebug.max_nesting_levelgiá trị thấp .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.