php53mysql
『壹』 Undefined variable: sql in D:\phpStudy\php53\1.php on line 16
第16行的$sql變數未定義就直接使用了字元串連接。
$sql.=",(null,'$username','$password')";
這句話等於:
$sql=$sql.",(null,'$username','$password')";
這時候等號後面的$sql就是個未定義變數,所以報了錯。
正確做法應該在前面聲明這個變數是個字元串:
$sql='';
$sql.=",(null,'$username','$password')";
『貳』 PHP如何讀取mysql時間格式
使用函式 date() 實現
<?php echo $showtime=date("Y-m-d H:i:s");?>
顯示的格式: 年-月-日 小時:分鍾:秒
相關時間參數:
a - "am" 或是 "pm"
A - "AM" 或是 "PM"
d - 幾日,二位數字,若不足二位則前面補零; 如: "01" 至 "31"
D - 星期幾,三個英文字母; 如: "Fri"
F - 月份,英文全名; 如: "January"
h - 12 小時制的小時; 如: "01" 至 "12"
H - 24 小時制的小時; 如: "00" 至 "23"
g - 12 小時制的小時,不足二位不補零; 如: "1" 至 12"
G - 24 小時制的小時,不足二位不補零; 如: "0" 至 "23"
i - 分鍾; 如: "00" 至 "59"
j - 幾日,二位數字,若不足二位不補零; 如: "1" 至 "31"
l - 星期幾,英文全名; 如: "Friday"
m - 月份,二位數字,若不足二位則在前面補零; 如: "01" 至 "12"
n - 月份,二位數字,若不足二位則不補零; 如: "1" 至 "12"
M - 月份,三個英文字母; 如: "Jan"
s - 秒; 如: "00" 至 "59"
S - 字尾加英文序數,二個英文字母; 如: "th","nd"
t - 指定月份的天數; 如: "28" 至 "31"
U - 總秒數
w - 數字型的星期幾,如: "0" (星期日) 至 "6" (星期六)
Y - 年,四位數字; 如: "1999"
y - 年,二位數字; 如: "99"
z - 一年中的第幾天; 如: "0" 至 "365"
可以自由設定顯示的內容,連接符號或是顯示位置,例如 date("m-d H") 或者date("dmY");?>等php中的日期處理
加入時間:2004-12-18 17:35:22 大小:12 KB 閱讀次數:1405PHP中的日期處理
轉貼:xiaxia 日期:2004-05-26 人氣:9
我正打算用PHP編寫一種幫助處理系統。我發現我必須知道處理完最後一位客戶的問題後已經過去了多長時間?當我過去用ASP時解決這個問題相當簡單,ASP有相應的函數DateDiff可以給出兩個日期間間隔多少月、多少天和多少秒。當我搜尋完PHP手冊後我發現PHP並沒有類似的函數。
本文包含以下內容:
1、 得到目前的日期和時間-我們有多少種方式?
2、 改變日期顯示的方式-日期和時間的顯示形式
3、 轉換現在的日期為Unix的時間戳值
4、 改變日期
a. 增加時間
b. 減去時間
c. 找出兩日期之間的間隔
5、 為PHP添加DateAdd函數
6、 為PHP添加DateDiff函數
**得到目前的日期和時間
在Unix中,時間的表示方式為計算從1970年1月1日零時起所過去的秒數,這稱為UNIX 時間戳(Unix Epoch)。
如果我們有這樣一段的代碼:
?
echo time();
?
將返回值958905820
而此時的時間為2000年5月21日12時43分。
你也許會說這相當不錯。當這對我毫無幫助,或者只有一點幫助。在PHP中,對日期處理的函數都必須用到由time()返回的時間戳值。同時,由於PHP在Unix和Windows系統中均使用同樣的時間戳值,這就允許你不需要修改代碼即可在不同的系統間移植。另外的一個好處是time()函數返回的是一個整數,你可以將其作為整數欄位或文本欄位存入資料庫,而不必使用特別的日期/時間欄位。
你已經基本了解了Unix的時間戳值,現在讓我們來展示它的實際用途。
改變日期顯示的方式-日期和時間的顯示形式
PHP提供兩個辦法來將Unix的時間戳值轉換成為有用的數據。第一個是date()函數。這個函數有兩個參數-第一個字元串用於設定你所希望返回的格式,第二個為Unix的時間戳值。
格式化字元串通過一些簡單的特殊格式化字元來顯示你所希望看到的格式的日期和時間。假設你希望日期以這樣的格式顯示「18h01 Sunday 21 May」。
我們需要對字元串中的每一部分使用一個特殊格式化字元,你可以從PHP手冊中日期和時間函數庫中找到。這樣的特殊格式化字元數量不少,他們所表示的類似於星期幾、月的英文名、用2位或4位數表示的年份,是否是上午(AM)或下午(PM)以及其他。對於這個例子我們需要的特殊字元為:
『H』 -24 小時制的小時
『i』- 分鍾
『l』- 星期幾的英文全名
『d』- 本月的第幾日
『F』- 月份的英文全名
因此我們的格式化字元串為」Hhi l d F」, PHP代碼為:
?
echo date ("Hhi l d F" ,time());
?
當我們執行這段代碼,我們發現我們所得到的結果為:
180609 Sunday 21 May
這樣的結果看起來有些奇怪。讓我們再查一下PHP手冊,原來』h』所代表的是12 小時制的小時數。這再次證明了一句真理:「計算機只做你所告訴它該做的,而不是你想要它做的」。我們有兩個選擇。第一個是在h前使用轉義字元「」:
echo date ("Hhi l d F", time());
我們得到這樣的結果:
18h12 Sunday 21 May
這正是我們所要的。但如果我們在一個十分復雜的句子中需要包含日期和時間,我們是否需要對每個字元使用轉義字元?
答案當然是不。我們使用另一個函數strftime()。
strftime()有兩個好處。第一個好處我們並不在本文討論范圍內-如果你使用setlocale()函數,你可以通過strftime得到相應語言的月份的名稱。另外的一個好處是你可以將特別的日期和時間的格式化字元包含在你的字元串中。這同時也意味著無論你是否要學習date()函數的所有特殊格式化字元,你都必須學習一整套完全不同的格式化字元。
strftime()工作的方式和date()沒有什麼不同,除了特殊格式化字元的前面必須添加一個百分號%。如果用strftime()函數,前面例子的代碼如下:
?
echo strftime ("%Hh%M %A %d %b" ,time());
?
結果為:
18h24 Sunday 21 May
這也許看起來將簡化繁,但考慮一下如果你所需要的顯示的為"Today is Sunday 21 May 2000. The time is somewhere close to 18h24." 我想使用date()函數無疑令人感到厭煩。
在開始的時候,我提及我們有兩種方式可以從Unix時間戳值中得到有用的數據。我們剛剛了解了date()和strftime()。另一個getdate()。這個函數只需要Unix 的時間戳值作為參數,而函數的返回值為日期和時間的數組。
下面是一個例子:
?
$date_time_array = getdate (time());
echo $date_time_array[ "weekday"];
?
返回的結果為:
Sunday
除了"weekday",該數組的其他部分為:
"seconds" –秒
"minutes" –分
"hours" –小時
「mday" - 本月的第幾天
"wday" -本周的第幾天(數字)
"mon" -月(數字)
"year" –年
"yday" - r本年的第幾天(數字)
"month" -月份全名
我們現在可以得到容易辨認的日期和時間。那麼其他呢?
**轉換現在的日期為Unix的時間戳值
通常你必須處理一些日期或時間格式的數據。打開M$的一個Access資料庫,所有的日期都以YYYY/MM/DD的格式存儲,加入目前的日前即為2000/05/27。Mktime()函數可以將一個時間轉換成Unix的時間戳值。
函數的格式為:int mktime(int hour, int minute, int second, int month, int day, int year, int [is_dst] );
從左往右你必須提供小時、分、秒、月、天和年。最後一個參數用於指定你是否處於夏令時,此參數是可選的,所以我們將忽略它。
代碼如下:
?
echo mktime (0, 0,0 ,5, 27,2000 );
?
由於不知道小時、分和秒同時這些參數必須填寫,我將其設置為0。設置為0意味著時間為午夜。
?
$access_date = "2000/05/27";
//explode()函數用一個字元串作為分界來分解另一個字元串。這個例子$access_date通過字元串」/」來分解
$date_elements = explode("/" ,$access_date);
// 此時
// $date_elements[0] = 2000
// $date_elements[1] = 5
// $date_elements[2] = 27
echo mktime (0, 0,0 ,$date_elements [1], $date_elements[ 2],$date_elements [0]);
?
我們看一個比從Access資料庫單純獲得日期更復雜的情況,我們得到一個以下格式的日期和時間:2000/05/27 02:40:21 PM
?
// 來自Access的字元串
$date_time_string = "2000/05/27 02:40:21 PM";
// 將字元串分解成3部分-日期、時間和上午/下午
$dt_elements = explode(" " ,$date_time_string);
// 分解日期
$date_elements = explode("/" ,$dt_elements[ 0]);
// 分解時間
$time_elements = explode(":" ,$dt_elements[ 1]);
// 如果是下午,我們將時間增加12小時以便得到24小時制的時間
if ($dt_elements [2]== "PM") { $time_elements[ 0]+=12;}
// 輸出結果
echo mktime ($time_elements [0], $time_elements[ 1], $time_elements[ 2], $date_elements[1], $date_elements[2], $date_elements[0]);
?
**修改日期
有時我們需要知道6小時以後是什麼時間,35天前的日期或者從你最後一次玩Quake3後已過去多少秒。我們已經知道如何用mktime()函數從單獨的日期和時間中獲得Unix的時間戳值。如果我們需要的並非目前日期和時間的Unix時間戳值,我們該咋辦?下面是一些練習可以幫助說明我們後面所要做的。
正如前面所見,mktime()使用以下參數:小時、分、秒、月、天和年。想想第二節,getdate()函數可以為我們獲得這些參數。
?
// 將目前的時間戳值放入一數組內
$timestamp = time();
echo $timestamp;
echo "p";
$date_time_array = getdate( $timestamp);
// 用mktime()函數重新產生Unix時間戳值
$timestamp = mktime($date_time_array ["hours"], $date_time_array["minutes" ],$date_time_array[ "seconds"],$date_time_array ["mon"], $date_time_array["mday" ],$date_time_array[ "year"]);
echo $timestamp;
?
看起來有一些令人感到迷惑。我將用一些變數來使上面的程序看起來更容易了解。
?
// 將目前的時間戳值放入一數組內
$timestamp = time();
echo $timestamp;
echo "p";
$date_time_array = getdate( $timestamp);
$hours = $date_time_array[ "hours"];
$minutes = $date_time_array["minutes"];
$seconds = $date_time_array[ "seconds"];
$month = $date_time_array["mon"];
$day = $date_time_array["mday"];
$year = $date_time_array["year"];
// 用mktime()函數重新產生Unix時間戳值
$timestamp = mktime($hours ,$minutes, $seconds,$month ,$day,$year);
echo $timestamp;
?
現在我們將由getdate()所產生的時間戳值放入相對應的名稱變數中,所以代碼變得相對容易閱讀和理解。現在如果我們需要在目前的時間上加上19個小時,我們用$hours+19代替mktime()函數中的$hours。mktime()將自動為我們將時間轉到第二天。
?
// 將目前的時間戳值放入一數組內
$timestamp = time();
echo strftime( "%Hh%M %A %d %b",$timestamp);
echo "p";
$date_time_array = getdate($timestamp);
$hours = $date_time_array["hours"];
$minutes = $date_time_array["minutes"];
$seconds = $date_time_array["seconds"];
$month = $date_time_array["mon"];
$day = $date_time_array["mday"];
$year = $date_time_array["year"];
// 用mktime()函數重新產生Unix時間戳值
// 增加19小時
$timestamp = mktime($hours + 19, $minutes,$seconds ,$month, $day,$year);
echo strftime( "%Hh%M %A %d %b",$timestamp);
echo "br~E after adding 19 hours";
?
運行後得到:
14h58 Saturday 03 Jun
09h58 Sunday 04 Jun
~E after adding 19 hours
減少時間也是同樣的-你只需要減少相應變數的值即可。
得到兩個不同時間值的差同樣也是非常簡單。你所需要做的只是將兩個時間值轉換為Unix的時間戳值,然後兩者相減即可。兩者之差即為兩個時間所相隔的秒數。另外一些演算法可以很快地將秒轉為天、小時、分和秒。
**為PHP添加DateAdd函數
正如在文章一開始我所說的-寫本文的原因是因為我在PHP中找不到類似ASP的DateDiff函數。在介紹完PHP是如何處理日期和時間,讓我們將ASP中常用的兩個函數移植到PHP。第一個函數是DateAdd。
根據Vbscript的文檔,DateAdd(interval,number,date)函數的定義為「返回已添加指定時間間隔的日期。」
Inetrval為表示要添加的時間間隔字元串表達式,例如分或天;number為表示要添加的時間間隔的個數的數值表達式;Date表示日期。
Interval(時間間隔字元串表達式)可以是以下任意值:
yyyy year年
q Quarter季度
m Month月
y Day of year一年的數
d Day天
w Weekday一周的天數
ww Week of year周
h Hour小時
n Minute分
s Second秒
w、y和d的作用是完全一樣的,即在目前的日期上加一天,q加3個月,ww加7天。
?
function DateAdd ($interval, $number, $date) {
$date_time_array = getdate($date);
$hours = $date_time_array["hours"];
$minutes = $date_time_array["minutes"];
$seconds = $date_time_array["seconds"];
$month = $date_time_array["mon"];
$day = $date_time_array["mday"];
$year = $date_time_array["year"];
switch ($interval) {
case "yyyy": $year +=$number; break;
case "q": $month +=($number*3); break;
case "m": $month +=$number; break;
case "y":
case "d":
case "w": $day+=$number; break;
case "ww": $day+=($number*7); break;
case "h": $hours+=$number; break;
case "n": $minutes+=$number; break;
case "s": $seconds+=$number; break;
}
$timestamp = mktime($hours ,$minutes, $seconds,$month ,$day, $year);
return $timestamp;}
?
我們可以將上面的代碼保存為dateadd.inc文件,然後運行以下代碼:
?
include('dateadd.inc');
$temptime = time();
echo strftime( "%Hh%M %A %d %b",$temptime);
$temptime = DateAdd("n" ,50,$temptime);
echo "p";
echo strftime( "%Hh%M %A %d %b",$temptime);
?
我們將得到:
15h41 Saturday 03 Jun
16h31 Saturday 03 Jun
為PHP添加DateDiff函數
現在DateAdd已經完成,那麼DateDiff呢?
根據文檔,DateDiff(interval,date1,date2)函數的定義為「返回兩個日期之間的時間間隔」。
Intervals參數的用法與DateAdd函數中的相同。出於避免過於復雜的考慮,我們決定忽略Vbscript中DateDiff函數中其它復雜的參數,即其兩個可選的參數變數[firstdayofweek[, firstweekofyear]](它們用於決定星期中第一天是星期天還是星期一和一年中第一周的常數。而且我們只允許intervals有以下五個值:"w"(周)、"d"(天)、"h"(小時)、"n"(分鍾) 和"s"(秒)。
Let's see what we can come up with: 下面的代碼是我們所需要的:
?
Function DateDiff ($interval, $date1,$date2) {
// 得到兩日期之間間隔的秒數
$timedifference = $date2 - $date1;
switch ($interval) {
case "w": $retval = bcdiv($timedifference ,604800); break;
case "d": $retval = bcdiv( $timedifference,86400); break;
case "h": $retval = bcdiv ($timedifference,3600); break;
case "n": $retval = bcdiv( $timedifference,60); break;
case "s": $retval = $timedifference; break;
}
return $retval;}
?
將上面的代碼存為datediff.inc文件,然後運行下面的代碼:
?
include('datediff.inc');
include('dateadd.inc');
$currenttime = time();
echo "Current time: ". strftime("%Hh%M %A %d %b" ,$currenttime)."br";
$newtime = DateAdd ("n",50 ,$currenttime);
echo "Time plus 50 minutes: ". strftime("%Hh%M %A %d %b" ,$newtime)."br";
$temptime = DateDiff ("n",$currenttime ,$newtime);
echo "Interval between two times: ".$temptime;
?
如果一切順利,你可以看到以下結果:
Current time: 16h23 Saturday 03 Jun
Time plus 50 minutes: 17h13 Saturday 03 Jun
Interval between two times: 50
如果你在Unix機器上運行PHP,你必須編譯PHP支持BC高精度函數。你必須從以下地址http://www.php.net/extra/number4.tar.gz下載BC庫,然後將其解壓到PHP4的根目錄下,重新編譯PHP,編譯時要加上--enable-bcmath的選項。(詳細說明見PHP4中README.BCMATH)。PHP4的Windows版本則不需要做任何修補即可直接使用BC高精度函數。
現在你已經得到處理日期和時間的函數,剩下的就是如何將其運用到你的PHP程序中。
php時間顯示例
加入時間:2004-12-18 17:22:53 大小:1 KB 閱讀次數:1564
第一種:簡單(供學慣用)
<?PHP
$today=date("Y-m-d G:i:s");
echo "<center>$today</center>";
?>
第二種:
/*
Format Time
*/
Function formatTime($time,$type="1"){
switch($type){
case 1;#2002-06-0418:58 Tuesday
return date("Y.m.d H:i",$time)."<font color=blue>".date(" l",$time)."</font>";
case 2;#June 2002
return date("M Y",$time);
case 3;#2002-06-04 18:58
return date("Y.m.d H:i",$time);
case 4;#06-04 AM
return date("m-d A",$time);
case 5;#06-04 18:58
return date("m.d H:i",$time);
}
}不知道對於兩個以字元串格式存儲的日期得比較會有什麼結果,例如 『2007-07-12′ 『2007-06-27′ ,這種日期最好用什麼方法來比較呢?就大小而論
leehao July 17th, 2006 1:33 am
/*日期比較*/
$Date_1="2007-07-12";
$Date_2="2007-06-27";
/*
首先用explode這個函數來拆分字元串
explode("這引號裡面是條件來的哦,改成:就會用:來拆分字元串的,可以應用到很多方面去的",後面要拆分的字元串)
*/
$Date_explode_1=explode("-",$Date_1);
$Date_explode_2=explode("-",$Date_2);
/*
拆分後的字元串,我們通過使用mktime函數來計算時間,
必須說明一下的是mktime計算出來的時間是用秒來算的哦,
後面就簡單啦,具體可以看手冊,裡面詳細得很
*/
$Day_1=mktime(0,0,0,$Date_explode_1[1],$Date_explode_1[2],$Date_explode_1[0]);
$Day_2=mktime(0,0,0,$Date_explode_2[1],$Date_explode_2[2],$Date_explode_2[0]);
$Days=round(($Day_1-$Day_2)/3600/24);
echo "您要的結果是 $Days 天哦";
?>
請問如何得到90天以後的日期
加入時間:2004-12-18 18:09:53 大小:1 KB 閱讀次數:158
//獲取今天的時間信息
$Y=date(Y);
$m=date(m);
$d=date(d);
//$m為月,$d為天,$Y為年,"+"號表示之後,用"-"號可以得到多少天前的日期,"Y年m月d日",只是顯示的格式,你可以改成"Y-m-d",
$out_date1=date( "Y年m月d日", mktime(0,0,0,$m,$d+7,$Y) );//一周後
$out_date2=date( "Y年m月d日", mktime(0,0,0,$m,$d+14,$Y) );//二周後
$out_date3=date( "Y年m月d日", mktime(0,0,0,$m+1,$d,$Y) );//一個月後
$out_date4=date( "Y年m月d日", mktime(0,0,0,$m+2,$d,$Y) );//二個月後
$out_date5=date( "Y年m月d日", mktime(0,0,0,$m+3,$d,$Y) );//三個月後
$out_date6=date( "Y年m月d日", mktime(0,0,0,$m+6,$d,$Y) );//六個月後
$out_date7=date( "Y年m月d日", mktime(0,0,0,$m,$d,$Y+1) );//一年後
echo date("Ymd", time() + 90*86400);
echo date("Y-m-d",strtotime("2004-10-26 +90day"));
date("Y-m-d",strtotime("+90 day"));
『叄』 如何在一台windows的伺服器里安裝配置PHP+MYSQL環境
php5.3以下版本的安裝方法。
1、首先是下載PHP安裝文件和MYSQL安裝文件,不過請注意MYSQL有很多個版本,有社區版、標准版、企業版、集群版,其中只有社區版是免費的。
2、在伺服器上配置好IIS,這里推薦IIS7以上版本,控制面板-打開或關閉windows功能-萬維網服務-應用程序開發功能里選上對應就可安裝。
3、配置php環境:把php壓縮包解壓到C:\php目錄下面,然後找到php.ini-dist,把他更名為php.ini,
修改裡面的擴展目錄
extension_dir = 「C:\php\ext\」。
把以下擴展前面的分號去掉以啟用
extension=php_curl.dll
extension=php_gd2.dll
extension=php_mysql.dll
fastcgi.impersonate=1 默認為0,如果使用IIS,需要開啟
cgi.fix_pathinfo=1
cgi.force_redirect=0 默認開啟,如果使用IIS,可以將其關閉
其次指定extension_dir目錄和date.timezone,即
extension_dir = "C:/php53iis/ext"
date.timezone= Asia/Shanghai
4、然後把extension=php_mysql.dll前面的分號去掉,保存並把php.ini復制到系統Windows目錄下面。
5、然後依次打開電腦(右鍵)->管理->服務和應用程序->Internet信息服務(IIS)管理器,打開ISAPI和CGI限制,然後添加php的ISAPI的執行文件php5isapi.dll.
6、配置Mysql:把下載的mysql文件直接安裝即可,然後復制php目錄下面的libmysql.dll到系統Windows下面的System32目錄里。
7、重啟IIS,即完工。
當然還有一種方法是使用PHP Manager,步驟大致如下:
1、下載並安裝PHP Manager。
2、開啟IIS,會發現裡面多了一個PHP Manager圖標項了。
3、下載php並解壓到想要放置的位置,將php.ini-development改名為php.ini ,修改php.ini 查找data.timezone
修改為date.timezone = 「Asia/Shanghai」(這里必須改,不然會出警告) ,找到Windows Extensions開啟
所需模塊,如:php_curl.dll php_mysql.dll php_mysqli.dll php_xmlrpc.dll
php_curl.dll,去掉前面的 分號 保存就可以了。
4、回到IIS界面,雙擊PHP Manager後,點擊「Register new PHP
Version」,然後選擇好php目錄中的php-cgi.exe,然後php.ini就會為適合IIS7.5的配置默認給你生成好了。
5、在當前界面點一下「Check phpinfo()」就會出現PHPInfo頁面了!
『肆』 請問PHP怎樣用面向對象方式連接MySQL資料庫
<?php
$servername="localhost";//你的連接地址,可以是ip
$username="username";//你的用戶名
$password="password";//你的密碼
$dbname="myDB";//你要連接資料庫的名字
//創建連接
$conn=newmysqli($servername,$username,$password,$dbname);
//檢測連接
if($conn->connect_error){
die("連接失敗:".$conn->connect_error);
}
echo"連接成功";
學習可以參考:http://www.runoob.com/php/php-mysql-select.html
『伍』 php5.3配什麼版本的mysql
1. php5.3.2要用什麼mysql版本?有沒有什麼特殊要求?
推薦使用mysql5以上的版本,貌似沒有什麼特殊要求。
2. 還有一定要運行在fastcgi模式嗎 不能用之前的iis6那種簡單的嗎
可以使用iis6,在php的各版本中,VC6版本對應Apache平台,Vc9版本對應IIS平台; Thread Safety版本,推薦ISAPI方式運行, Non Thread Safety版本,推薦使用FastCGI運行。
FastCGI是CGI的增強版本,IIS6也可以使用FastCGI,安裝也挺簡單,官方推薦使用FastCGI。
『陸』 怎麼將php與資料庫連接
php鏈接mysql必備條件:
已安裝mysql資料庫;
檢查php環境是否已開啟mysql擴展(一般情況下是開啟的);
檢查方法:a.使用phpinfo();函數,看有沒有mysql項;b.打開php.ini文件,檢查php_mysql.dll前分號是否已取掉。
php鏈接代碼如下:
<?php
//設置編碼格式
header("Content-type:text/html;charset=utf-8");
//定義資料庫主機地址
$host="localhost";
//定義mysql資料庫登錄用戶名
$user="root";
//定義mysql資料庫登錄密碼
$pwd="";
//鏈接資料庫
$conn = mysql_connect($host,$user,$pwd);
//對連接進行判斷
if(!$conn){
die("資料庫連接失敗!".mysql_errno());
}else{
echo "資料庫連接成功!";
}
?>
『柒』 你的 PHP MySQL 庫版本 5.0.51a 和你的 MySQL 伺服器版本 5.1.55 不同。這可能造成一些未知的問題
PHP MySQL 庫版本 5.0.51a 是指的libmysql.dll庫文件和php_mysql.dll這個文件版本低了,最好升級一下php,升到5.2.13以上的應該會沒問題
『捌』 php 5.6.3如何擴展支持mysql
我就是5.6.3,跟以前版本一樣沒有什麼區別。
就是吧
extension=mysql.so
extension=pdo_mysql.so
前面的注釋去掉就可以了。
『玖』 如何在 OSX 上架設 Nginx+MariaDB+PHP 伺服器
打開「Mac App Store」下載並安裝「Xcode」。
打開「Xcode」,按下同意並接受Xcode的使用條款。
打開「終端機(Terminal)」,輸入下面的指令並且安裝Homebrew。
ruby -e "$(curl -fsSL https://raw.github.com/mxcl/homebrew/go)"
輸入下面的指令讓其他程式知道Xcode的位置。
sudo xcode-select -switch /Applications/Xcode.app/Contents/Developer
之後,「按此」下載最新版本的X11並且安裝。
之後建立X11的符號鏈接(軟鏈接)。
sudo ln -s /opt/X11 /usr/X11
之後使用下面的指令查看透過Homebrew安裝的套件。
brew list
之後輸入下面指令查看當前系統變數。
$PATH
打開「.bash_profile」並修改系統變數。
vim ~/.bash_profile
將「/usr/local/bin」放在「/usr/local/sbin」之前。例如︰
export PATH=~/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/X11/bin:/usr/local/git/bin:/opt/local/bin
接著,請參考文章「[教學] 在 OSX 10.8 上設定 Postfix 郵件傳送代理 (MTA)」設定Postfix。
啟用Postfix。
sudo postfix start
安裝 dnsmasq 設定 DNS
透過Homebrew安裝dnsmasq,以加速網路存取速度。
brew install dnsmasq
復制和編輯dnsmasq.conf。
mkdir /usr/local/etc
cp $(brew --prefix dnsmasq)/dnsmasq.conf.example /usr/local/etc/dnsmasq.conf
vim /usr/local/etc/dnsmasq.conf
更改dnsmasq.conf內的數值。
resolv-file=/etc/resolv.dnsmasq.conf
address=/.ld/127.0.0.1
listen-address=127.0.0.1
建立並編輯DNS解析文件。
sudo vim /etc/resolv.dnsmasq.conf
在「resolv.dnsmasq.conf」文件內貼上以下內容。
# Google DNS IPv6:
nameserver 2001:4860:4860::8888
nameserver 2001:4860:4860::8844
# OpenDNS IPv6:
nameserver 2620:0:ccd::2
nameserver 2620:0:ccc::2
# Google DNS:
nameserver 8.8.8.8
nameserver 8.8.4.4
# OpenDNS:
nameserver 208.67.222.222
nameserver 208.67.220.220
設定開機自動執行dnsmasq。
sudo cp $(brew --prefix dnsmasq)/homebrew.mxcl.dnsmasq.plist /Library/LaunchDaemons
sudo launchctl load -w /Library/LaunchDaemons/homebrew.mxcl.dnsmasq.plist
設定你的Hostname。
sudo scutil --set HostName foolegg
打開「系統設定」,在「網路」內分別選擇「Wi-fi」和「Ethernet」,在「進階」內設定「127.0.0.1」為DNS伺服器。
安裝 Nginx
輸入下面指令關閉自動啟用Apache。
sudo launchctl unload -w /System/Library/LaunchDaemons/org.apache.httpd.plist
之後透過Homebrew安裝Nginx。
brew install nginx
安裝完成後,復制和備份nginx.conf。
cp /usr/local/etc/nginx/nginx.conf /usr/local/etc/nginx/nginx.conf.bak
打開nginx.conf,刪除所有內容,使用下面的內容取代。
# Nginx web server main configuration file nginx.conf
#
user www-data staff;
worker_processes 4;
worker_rlimit_nofile 8192;
error_log /usr/local/var/log/nginx/error.log;
#pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 10;
tcp_nodelay on;
gzip on;
client_max_body_size 100M;
#access_log /usr/local/var/log/nginx/access.log main;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
## FastCGI.
include /usr/local/etc/nginx/fastcgi.conf;
## For the filefield_nginx_progress mole to work. From the
## README. Reserve 1MB under the name 'uploads' to track uploads.
#upload_progress uploads 1m;
#include /etc/nginx/conf.d/*.conf;
#include /usr/local/etc/nginx/aegir.conf;
server {
listen 80;
server_name localhost;
server_tokens off;
#access_log /usr/local/var/log/nginx/access.log main;
root /usr/share/nginx/www/public_html;
location / {
root /usr/share/nginx/www/public_html;
index index.html index.htm;
##### Use this if you're going to install wordpress #####
#if (-f $request_filename/index.html) {
# rewrite (.*) $1/index.html break;
#}
#if (-f $request_filename/index.php) {
# rewrite (.*) $1/index.php;
#}
#if (-f $request_filename) {
# rewrite (.*) /index.php;
#}
#if (!-e $request_filename) {
# rewrite ^.+?(/wp-.*) $1 last;
# rewrite ^.+?(/.*\.php)$ $1 last;
# rewrite ^ /index.php last;
#}
#rewrite /wp-admin$ $scheme://$host$uri/ permanent;
##### End #####
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/www/public_html;
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
}
之後建立Nginx的log資料夾和其它必要的目錄。
sudo mkdir -p /usr/local/var/log/nginx/
touch /usr/local/var/log/nginx/error.log
touch /usr/local/var/log/nginx/access.log
sudo mkdir -p /usr/share/nginx/www/public_html
安裝 MariaDB
透過Homebrew安裝MariaDB。
brew install mariadb --use-llvm --env=std
取消TMPDIR設定。
unset TMPDIR
初始化MySQL資料庫。請將5.5.30更改為你當前使用的版本編號。
cd /usr/local/Cellar/mariadb/5.5.30/scripts
mysql_install_db --user=`whoami` --basedir="$(brew --prefix mariadb)" --datadir=/usr/local/var/mysql --tmpdir=/tmp
系統會提示錯誤,請忽略有關錯誤。下面的教學設定會更正錯誤。
安裝 PHP
雖然OSX上已經安裝了PHP,但是我們不會使用Apple的PHP。
輸入下面的指令安裝PHP。
brew tap josegonzalez/homebrew-php
brew tap homebrew/pes
brew install php53 --with-mysql --with-fpm --with-imap
brew install php53-xhprof
brew install php53-xdebug
brew install php53-uploadprogress
brew install php53-memcached
brew install php53-imagick
打開並修改php.ini。
vim /usr/local/etc/php/5.3/php.ini
搜索
extension=php_zip.dll
在下面加上以下內容,請更改版本編號。
extension="/usr/local/Cellar/php53-xhprof/0.9.2/xhprof.so"
extension="/usr/local/Cellar/php53-uploadprogress/1.0.3.1/uploadprogress.so"
extension="/usr/local/Cellar/php53-memcached/2.1.0/memcached.so"
extension="/usr/local/Cellar/php55-imagick/3.1.0RC2/imagick.so"
zend_extension="/usr/local/Cellar/php53-xdebug/2.2.1/xdebug.so"
到「PHP手冊」尋找你身處地區的時區。修改php.ini內的「date.timezone」變數的數值。
date.timezone = Asia/Hong_Kong
尋找以下3個變數的數值。如果找不到,請在檔案的最尾部份加上3個變數和數值。
magic_quotes_gpc = Off
magic_quotes_runtime = Off
magic_quotes_sybase = Off
修改記憶體和上傳限制的數值。如果變數前出現分號「;」,請將之刪除。
memory_limit = 256M
post_max_size = 100M
upload_max_filesize = 100M
打開並修改php-fpm.conf檔案。
vim /usr/local/etc/php/5.3/php-fpm.conf
搜索
pid = run/php-fpm.pid
在下面加上
pid = /usr/local/var/run/php-fpm.pid
之後刪除下面4行變數和數值前的分號「;」。
pm.start_servers = 3
pm.min_spare_servers = 3
pm.max_spare_servers = 5
pm.max_requests = 500
按照下面修改「error_log」的數值。
error_log = /usr/local/var/log/php-fpm.log
之後建立log的符號鏈接(軟鏈接)。
sudo ln -s $(brew --prefix josegonzalez/php/php53)/var/log/php-fpm.log /usr/local/var/log/php-fpm.log
開機啟用服務
設定Nginx的啟用服務。
sudo cp $(brew --prefix nginx)/homebrew.mxcl.nginx.plist /Library/LaunchDaemons/
sudo chown root:wheel /Library/LaunchDaemons/homebrew.mxcl.nginx.plist
打開並修改「homebrew.mxcl.nginx.plist」。
sudo vim /Library/LaunchDaemons/homebrew.mxcl.nginx.plist
在「homebrew.mxcl.nginx.plist」內刪除以下內容。
<key>KeepAlive</key>
<true/>
<key>UserName</key>
<string>[YourUserName]</string>
開啟Nginx。
launchctl load -w /Library/LaunchDaemons/homebrew.mxcl.nginx.plist
為軟體建立資料夾。
mkdir -p ~/Library/LaunchAgents
設定MariaDB的啟用服務。
cp $(brew --prefix mariadb)/homebrew.mxcl.mariadb.plist ~/Library/LaunchAgents/
launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.mariadb.plist
設定PHP的啟用服務。
cp $(brew --prefix josegonzalez/php/php53)/homebrew-php.josegonzalez.php53.plist ~/Library/LaunchAgents/
launchctl load -w ~/Library/LaunchAgents/homebrew-php.josegonzalez.php53.plist
完成MariaDB的設定。
sudo $(brew --prefix mariadb)/bin/mysql_secure_installation
為MySQL設定密碼。
Enter current password for root (enter for none): [Enter]
Set root password? [Y/n] y
New password: [password]
Re-enter new password: [password]
Remove anonymous users? [Y/n] y
Disallow root login remotely? [Y/n] y
Remove test database and access to it? [Y/n] y
Reload privilege tables now? [Y/n] y
測試PHP
建立並修改index.php。
vim /usr/share/nginx/www/public_html/index.php
輸入並儲存以下內容。
<?php phpinfo(); ?>
從新啟動Nginx。
sudo nginx -s reload
打開瀏覽器,輸入「http://localhost/index.php」查看是否成功運行PHP。
啟動或停止MNMP
在桌面或其他位置建立Shell Script「mnmp.sh」。
vim mnmp.sh
在Shell Script「mnmp.sh」內加入以下內容,然後儲存檔案。
#!/bin/bash
case "$1" in
start)
# Start MariaDB
echo -e "Starting mariadb..."
launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.mariadb.plist
# Start PHP
echo -e "Starting php..."
launchctl load -w ~/Library/LaunchAgents/homebrew-php.josegonzalez.php53.plist
# Start Nginx
echo -e "Starting nginx..."
sudo launchctl load -w /Library/LaunchDaemons/homebrew.mxcl.nginx.plist
;;
stop)
# Stop MariaDB
echo -e "Stopping mariadb..."
launchctl unload -w ~/Library/LaunchAgents/homebrew.mxcl.mariadb.plist
# Stop PHP
echo -e "Stopping php..."
launchctl unload -w ~/Library/LaunchAgents/homebrew-php.josegonzalez.php53.plist
# Stop Nginx
echo -e "Stopping nginx..."
sudo launchctl unload -w /Library/LaunchDaemons/homebrew.mxcl.nginx.plist
;;
esac
exit 0
為Shell Script「mnmp.sh」加入可執行許可權。
chmod 700 mnmp.sh
使用以下指令啟動MNMP。
./mnmp.sh start
使用以下指令停止MNMP。
./mnmp.sh stop
PHP檔案存取錯誤
有部份讀者反映在存取PHP檔案時出現錯誤。大家可以打開檔案「/usr/local/var/log/nginx/error.log」查看錯誤的原因。
如果出現下面的原因,可能是因為php-fpm的問題。
[error] <NUMBER>#0: *<NUMBER> kevent() reported that connect() fa iled (<NUMBER>: Connection refused) while connecting to upstream, client: 127.0.0. 1, server: localhost, request: 「GET /index.php HTTP/1.1″, upstream: 「fastcgi ://127.0.0.1:9000″, host: 「127.0.0.1″
大家可以使用「netstat -anp tcp | grep 9000」或者「lsof -i tcp:9000」查看佔用Port 9000的進程,並且將其終止。之後使用下面指令開啟php-fpm。
sudo /usr/local/sbin/php-fpm --fpm-config /usr/local/etc/php/5.3/php-fpm.conf
請再次測試是否成功存取php。如果成功,請依照下面設定自動啟動php-fpm。
設定自動啟動php-fpm
建立文件「~/Library/LaunchAgents/org.php-fpm.plist」。