2014-04-01 81 views
4

我工作的一個cron PHP腳本,將每天運行一次。因爲它以這種方式運行,所以文件的輸出無法看到。將PHP輸出存儲到文件?

我可以從字面上寫所有我需要的郵件到一個變量,追加我想被寫入文件不斷的信息,但這將是非常乏味的,我有一種預感,沒有必要的。

是否有一個PHP命令告訴寫緩衝區寫入日誌文件的地方?有沒有辦法讓訪問哪些已經發送到緩衝區已經讓我可以看到我的腳本,使的消息。

例如可以說腳本說

PHP:

<? 
    echo 'hello there'; 
    echo 'hello world'; 
?> 

應該輸出到文件中說:「你好therehello世界;

任何想法?這可能嗎?

我已經意識到

file_put_contents('log.txt', 'some data', FILE_APPEND); 

這取決於「某些數據」,當時我不知道是什麼的一些數據'是,除非我把它放在一個變量。我試圖捕捉PHP輸出的結果。

回答

8

您可能希望將輸出重定向crontab

php /path/to/php/file.php >> log.txt 

或者使用PHP有,例如,file_put_contents()

file_put_contents('log.txt', 'some data', FILE_APPEND); 

如果你想捕獲所有PHP輸出,然後用ob_功能,如:

ob_start(); 
/* 
We're doing stuff.. 
stuff 
... 
and again 
*/ 
$content = ob_get_contents(); 
ob_end_clean(); //here, output is cleaned. You may want to flush it with ob_end_flush() 
file_put_contents('log.txt', $content, FILE_APPEND); 
+0

這裏是一件事情,你的例子中的'一些數據'必須是所有輸出的集合,是否有一種方法可以訪問當前被「回顯」通過PHP? –

+0

crontab的想法很好,除了我沒有權限告訴crontab將結果寫入文件,因爲我在共享服務器上。爲什麼我在尋找這個解決方案。 –

+0

@JosephAstrahan得到了它,固定 –

1

y您可以使用ob_start()將腳本輸出存儲到緩衝區中。見php documentation ob_get_clean

<?php 

    ob_start(); 

    echo "Hello World"; 

    $out = ob_get_clean(); 
    $out = strtolower($out); 

    var_dump($out); 
    ?> 
+0

ob_get_clean是有用的,如果我需要在不同的時間打印出PHP的狀態,因爲它會爲你清除緩衝區,很好理解+1 –

0

如果您使用的cron我想你一臺Unix機器等運行此:

其中一個方法是編寫一切你想stdout流因此在UNIX上,您可以抓住這個輸出到文件:

在PHP腳本:

$handle = fopen("php://stdout","w"); 

fwrite($handle,"Hello world"); // Hello world will be written to console 

在cron作業搶這個輸出到一個文件:

@hourly php /var/www/phpscript.php >> /path/to/your/outputfile.txt 

注意:>>運營商將附加到文件和>運營商將被新的數據覆蓋文件。文件將自動被第一次寫入創建

所以你投入使用fwrite調用作爲第二個參數將被放置在/path/to/your/outputfile.txt

你可以叫FWRITE儘可能多的時間,因爲你想要的一切。不要忘了關閉處理程序fclose($handle);