phpbuffering
㈠ 織夢cms 把php.ini 改成output_buffering=of 進後台什麼都不顯示,一個空白頁 怎麼回事啊
你有重啟appache或iis試下嗎?? 再不行就給output_buffering賦個定值唄~
㈡ PHP如何加速到最快
網站的速度 一般 是從架構 , 資料庫, php代碼方面優化的。
而php本身沒什麼優化的,只要按照php的編碼 規范來寫就ok了;
還有就是做好緩存;
另外就是注意 sql 語句裡面的一些 小細節了,原則是:最先出現的條件,一定是過濾和排除掉更多結果的條件;第二出現的次之;以此類推。
例如 有個這樣的表
欄位a 欄位b 欄位c
1 7 11
2 8 10
3 9 13
1,SELECT * FROM table WHERE a>』0』 AND b<』1』 ORDER BY c LIMIT 10;
2,SELECT * FROM table WHERE b<』1』 AND a>』0』 ORDER BY c LIMIT 10;
1 和 2 結果是相同的但是 查詢速度就大不相同,由於 表中 b 欄位的數據 大部分 都是大於 1的 所以馬上可以過濾 大部分 數據 ,所以 2 比較好些
㈢ php錯誤,A PHP Error was encountered Severity: Warning ....
. 意思是在你修改header之前有輸出,而這是不允許的。你檢查一下在這之前的代碼是否有輸出
㈣ 求教php 緩沖區問題
首先你找到php 的配置文件php.ini
1.php.ini中的output_buffering配置
Off: 表示關閉PHP輸出緩存
On: 打開無限大的輸出緩存
4096: 打開大小為4096Byte的輸出緩存
2.php.ini中的implicit_flush配置
On: 表示每次輸出(如echo,print)後自動調用flush()函數後,直接輸出
Off: 與On相反,每次輸出後不會調用flush(),需要等到server buffering滿了才會輸出,但是我們可以用flush()函數代替它,不開啟也沒關系,反而更加靈活
3.ob_flush()函數: 取出PHP buffering中的數據,放入server buffering
4.flush()函數: 取出Server buffering的數據,放入browser buffering
5.ob_start()函數:對於這個函數我現在了解的不是很清楚,因為開啟後輸出就會不受ob_flush()控制,即使使用ob_flush()和flush(),數據也不能立即輸出在瀏覽器上.現在知道的是,如果output_buffering=Off,即使使用了ob_start(),也是無法將輸出數據緩存的,而如果output_buffering=On的話,即使不用ob_start(),輸出數據也可以被PHP緩存,所以覺得ob_start比較廢,暫時不管他
然後我們來看代碼吧(設置output_buffering=4096,implicit_flush=Off)
最後的列印效果是
每隔一秒輸出一個
<html>
<body>
<?php
// ob_start(); //這玩意開了就會不正常,輸出不受ob_flush()控制,不知道到底幹嘛用
// echo str_repeat(' ' ,1000); //IE緩存256Bytes
echo str_repeat(' ' ,1000); //Chrome和FF緩存1000Bytes,這里用來先將瀏覽器緩存用掉,但是很疑惑這一行輸出為什麼沒有被output_buffering存起來,而是直接輸出了
for($i=0;$i<5;$i++) {
echo $i.'<br />';
ob_flush();
flush();
sleep(1);
}
?>
</body>
</html>
至於你的可以這么寫
<?php
echo str_repeat(' ' ,1000);
echo 'a<br/>';
ob_flush();
flush();
sleep(3);
echo 'b<br/>';
?>
㈤ 關於PHP空間不能使用的問題問題
1. Cannot modify header information - headers already sent by (output started at /home/oyayi0/public_html/h365/admin/login.php:1)
這個問題的話,先找空間上技術員,讓他把output_buffering設為On,如果不肯的話試試以下:
如果在執行php程序時看到這條警告:"Warning: Cannot modify header information - headers already sent by ...."
Few notes based on the following user posts:
有以下幾種解決方法:
1. Blank lines (空白行):
Make sure no blank line after <?php ... ?> of the calling php scrīpt.
檢查有<?php ... ?> 後面沒有空白行,特別是include或者require的文件。不少問題是這些空白行導致的。
2. Use exit statement (用exit來解決):
Use exit after header statement seems to help some people
在header後加上exit();
header ("Location: xxx");
exit();
3. PHP has this annoying problem, if your HTML goes before any PHP code or any header modification before redirecting to certain page, it ll said "Warning: Cannot modify header information - headers already sent by ...." Basically anytime you output to browser, the header is set and cannot be modified. So two ways to get around the problem:
3a. Use Javascrīpt (用Javascrīpt來解決):
<? echo "<scrīpt> self.location( file.php );</scrīpt>"; ?>
Since it s a scrīpt, it won t modify the header until execution of Javascrīpt.
可以用Javascrīpt來代替header。另外需要注意,採用這種方法需要瀏覽器支持Javascrīpt.
3b. Use output buffering (用輸出緩存來解決):
<?php ob_start(); ?>
... HTML codes ...
<?php
... PHP codes ...
header ("Location: ....");
ob_end_flush();
?>
This will save the output buffer on server and not output to browser yet, which means you can modify the header all you want until the ob_end_flush() statement. This method is cleaner than the Javascrīpt since Javascrīpt method assumes the browser has Javascrīpt turn on. However, there are overhead to store output buffer on server before output, but with modern hardware I would imagine it won t be that big of deal. Javascrīpt solution would be better if you know for sure your user has Javascrīpt turn on on their browser.
就像上面的代碼那樣,這種方法在生成頁面的時候緩存,這樣就允許在輸出head之後再輸出header了。本站的許願板就是採用這種方法解決的header問題。
4.set output_buffering = On in php.ini (開啟php.ini中的output_buffering )
set output_buffering = On will enable output buffering for all files. But this method may slow down your php output. The performance of this method depends on which Web server you re working with, and what kind of scrīpts you re using.
這種方法和3b的方法理論上是一樣的。但是這種方法開啟了所有php程序的輸出緩存,這樣做可能影響php執行效率,這取決於伺服器的性能和代碼的復雜度。
第二種:
如何徹底杜絕warning: Cannot add header information - headers already sent in…… 這種令人莫明其妙的的錯誤。 只要你寫過PHP代碼,相信都遇上過這個大多時候都令人莫明其妙的warning吧..今天我們就來搞定它…………… 看了PHP手冊,回答如下:消息「Warning: Cannot send session cookie - headers already sent…」或者「Cannot add/modify header information - headers already sent…」。 函數 header(),setcookie() 和 session 函數需要在輸出流中增加頭信息。但是頭信息只能在其它任何輸出內容之前發送。在使用這些函數前不能有任何(如 HTML)的輸出。函數 headers_sent() 能夠檢查您的腳本是否已經發送了頭信息。請參閱「輸出控制函數」。 意思是:不要在使用上面的函數前有任何文字,空行,回車,空格等。但。。。問題是,這答案並不令人滿意。因為往往程序在其他PHP環境下運行卻正常。 首先:這錯誤是怎麼產生的呢?讓我們來看看PHP是如何處理HTTP header輸出和主體輸
文討論的是如何徹底杜絕warning: Cannot add header information - headers already sent in…… 這種令人莫明其妙的的錯誤。
只要你寫過PHP代碼,相信都遇上過這個大多時候都令人莫明其妙的warning吧..今天我們就來搞定它……………
看了PHP手冊,回答如下:
消息「Warning: Cannot send session cookie - headers already sent…」或者「Cannot add/modify header information - headers already sent…」。
函數 header(),setcookie() 和 session 函數需要在輸出流中增加頭信息。但是頭信息只能在其它任何輸出內容之前發送。在使用這些函數前不能有任何(如 HTML)的輸出。函數 headers_sent() 能夠檢查您的腳本是否已經發送了頭信息。請參閱「輸出控制函數」。
意思是:不要在使用上面的函數前有任何文字,空行,回車,空格等。但。。。問題是,這答案並不令人滿意。因為往往程序在其他PHP環境下運行卻正常。
首先:這錯誤是怎麼產生的呢?讓我們來看看PHP是如何處理HTTP header輸出和主體輸出的。
PHP腳本開始執行時,它可以同時發送header(標題)信息和主體信息。 Header信息(來自 header() 或 SetCookie() 函數)並不會立即發送,相反,它被保存到一個列表中。 這樣就可以允許你修改標題信息,包括預設的標題(例如 Content-Type 標題)。但是,一旦腳本發送了任何非標題的輸出(例如,使用 HTML 或 print() 調用),那麼PHP就必須先發送完所有的Header,然後終止 HTTP header。而後繼續發送主體數據。從這時開始,任何添加或修改Header信息的試圖都是不允許的,並會發送上述的錯誤消息之一。
好!那我們來解決它:笨方法:把錯誤警告全不顯示! 掩耳盜鈴之計
error_reporting(E_ERROR | E_PARSE); 這里不要顯示E_WARNING即可
2. mysql_connect() [function.mysql-connect]: Access denied for user 'root'@'localhost' (using password: YES)
這個問題很簡單,MySQL用戶名或密碼錯誤。
㈥ PHP里的output_buffering 怎麼開啟
默認情況下,php
buffer是開啟的,而且該buffer默認值是4096,即4kb。
可以通過在php.ini配置文件中找到output_buffering配置.
當echo,print等輸出用戶數據的時候,輸出數據都會寫入到php
output_buffering中,直到output_buffering寫滿,會將這些數據通過tcp傳送給瀏覽器顯示。
也可以通過ob_start()手動激活php
output_buffering機制,使得即便輸出超過了4kb數據,也不真的把數據交給tcp傳給瀏覽器,因為ob_start()將php
buffer空間設置到了足夠大。
只有直到腳本結束,或者調用ob_end_flush函數,才會把數據發送給客戶端瀏覽器。
㈦ 如何判斷 php配置指令作用域
首先,PHP總共有4個配置指令作用域,分別是PHP_INI_USER,PHP_INI_PERDIR,PHP_INI_SYSTEM,PHP_INI_ALL。這些作用域限制了指令是否可以被修 改,在那裡可以被修改。php的每個配置項都會有一個作用域。下面是對四種作用域的說明。
作用域類型說明
PHP_INI_USER 可在用戶腳本(如 ini_set())或Windows注冊表(PHP 5.3 起)以及.user.ini中設定
PHP_INI_PERDIR 可在 php.ini,.htaccess 或 httpd.conf 中設定
PHP_INI_SYSTEM 可在 php.ini 或 httpd.conf 中設定
PHP_INI_ALL 可在任何地方設定
3.例如 output_buffering 指令是屬於 PHP_INI_PERDIR,因而就不能用 ini_set() 來設定。但是 display_errors 指令是屬於 PHP_INI_ALL 因而就可以在任何地方被設定,包括 ini_set()。
㈧ php 實時輸出總不能實現, 雖然最終的結果是對的, 但都是一次性輸出的
我猜測可能是瀏覽器沒有正確的理解腳本輸出的類型,或者是php.ini設置的緩存導致的
你嘗試在腳本最上端使用
header("Content-Type:text/event-stream ");
header('Cache-Control:no-cache');
來定義試一試
還有一種可能是php.ini中設置的output_buffering屬性導致的,我這里設置的值是4096,可以正常輸出,你看看你那裡是多少
㈨ 關於php配置文件中output_buffering選項的問題
默認情況下,php buffer是開啟的,而且該buffer默認值是4096,即4kb。你可以通過在php.ini配置文件中找到output_buffering配置.當echo,print等輸出用戶數據的時候,輸出數據都會寫入到php output_buffering中,直到output_buffering寫滿,會將這些數據通過tcp傳送給瀏覽器顯示。你也可以通過ob_start()手動激活php output_buffering機制,使得即便輸出超過了4kb數據,也不真的把數據交給tcp傳給瀏覽器,因為ob_start()將php buffer空間設置到了足夠大。只有直到腳本結束,或者調用ob_end_flush函數,才會把數據發送給客戶端瀏覽器。
㈩ 在Dreamhost中,如何把php.ini的output_buffering開啟
php.ini是php的配置文件,一般用記事本就能打開了。
你找到output_buffering這一項,然後去掉前面的分號,就行了