2008年6月13日 星期五

PHP 下載檔案時, 無法直接開啟文件的解法方法

在php網站程式寫作上, 需使用下載檔案,

一般都是用 header 來下載檔案, 如下所示

header("Content-length: ".$row->file_size);
header("Content-Disposition: attachment; filename=".$filename);
print($row->filedata);


但通常必需先儲存後再開啟,
不然會出現錯誤, 因需無法直接開啟文件

若要直接開啟文件

需加幾個語法, 如下所示

ob_start();

header("Cache-Control: cache, must-revalidate");

header("Content-length: ".$row->file_size);
header("Content-Disposition: attachment; filename=".$filename);
print($row->filedata);

ob_flush();

PHP 上傳檔案並寫入MySQL 出現 MySQL server has gone away

如果你向伺服器發送不正確或太大的查詢
你可能得到[MySQL server has gone away]錯誤。

如果mysqld得到一個太大或不正常的packet,它認為客戶出錯了並關閉連接。
所以你需要較大的查詢(例如,如果你正在處理較大的BLOB列)時,

你可以使用 -O max_allowed_packet=#

重新啟動mysqld以增加查詢限制。

需分配多餘的記憶體,這樣mysqld只有在你使用較大差詢時或mysqld必須返回較大的結果行時,才能使用更多的記憶體!


以下為修改方式

打開my.ini 找到[mysqld]這一行,下方添加

[mysqld]
#擴大緩衝區
max_allowed_packet=16M

SAVE後,重啟mysql

2008年3月9日 星期日

JavaScript 日期加減 及 日期相差

1.日期加減
<script language=javascript>
function addDate(dy,dmomth,dd,dh,dm,dadd){
var a = new Date(dy,dmomth,dd,dh,dm)
a = a.valueOf()
a = a + dadd * 1 * 60 * 60 * 1000
a = new Date(a)
return a;
}

var now = new Date();
var years = now.getYear();
var months = now.getMonth()+1;
var days = now.getDate();
var hours = now.getHours();
var minutes = now.getMinutes();

NextNow = addDate(years,months-1,days,hours,0,-1);
years = NextNow.getYear();
months = NextNow.getMonth()+1;
days = NextNow.getDate();
hours = NextNow.getHours();

</script>

2.日期相差

<script language=javascript>

Date.prototype.dateDiff = function(interval,objDate){
var dtEnd = new Date(objDate);
if(isNaN(dtEnd)) return undefined;
switch (interval) {
case "s":return parseInt((dtEnd - this) / 1000);
case "n":return parseInt((dtEnd - this) / 60000);
case "h":return parseInt((dtEnd - this) / 3600000);
case "d":return parseInt((dtEnd - this) / 86400000);
case "w":return parseInt((dtEnd - this) / (86400000 * 7));
case "m":return (dtEnd.getMonth()+1)+((dtEnd.getFullYear()-this.getFullYear())*12) - (this.getMonth()+1);
case "y":return dtEnd.getFullYear() - this.getFullYear();
}
}

var sDT = new Date("2004/05/20 07:30:00");
var eDT = new Date("2005/05/20 08:32:02");
document.writeln("秒差 : "+sDT.dateDiff("s",eDT)+"<br>");
document.writeln("分差 : "+sDT.dateDiff("n",eDT)+"<br>");
document.writeln("時差 : "+sDT.dateDiff("h",eDT)+"<br>");
document.writeln("日差 : "+sDT.dateDiff("d",eDT)+"<br>");
document.writeln("週差 : "+sDT.dateDiff("w",eDT)+"<br>");
document.writeln("月差 : "+sDT.dateDiff("m",eDT)+"<br>");
document.writeln("年差 : "+sDT.dateDiff("y",eDT)+"<br>");
</script>