2012-06-16 22 views
1

我有145064642字符長的HTML字符串,我嘗試打印。在PHP中打印變量導致服務器返回false

當我嘗試echo/var_dump/die就會導致頁面返回false(0),但如果我嘗試打印只有一半的變量,它工作正常。

實例:

不起作用:

echo $MY_HTML_STR; die($MY_HTML_STR); var_dump($MY_HTML_STR)

每兩行的工作:

die(var_dump(substr($MY_HTML_STR,strlen($MY_HTML_STR)/2)));

die(var_dump(substr($MY_HTML_STR,0,strlen($MY_HTML_STR)/2)));

但試圖將兩者一起打印時:

var_dump(substr($MY_HTML_STR,strlen($MY_HTML_STR)/2)); 
die(var_dump(substr($MY_HTML_STR,0,strlen($MY_HTML_STR)/2))); 

它再次崩潰。呼應

一種方式也給了我一個錯誤:

echo <<<EOF 
    TEXTTEXT... 
     $MY_HTML_STR     
    BLABLAHTML... 
EOF; 

錯誤:675 Fatal error: Out of memory (allocated 324009984) (tried to allocate 145090561 bytes) in .....page.php on line 675

線是EOF;線。 腳本在我的家用計算機上運行,​​使用WAMPSERVER和memory_limit設置爲-1(UNLIMITED)。

+1

這可能不是直接關係到你的問題,但' var_dump()'不返回任何東西。運行'die(var_dump(...))'將類似於運行'die(null)'或'die(0)',當然這些代碼會以代碼'0'退出。與'echo'一樣。在var_dump()運行後,'echo(var_dump(...))'會打印出null。 – rid

+0

你的系統有多少內存?還有哪些程序正在使用RAM? (操作系統,瀏覽器,你的FTP程序,你的文本/ HTML編輯器...) – TecBrat

+1

錯誤.. http://php.net/manual/en/function.var-dump.php 即使是true,'echo $ MY_HTML_STR'會導致相同的錯誤.. – eranj

回答

2

檢查輸出緩衝是否打開。請記住,如果啓用了輸出緩衝,則輸出的所有內容都將保存在內存中,直到輸出刷新(腳本關閉時也會隱式發生)。

在打印之前嘗試使用ob_end_clean(),看看是否能解決您的問題。

另外,在打印之前,請嘗試添加下面的代碼。你可以在嵌套的輸出緩衝(如果,例如,你擁有了它在php.ini文件中激活並調用ob_start在腳本的開頭)

print ob_get_level(); 
exit; 
+0

ob_get_level()返回true(1); 結合'ob_end_clean()'和substr()循環的建議@Michael Dibbets在他的回答中解決了這個問題。謝謝 ! – eranj

1

回聲不像太長的字符串。如果你想打印,使用for循環將其拆分成更小的字符串,如果出現問題,則使用substr()大約10000個字符或更小的字符串。

你超出內部寫入緩衝區的方式太多。

+1

是否記錄了「回聲」限制? – rid

+0

我使用echo php docs在用戶評論中閱讀了它。我遇到過一次類似的問題,並且解決了我的問題。您可以將它與嘗試在ince打印機中打印2000個打印作業進行比較,打印機將失敗或打印機服務器在您的計算機上。 – Tschallacka

+0

不會幫助..嘗試5000和10000個字符的限制。 – eranj