目前分類:PHP (3)

瀏覽方式: 標題列表 簡短摘要

有時候PDO物件連線,然後程式在處理大量資料時,Mysql等太久最後timeout斷線了

這時執行query就會需到Mysql Server has gone away的錯誤 (uncaught exception)

一昧的加大timeout,不如直接Catch這個Exception

範例程式如下:

失敗後重連線一次

 /** 
截取我的程式的一部分
$this->Connect是我的PDO物件*/

function executeQuery($query) {
$sth = $this->Connect->prepare($query); try {
$sth->execute($params);//執行query
} catch (PDOException $e) {

/** 這邊會抓到PDO的Exception */ $this->connect(); //重新連線
/** 這邊也可以用遞迴 $this->executeQuery($query)*/ $sth=$this->Connect->prepare($query); $sth->execute($params);

}
.
(略)
.
.
}

補充,你可以判斷Exception的種類看是不是真的是Mysql Server has gone away,然後做是否重連線執行query的決定。

當然你也可以設retry,用遞迴的方式把retry的次數繼續往下帶:

 

 /** 
遞廻方式
*/

function executeQuery($query, $retry = 3) {

if ($retry == 0) {
return false;
}
$sth = $this->Connect->prepare($query); try {
$sth->execute($params);//執行query
} catch (PDOException $e) {

/** 這邊會抓到PDO的Exception */
$this->connect(); //重新連線
$sth=$this->executeQuery($query, $retry--);

}
.
(略)
.
.
}

 

文章標籤

Oscar 發表在 痞客邦 留言(0) 人氣()

此範例來自

http://www.php.net/manual/en/function.pcntl-fork.php

通常用在需要大量呼叫SOAP API或RestfulAPI時使用

比方說我有1000張照片,我要用API取得這1000張照片的資訊,每呼叫一次api就需要1秒

1000張就約需要1000秒

如果用multi-process,一次送25個request,相當於速度提升25倍(不考慮其他因素如cpu、memory、api端的loading)

 

<?php 
declare(ticks=1); 
//A very basic job daemon that you can extend to your needs. 
class JobDaemon

Oscar 發表在 痞客邦 留言(0) 人氣()

相信有用PHP輸出CSV報表的人都有遇過中文亂碼的問題吧

有的人開起來正常,有的人開起來亂碼

解法就是把檔案輸出成XLS的格式就沒問題了-使用套件PHPExcel (http://phpexcel.codeplex.com/)

程式邏輯想像你今天用Office Excel做CSV轉檔成XLS,就是用Excel打開一個CSV檔並另存新檔成XLS

 

文章標籤

Oscar 發表在 痞客邦 留言(0) 人氣()