2012-07-03 29 views
7

Sử dụng PHP 5.3 dưới dạng php5_module trong Apache 2.2 trên Windows 7.PHP stdout trên Apache

Địa chỉ stdout ở đâu trong cấu hình ở trên?

Thử nghiệm với đoạn mã sau:

<?php 
    $stdout = fopen('php://stdout', 'w'); 
    fwrite($stdout, "stdout<br />\n"); 

    $output = fopen('php://output', 'w'); 
    fwrite($output, "output<br />\n"); 
?> 

chỉ này hiển thị output trong trình duyệt. Điều gì sẽ xảy ra với stdout?

+0

Kiểm tra apache và/hoặc nhật ký php, vì đây là tham chiếu luồng 'stdout' của tiến trình PHP, tôi đoán đó là nơi nó được gửi. – nickb

+0

Không có trong nhật ký apache hoặc php. PHP stderr đầu ra là trong nhật ký apache. – tkocjan

Trả lời

18

Như các chương trình thủ công trên trang php:// wrappers dẫn sử dụng:

php: // sản lượng là một chỉ ghi dòng cho phép bạn gửi thư cho cơ chế đệm đầu ra trong cùng một cách như inecho.

Vì vậy, nếu bạn muốn viết ra cho trình duyệt, sử dụng php://output

Mặt khác, php://stdout

cho phép truy cập trực tiếp vào đầu vào hay đầu ra tương ứng dòng của quá trình PHP .

Trong trường hợp của Apache, đầu ra này là xử lý stdout của Apache thường không bao giờ thấy ở bất kỳ đâu vì đây là đầu ra của bàn điều khiển cho Apache và nó thường chạy ở chế độ nền. Nếu bạn chạy Apache ở nền trước trên bảng điều khiển của mình, mọi thứ bạn viết lên php://stdout sẽ hiển thị trên bảng điều khiển. Vì Apache được chạy ở chế độ nền, không có dữ liệu stdout nào được ghi lại hoặc ghi ở bất kỳ nơi nào bình thường.

Để kiểm tra điều này, hãy làm theo các bước sau:

  • Chạy Apache ở mặt trước (ví dụ /usr/local/apache2/bin/httpd -D FOREGROUND -k start)
  • Để lại giao diện điều khiển cửa sổ đang mở
  • Chạy kịch bản của bạn từ trình duyệt
  • Look cho bạn stdout đầu ra trên bàn điều khiển.