如題,想要實現的效果是後台更改了哪條資料,在前台也顯示正在修改這條資料
回複內容:
如題,想要實現的效果是後台更改了哪條資料,在前台也顯示正在修改這條資料
$table_name = 'user';echo '正在建立資料表:'.$table_name;//action code$result = $flag ? '成功':'失敗';echo '資料表'.$table_name.'建立'.$result;
因為PHP是順序執行的,執行到哪裡,輸出就好了。
這裡主要涉及到str_repeat()和flush()
倆個函數和瀏覽器緩衝區大小。
不同瀏覽器緩衝區大小不一樣,str_repeat值也不一樣,只有這一個細節需要注意。
這個有點難啊,你判斷一下頁面進來的時間。另外每次修改資料的時候記錄下來時間到資料庫。然後對比這兩個時間,如果相近就顯示為 正在修改資料。這樣可能比較簡單,實現的方案當然可以有很多種了
主要瞭解的技術:PHP OB緩衝原理
PHP緩衝機制——OB緩衝
可以參考onethink安裝的代碼:
function create_tables($db, $prefix = ''){ //讀取SQL檔案 $sql = file_get_contents(MODULE_PATH . 'Data/install.sql'); $sql = str_replace("\r", "\n", $sql); $sql = explode(";\n", $sql); //替換表首碼 $orginal = 'youyu_'; $sql = str_replace(" `{$orginal}", " `{$prefix}", $sql); //開始安裝 show_msg('開始安裝資料庫...'); foreach ($sql as $value) { $value = trim($value); if(empty($value)) continue; if(substr($value, 0, 12) == 'CREATE TABLE') { $name = preg_replace("/^CREATE TABLE `(\w+)` .*/s", "\\1", $value); $msg = "建立資料表{$name}"; if(false !== $db->execute($value)){ show_msg($msg . '...成功'); } else { show_msg($msg . '...失敗!', 'error'); session('error', true); } } else { $db-> ($value); } }}function show_msg($msg, $class = ''){ echo ""; flush(); ob_flush();}