導航:首頁 > 編程語言 > phpapacheversion

phpapacheversion

發布時間:2022-10-03 05:18:21

linux 裝Apache 出現的狀況。咋解決高手指點下

樓上二位,顯然沒搞清楚呀
Windows下和Linux可差大了
下面我根據supsite的文摘寫了一下:
當然先要有一套:(如果裝系統是定製了,可以卸載,也可以直接安裝)
httpd-2.0.X.tar.gz
MySQL-client-4.0.20-0.i386.rpm
MySQL-server-4.0.20-0.i386.rpm
http:
//
php-5.0.X.tar.gz
ZendOptimizer-2.5.3-linux-glibc21-i386.tar.gz
http:
//
(這個裝不裝都可以加速php用的)
gd-2.0.28.tar.gz
下面開始安裝:
1.安裝MYSQL
伺服器:
#rpm
-ivh
MySQL-server-4.0.20-0.i386.rpm
#rpm
-ivh
MySQL-client-4.0.20-0.i386.rpm
mysql就ok了
2.安裝GD庫
#
tar
-zxf
gd-2.0.26gif.tar.gz
#
cd
gd-2.0.26gif
#
./configure
--prefix=/usr/local/gd2
--with-zlib=/usr/local/zlib2/
--with-png=/usr/local/libpng2/
--with-jpeg=/usr/local/jpeg6/
--with-freetype=/usr/local/freetype2/
(請指定及格插件的安裝路徑,否則安裝php的時候可能出錯!)
#
make
#
make
install
3.安裝apacha
安裝apache,(php5安裝環境需要apache2.0.46以上版本,下載的時候注意!)
#tar
zxvf
httpd-2.0.50.tar.gz
#cd
httpd-2.0.50
#./configure
--prefix=/usr/local/apache2
--enable-mole=so
#make
#make
install
4.安裝php
#
tar
-zxf
php5-200411260130.tar.gz
#
cd
php5-200411260130
#
./configure
--prefix=/usr/local/php
--with-apxs2=/usr/local/apache2/bin/apxs
--with-jpeg-dir=/usr/local/jpeg6/
--with-png-dir=/usr/local/libpng2/
--with-gd=/usr/local/gd2/
--with-freetype-dir=/usr/local/freetype2/
--enable-trace-vars
--with-zlib-dir=/usr/local/zlib2/
-with-mysql=/var/lib/mysql
#
make
#
make
install
#
cp
php.ini-dist
/usr/local/php/lib/php.ini
編輯apache配置文件httpd.conf
用編輯器打開:/usr/local/apache2/conf/httpd.conf
#AddType
application/x-tar
.tgz
下加一行
#LoadMole
php5_mole
moles/libphp5.so
AddType
application/x-httpd-php
.php
如果你搜索其它地方沒有以下這行
LoadMole
php5_mole
moles/libphp5.so
請把上面的#號去掉
還有找到
DirectoryIndex
index.html
index.html.var
在後面加
index.php
讓它把index.php做為默認頁
找到
#
don't
use
Group
#-1
on
these
systems!
把下面的用戶名和組改為
User
apache
Group
apache
再找
#ServerName
把#去掉,後面的IP改成你的IP.
找到
DocumentRoot
"/usr/local/apache2/htdocs"
把/usr/local/apache2/htdocs改為你存放網頁文件的路徑
為了讓中文網頁沒亂碼
找到
AddDefaultCharset
iso8859-1
把後面的iso8859-1改為gb2312
或者是乾脆off
其他的選項就自己修改吧!或者到
有一個專門的httpd.conf的說明
啟動apache
#
/usr/local/apache2/bin/apachectl
start
寫一個測試頁放到你網頁目錄下看一下
用ZendOptimizer加速PHP
#tar
zxvf
ZendOptimizer-2.5.3-linux-glibc21-i386.tar.gz
#cd
ZendOptimizer-2.5.3-linux-glibc21-i386
#./install.sh
安裝的時候注意輸入正確的安裝apache的路徑等內容!
安裝完畢,再看看phpinfo頁面的zend選項就發現了!!
這是從弄的,安裝很不容易的,我也試過費了好大好大勁,如果有什麼問題,可以去那個頁面看一下,上面有一些問題的解決方法,Good
Luck!!
如果對您有幫助,請記得採納為滿意答案,謝謝!祝您生活愉快!

㈡ apache2.2.17和php5.3.4怎麼配置 php中沒有php5apache2_2.dll這個文件

如果php安裝目錄里沒有php5apache2_2.dll,一定是下載的版本不對。
去php官網下載,http://windows.php.net/download
php 5.3.4有V9版和V6好幾個版本。

網站左邊有幾段文字:
Which version do I choose?
If you are using PHP with Apache 1 or Apache2 from apache.org you need to use the VC6 versions of PHP。。。。

所以你下載V6C versions of PHP
VC6 x86 Non Thread Safe (2010-Dec-09 22:50:48)
VC6 x86 Thread Safe (2010-Dec-09 22:39:55)
一個是Thread Safe,一個是Non Thread Safe, 兩個我都下載安裝過,

結果,Non Thread Safe版的php在安裝過程中,沒有Apache的選項:
select the web server you wish to setup
IIS FastCGI
Other CGI
Do not setup a web server

而Thread Safe版的安裝過程中有Apache 2.2.x Mole選項:
select the web server you wish to setup
Apache 2.2.x Mole
Apaceh CGI
IIS FastCGI
IIS CGI
NSAPI
Xitami
NetServe Web Server
Other CGI
Do not setup a web server
-------------------------
所以正確的版本是 php 5.3.4 VC6 x86 Thread Safe (2010-Dec-09 22:39:55)。去php官網下載,http://windows.php.net/download

Apache 和php都安裝完後,要分別配置Apache的httpd.conf文件和php.ini文件。這個在網上有很多教程的。。至於大家都反映的找不到php5apache2_2.dll,其實是像我說的那樣php版本下錯了。

㈢ 安裝apache+php後,出現Cannot load E:/php/php5apache2_2.dll into server錯誤,apache無法啟動。

VC用來編php嗎?

㈣ linux下的php開發工具

使用LAMP平台,當下流行的呀~~~具體介紹如下(從網上找的,希望對你有幫助)

LAMP (Linux + Apache + MySQL + PHP/Perl/python) 近幾年來,已經成為Web 社區的事實標准。本文我們將介紹LAMP組合的安裝,本文假定你的機器上已經安裝了Linux ,如果你對Linux 的安裝還有什麼問題的話,可以去相關的一些開放源碼站點論壇上發表貼子,向其他網友尋求幫助。也可以向相關的廠商尋求技術支持。本文的LAMP中的 P,暫時解釋為PHP,因為本站是基於 Zope + Python 結構架構的,所以本站在以後的文章中將著重向這方面傾斜。
所有LAMP組合中的軟體都是開放源代碼產品,所以您不必擔心產品的價格以及版權問題。相反,有廣大的開放源碼社區開發人員的不斷努力,這些產品的版本更新速度反而比那些昂貴的專有軟體更快。雖然Linux 因為界面問題,會讓您望而卻步,但是您不必擔心,現在,這些軟體都採用了瀏覽器管理界面,好多都提供phpMyAdmin(一個利用PHP 語言在瀏覽器上管理MySQL的程序)以及WebMin(通過瀏覽器來管理系統)來讓您方便的管理系統。

PHP現在的版本已經到了4.0.4pl1,是一門面向對象的交叉平台的伺服器端腳本語言。可以嵌入HTML語言中,可以作為Apache 的模塊來運行。下面我們以 tarball(.tar.gz)格式(和它相對的是RPM 格式)的版本為例子,來介紹安裝過程。

首先,去對應的網站下載最新版本的源碼。為了保持系統目錄分布的一致性,建議把他們解開到/usr/local/src 目錄:

#cd /usr/local/src
#tar xvfz filename.tar.gz
先介紹MySQL的安裝:

# cd /usr/locl/src/mysql-3.23.35
# ./configure --prefix=/usr/local/mysql
這樣就把MySQL 的安裝目錄設置為 /usr/local/mysql ,然後運行make 來編譯源代碼,接下來就可以用 make install 來安裝了。

安裝完畢後,需要把MySQL 庫加入系統,採用ldconfig 命令來實現:

#echo "/usr/local/mysql/lib/mysql" >> /etc/ld.so.conf
#ldconfig -v | grep libmysqlclient
然後可以看到系統返回:

libmysqlclient.so.10 => libmysqlclient.so.10.0.0
讓MySQL 在啟動時自動運行:

#echo "/usr/local/mysql/bin/safe_mysqld > /dev/null &" >> /etc/rc.d/rc.local

接下來初始化資料庫(切換到/usr/local/mysql 目錄):

# ./scripts/mysql_install_db
啟動MySQL 服務:

# bin/safe_mysqld > /dev/null &
增加路徑:

# PATH="$PATH:/usr/local/mysql/bin"
測試 MySQL:

#mysqladmin version
如果能返回MySQL 的所有信息,就表示您的MySQL 已經安裝成功了。下面為了安全起見,需要給root用戶(資料庫中的超級用戶),設置口令:

#mysql -h -u root -p
按照提示輸入口令以後,MySQL 的設置就算大功告成了。

接下來的部分就是 Apache 和 PHP 的安裝了。如果你的系統已經存在Apache ,那麼需要首先做好備份。然後進入Apache 的源代碼目錄:

#cd /usr/local/src/apache_1.3.19
輸入配置命令:

#./configure --prefix=/usr/local/apache
然後改變到 PHP 的源代碼目錄:

#cd /usr/local/src/php-4.0.4pl1
配置PHP 的編譯命令:

#./configure --with-apache=../apache_1.3.19 --with-mysql=/usr/local/mysql
運行 make 和 make install , PHP就安裝成功了。

改變目錄到 Apache 源代碼所在:

#cd ../apache_1.3.19
因為增加了 PHP 模塊,所以需要重新配置Apache 的編譯文件。

#./configure --prefix=/usr/local/apache --activate-mole=src/moles/php4/libphp4.a (注意這里的路徑,後面的文件確實是不存在的,不要擔心。)

然後運行make 和 make install 您就可以在 /usr/local/apache 目錄下看到apache 的幾個目錄了。為了讓Apache 能認識那些以 PHP 結尾的文件,我們需要修改 /usr/local/apache/conf/httpd.conf

找到下面的行,把行首用作注釋的#號去掉:

AddType application/x-httpd-php .php
這樣,Web 伺服器就能認識那些 .php 結尾的文件,否則當您瀏覽網站時,瀏覽器會提示您存檔。為了讓Apache 自動認識 index.php 作為首頁我們還必須修改DirectoryIndex 行,添加 index.php:

DirectoryIndex index.html index.php
然後,重新啟動 Apache:

#killall -HUP httpd
可以在 /usr/local/apache/htdocs 目錄下,建立一個 testphp.php 的文件,內容為:

?php
phpinfo();
?〉
然後在瀏覽器上輸入 http://localhost/testphp.php 就應該看到你當前的 PHP 設置情況。

以上介紹的 Apache/PHP 安裝方法為靜態編譯的方法。以後每次有新的版本出來或者添加新的模塊時,必須重新編譯Apache ,需要花費較長的時間,我們不推薦這種方法,Apache 1.3 以後的版本採用了 DSO(動態共享對象)技術,實現了模塊的動態安裝,這種方法不僅適用於PHP ,對其他模塊,例如 mod_perl,mod_python 都適用,因此,筆者推薦採用這種方法:

編譯Apache:

#./configure --prefix=/usr/local/apache --enable-mole=most --enable-shared=max
#make
#make install
然後編譯PHP:

#./configure --with-apxs=/usr/local/apache/bin/apxs --with-mysql=/usr/local/mysql
#make
#make install
之後的步驟和靜態部分一樣,主要就是修改httpd.conf 。 區別兩種安裝方法最簡單的辦法就是使用命令:

#httpd -l
看輸出結果,靜態編譯沒有 mod_so.c 模塊。

㈤ 幾種常見的PHP超時處理方法

【Web伺服器超時處理】

[ Apache ]
一般在性能很高的情況下,預設所有超時配置都是30秒,但是在上傳文件,或者網路速度很慢的情況下,那麼可能觸發超時操作。
目前apachefastcgiphp-fpm模式下有三個超時設置:
fastcgi超時設置:
修改的fastcgi連接配置,類似如下:

復制代碼 代碼如下:

<IfMolemod_fastcgi.c>
FastCgiExternalServer/home/forum/apache/apache_php/cgi-bin/php-cgi-socket/home/forum/php5/etc/php-fpm.sock
ScriptAlias/fcgi-bin/"/home/forum/apache/apache_php/cgi-bin/"
AddHandlerphp-fastcgi.php
Actionphp-fastcgi/fcgi-bin/php-cgi
AddTypeapplication/x-
</IfMole>

預設配置是30s,如果需要定製自己的配置,需要修改配置,比如修改為100秒:(修改後重啟apache):

復制代碼 代碼如下:

<IfMolemod_fastcgi.c>
FastCgiExternalServer/home/forum/apache/apache_php/cgi-bin/php-cgi-socket/home/forum/php5/etc/php-fpm.sock-idle-timeout100
ScriptAlias/fcgi-bin/"/home/forum/apache/apache_php/cgi-bin/"
AddHandlerphp-fastcgi.php
Actionphp-fastcgi/fcgi-bin/php-cgi
AddTypeapplication/x-
</IfMole>

如果超時會返回500錯誤,斷開跟後端php服務的連接,同時記錄一條apache錯誤日誌:
[ThuJan2718:30:152011][error][client10.81.41.110]FastCGI:commwithserver"/home/forum/apache/apache_php/cgi-bin/php-cgi"aborted:idletimeout(30sec)
[ThuJan2718:30:152011][error][client10.81.41.110]FastCGI:incompleteheaders(0bytes)receivedfromserver"/home/forum/apache/apache_php/cgi-bin/php-cgi"
其他fastcgi配置參數說明:
復制代碼 代碼如下:

IdleTimeout發呆時限
ProcessLifeTime一個進程的最長生命周期,過期之後無條件kill
MaxProcessCount最大進程個數
DefaultMinClassProcessCount每個程序啟動的最小進程個數
DefaultMaxClassProcessCount每個程序啟動的最大進程個數
IPCConnectTimeout程序響應超時時間
IPCCommTimeout與程序通訊的最長時間,上面的錯誤有可能就是這個值設置過小造成的
MaxRequestsPerProcess每個進程最多完成處理個數,達成後自殺

[ Lighttpd ]
配置:lig
Lighttpd配置中,關於超時的參數有如下幾個(篇幅考慮,只寫讀超時,寫超時參數同理):
主要涉及選項:
server.max-keep-alive-idle=5
server.max-read-idle=60
server.read-timeout=0
server.max-connection-idle=360
復制代碼 代碼如下:

#每次keep-alive的最大請求數,默認值是16
server.max-keep-alive-requests=100
#keep-alive的最長等待時間,單位是秒,默認值是5
server.max-keep-alive-idle=1200
#lighttpd的work子進程數,默認值是0,單進程運行
server.max-worker=2
#限制用戶在發送請求的過程中,最大的中間停頓時間(單位是秒),
#如果用戶在發送請求的過程中(沒發完請求),中間停頓的時間太長,lighttpd會主動斷開連接
#默認值是60(秒)
server.max-read-idle=1200
#限制用戶在接收應答的過程中,最大的中間停頓時間(單位是秒),
#如果用戶在接收應答的過程中(沒接完),中間停頓的時間太長,lighttpd會主動斷開連接
#默認值是360(秒)
server.max-write-idle=12000
#讀客戶端請求的超時限制,單位是秒,配為0表示不作限制
#設置小於max-read-idle時,read-timeout生效
server.read-timeout=0
#寫應答頁面給客戶端的超時限制,單位是秒,配為0表示不作限制
#設置小於max-write-idle時,write-timeout生效
server.write-timeout=0
#請求的處理時間上限,如果用了mod_proxy_core,那就是和後端的交互時間限制,單位是秒
server.max-connection-idle=1200

說明:
對於一個keep-alive連接上的連續請求,發送第一個請求內容的最大間隔由參數max-read-idle決定,從第二個請求起,發送請求內容的最大間隔由參數max-keep-alive-idle決定。請求間的間隔超時也由max-keep-alive-idle決定。發送請求內容的總時間超時由參數read-timeout決定。Lighttpd與後端交互數據的超時由max-connection-idle決定。
延伸閱讀:

[ Nginx ]
配置:nf
復制代碼 代碼如下:

http{
#Fastcgi:(針對後端的fastcgi生效,fastcgi不屬於proxy模式)
fastcgi_connect_timeout5;#連接超時
fastcgi_send_timeout10; #寫超時
fastcgi_read_timeout10;#讀取超時
#Proxy:(針對proxy/upstreams的生效)
proxy_connect_timeout15s;#連接超時
proxy_read_timeout24s;#讀超時
proxy_send_timeout10s; #寫超時
}

說明:
Nginx 的超時設置倒是非常清晰容易理解,上面超時針對不同工作模式,但是因為超時帶來的問題是非常多的。
延伸閱讀:
ml
ml
ml

【PHP本身超時處理】
[ PHP-fpm ]
配置:nf
復制代碼 代碼如下:

<?xmlversion="1.0"?>
<configuration>
//...
.
.
EquivalenttoPHP_FCGI_.fcgi
Usedwithanypm_style.
#php-cgi的進程數量
<valuename="max_children">128</value>
Thetimeout(inseconds)
Shouldbeusedwhen'max_execution_time'
'0s'means'off'
#php-fpm 請求執行超時時間,0s為永不超時,否則設置一個 Ns 為超時的秒數
<valuename="request_terminate_timeout">0s</value>
Thetimeout(inseconds).logfile
'0s'means'off'
<valuename="request_slowlog_timeout">0s</value>
</configuration>

說明:
在php.ini中,有一個參數max_execution_time可以設置PHP腳本的最大執行時間,但是,在php-cgi(php-fpm)中,該參數不會起效。真正能夠控制PHP腳本最大執行時:
<valuename="request_terminate_timeout">0s</value>
就是說如果是使用mod_php5.so的模式運行max_execution_time是會生效的,但是如果是php-fpm模式中運行時不生效的。
延伸閱讀:

[ PHP ]
配置:php.ini
選項:
max_execution_time=30
或者在代碼里設置:
ini_set("max_execution_time",30);
set_time_limit(30);
說明:
對當前會話生效,比如設置0一直不超時,但是如果php的safe_mode打開了,這些設置都會不生效。
效果一樣,但是具體內容需要參考php-fpm部分內容,如果php-fpm中設置了request_terminate_timeout的話,那麼max_execution_time就不生效。
【後端&介面訪問超時】
【HTTP訪問】
一般我們訪問HTTP方式很多,主要是:curl,socket,file_get_contents()等方法。
如果碰到對方伺服器一直沒有響應的時候,我們就悲劇了,很容易把整個伺服器搞死,所以在訪問http的時候也需要考慮超時的問題。
[ CURL 訪問HTTP]
CURL 是我們常用的一種比較靠譜的訪問HTTP協議介面的lib庫,性能高,還有一些並發支持的功能等。
CURL:
curl_setopt($ch,opt)可以設置一些超時的設置,主要包括:
*(重要)CURLOPT_TIMEOUT設置cURL允許執行的最長秒數。
*(重要)CURLOPT_TIMEOUT_MS設置cURL允許執行的最長毫秒數。(在cURL7.16.2中被加入。從PHP5.2.3起可使用。)
CURLOPT_CONNECTTIMEOUT在發起連接前等待的時間,如果設置為0,則無限等待。
CURLOPT_CONNECTTIMEOUT_MS嘗試連接等待的時間,以毫秒為單位。如果設置為0,則無限等待。在cURL7.16.2中被加入。從PHP5.2.3開始可用。
CURLOPT_DNS_CACHE_TIMEOUT設置在內存中保存DNS信息的時間,默認為120秒。
curl普通秒級超時:
$ch=curl_init();
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch,CURLOPT_TIMEOUT,60);//只需要設置一個秒的數量就可以
curl_setopt($ch,CURLOPT_HTTPHEADER,$headers);
curl_setopt($ch,CURLOPT_USERAGENT,$defined_vars['HTTP_USER_AGENT']);
curl普通秒級超時使用:
curl_setopt($ch,CURLOPT_TIMEOUT,60);
curl如果需要進行毫秒超時,需要增加:
curl_easy_setopt(curl,CURLOPT_NOSIGNAL,1L);
或者是:
curl_setopt($ch,CURLOPT_NOSIGNAL,true);是可以支持毫秒級別超時設置的
curl一個毫秒級超時的例子:
復制代碼 代碼如下:

<?php
if(!isset($_GET['foo'])){
//Client
$ch=curl_init('');
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch,CURLOPT_NOSIGNAL,1);//注意,毫秒超時一定要設置這個
curl_setopt($ch,CURLOPT_TIMEOUT_MS,200);//超時毫秒,cURL7.16.2中被加入。從PHP5.2.3起可使用
$data=curl_exec($ch);
$curl_errno=curl_errno($ch);
$curl_error=curl_error($ch);
curl_close($ch);
if($curl_errno>0){
echo"cURLError($curl_errno):$curl_errorn";
}else{
echo"Datareceived:$datan";
}
}else{
//Server
sleep(10);
echo"Done.";
}
?>

其他一些技巧:
1. 按照經驗總結是:cURL版本>=libcurl/7.21.0版本,毫秒級超時是一定生效的,切記。
2. curl_multi的毫秒級超時也有問題。。單次訪問是支持ms級超時的,curl_multi並行調多個會不準
[流處理方式訪問HTTP]
除了curl,我們還經常自己使用fsockopen、或者是file操作函數來進行HTTP協議的處理,所以,我們對這塊的超時處理也是必須的。
一般連接超時可以直接設置,但是流讀取超時需要單獨處理。
自己寫代碼處理:
復制代碼 代碼如下:

$tmCurrent=gettimeofday();
$intUSGone=($tmCurrent['sec']-$tmStart['sec'])*1000000
+($tmCurrent['usec']-$tmStart['usec']);
if($intUSGone>$this->_intReadTimeoutUS){
returnfalse;
}

或者使用內置流處理函數stream_set_timeout()和stream_get_meta_data()處理:
復制代碼 代碼如下:

<?php
//Timeoutinseconds
$timeout=5;
$fp=fsockopen("",80,$errno,$errstr,$timeout);
if($fp){
fwrite($fp,"GET/HTTP/1.0rn");
fwrite($fp,"Host:rn");
fwrite($fp,"Connection:Closernrn");
stream_set_blocking($fp,true);//重要,設置為非阻塞模式
stream_set_timeout($fp,$timeout);//設置超時
$info=stream_get_meta_data($fp);
while((!feof($fp))&&(!$info['timed_out'])){
$data.=fgets($fp,4096);
$info=stream_get_meta_data($fp);
ob_flush;
flush();
}
if($info['timed_out']){
echo"ConnectionTimedOut!";
}else{
echo$data;
}
}

file_get_contents超時:
復制代碼 代碼如下:

<?php
$timeout=array(
'http'=>array(
'timeout'=>5//設置一個超時時間,單位為秒
)
);
$ctx=stream_context_create($timeout);
$text=file_get_contents("",0,$ctx);
?>

fopen超時:
復制代碼 代碼如下:

<?php
$timeout=array(
'http'=>array(
'timeout'=>5//設置一個超時時間,單位為秒
)
);
$ctx=stream_context_create($timeout);
if($fp=fopen("","r",false,$ctx)){
while($c=fread($fp,8192)){
echo$c;
}
fclose($fp);
}
?>

【MySQL】
php中的mysql客戶端都沒有設置超時的選項,mysqli和mysql都沒有,但是libmysql是提供超時選項的,只是我們在php中隱藏了而已。
那麼如何在PHP中使用這個操作捏,就需要我們自己定義一些MySQL操作常量,主要涉及的常量有:
MYSQL_OPT_READ_TIMEOUT=11;
MYSQL_OPT_WRITE_TIMEOUT=12;
這兩個,定義以後,可以使用options設置相應的值。
不過有個注意點,mysql內部實現:
1.超時設置單位為秒,最少配置1秒
2.但mysql底層的read會重試兩次,所以實際會是3秒
重試兩次+自身一次=3倍超時時間,那麼就是說最少超時時間是3秒,不會低於這個值,對於大部分應用來說可以接受,但是對於小部分應用需要優化。
查看一個設置訪問mysql超時的php實例:
復制代碼 代碼如下:

<?php
//自己定義讀寫超時常量
if(!defined('MYSQL_OPT_READ_TIMEOUT')){
define('MYSQL_OPT_READ_TIMEOUT',11);
}
if(!defined('MYSQL_OPT_WRITE_TIMEOUT')){
define('MYSQL_OPT_WRITE_TIMEOUT',12);
}
//設置超時
$mysqli=mysqli_init();
$mysqli->options(MYSQL_OPT_READ_TIMEOUT,3);
$mysqli->options(MYSQL_OPT_WRITE_TIMEOUT,1);
//連接資料庫
$mysqli->real_connect("localhost","root","root","test");
if(mysqli_connect_errno()){
printf("Connectfailed:%s/n",mysqli_connect_error());
exit();
}
//執行查詢sleep1秒不超時
printf("Hostinformation:%s/n",$mysqli->host_info);
if(!($res=$mysqli->query('selectsleep(1)'))){
echo"query1error:".$mysqli->error."/n";
}else{
echo"Query1:querysuccess/n";
}
//執行查詢sleep9秒會超時
if(!($res=$mysqli->query('selectsleep(9)'))){
echo"query2error:".$mysqli->error."/n";
}else{
echo"Query2:querysuccess/n";
}
$mysqli->close();
echo"closemysqlconnection/n";
?>

延伸閱讀:

【Memcached】
[PHP擴展]
php_memcache客戶端:
連接超時:boolMemcache::connect(string$host[,int$port[,int$timeout]])
在get和set的時候,都沒有明確的超時設置參數。
libmemcached客戶端:在php介面沒有明顯的超時參數。
說明:所以說,在PHP中訪問Memcached是存在很多問題的,需要自己hack部分操作,或者是參考網上補丁。
[C&C++訪問Memcached]
客戶端:libmemcached客戶端
說明:memcache超時配置可以配置小點,比如5,10個毫秒已經夠用了,超過這個時間還不如從資料庫查詢。
下面是一個連接和讀取set數據的超時的C++示例:
復制代碼 代碼如下:

//創建連接超時(連接到Memcached)
memcached_st*MemCacheProxy::_create_handle()
{
memcached_st*mmc=NULL;
memcached_return_tprc;
if(_mpool!=NULL){//getfrompool
mmc=memcached_pool_pop(_mpool,false,&prc);
if(mmc==NULL){
__LOG_WARNING__("MemCacheProxy","gethandlefrompoolerror[%d]",(int)prc);
}
returnmmc;
}
memcached_st*handle=memcached_create(NULL);
if(handle==NULL){
__LOG_WARNING__("MemCacheProxy","create_handleerror");
returnNULL;
}
//設置連接/讀取超時
memcached_behavior_set(handle,MEMCACHED_BEHAVIOR_HASH,MEMCACHED_HASH_DEFAULT);
memcached_behavior_set(handle,MEMCACHED_BEHAVIOR_NO_BLOCK,_noblock);//參數MEMCACHED_BEHAVIOR_NO_BLOCK為1使超時配置生效,不設置超時會不生效,關鍵時候會悲劇的,容易引起雪崩
memcached_behavior_set(handle,MEMCACHED_BEHAVIOR_CONNECT_TIMEOUT,_connect_timeout);//連接超時
memcached_behavior_set(handle,MEMCACHED_BEHAVIOR_RCV_TIMEOUT,_read_timeout);//讀超時
memcached_behavior_set(handle,MEMCACHED_BEHAVIOR_SND_TIMEOUT,_send_timeout);//寫超時
memcached_behavior_set(handle,MEMCACHED_BEHAVIOR_POLL_TIMEOUT,_poll_timeout);
//設置一致hash
//memcached_behavior_set_distribution(handle,MEMCACHED_DISTRIBUTION_CONSISTENT);
memcached_behavior_set(handle,MEMCACHED_BEHAVIOR_DISTRIBUTION,MEMCACHED_DISTRIBUTION_CONSISTENT);
memcached_returnrc;
for(uinti=0;i<_server_count;i++){
rc=memcached_server_add(handle,_ips[i],_ports[i]);
if(MEMCACHED_SUCCESS!=rc){
__LOG_WARNING__("MemCacheProxy","addserver[%s:%d]failed.",_ips[i],_ports[i]);
}
}
_mpool=memcached_pool_create(handle,_min_connect,_max_connect);
if(_mpool==NULL){
__LOG_WARNING__("MemCacheProxy","create_poolerror");
returnNULL;
}
mmc=memcached_pool_pop(_mpool,false,&prc);
if(mmc==NULL){
__LOG_WARNING__("MyMemCacheProxy","gethandlefrompoolerror[%d]",(int)prc);
}
//__LOG_DEBUG__("MemCacheProxy","gethandle[%p]",handle);
returnmmc;
}
//設置一個key超時(set一個數據到memcached)
boolMemCacheProxy::_add(memcached_st*handle,unsignedint*key,constchar*value,intlen,unsignedinttimeout)
{
memcached_returnrc;
chartmp[1024];
snprintf(tmp,sizeof(tmp),"%u#%u",key[0],key[1]);
//有個timeout值
rc=memcached_set(handle,tmp,strlen(tmp),(char*)value,len,timeout,0);
if(MEMCACHED_SUCCESS!=rc){
returnfalse;
}
returntrue;
}

//Memcache讀取數據超時(沒有設置)
libmemcahed源碼中介面定義:
LIBMEMCACHED_APIchar*memcached_get(memcached_st*ptr,constchar*key,size_tkey_length,size_t*value_length,uint32_t*flags,memcached_return_t*error);
LIBMEMCACHED_APImemcached_return_tmemcached_mget(memcached_st*ptr,constchar*const*keys,constsize_t*key_length,size_tnumber_of_keys);
從介面中可以看出在讀取數據的時候,是沒有超時設置的。
延伸閱讀:

【如何實現超時】
程序中需要有超時這種功能,比如你單獨訪問一個後端Socket模塊,Socket模塊不屬於我們上面描述的任何一種的時候,它的協議也是私有的,那麼這個時候可能需要自己去實現一些超時處理策略,這個時候就需要一些處理代碼了。
[PHP中超時實現]
一、初級:最簡單的超時實現 (秒級超時)
思路很簡單:鏈接一個後端,然後設置為非阻塞模式,如果沒有連接上就一直循環,判斷當前時間和超時時間之間的差異。
phpsocket中實現原始的超時:(每次循環都當前時間去減,性能會很差,cpu佔用會較高)
復制代碼 代碼如下:

<?
$host="127.0.0.1";
$port="80";
$timeout=15;//timeoutinseconds
$socket=socket_create(AF_INET,SOCK_STREAM,SOL_TCP)
ordie("Unabletocreatesocketn");
socket_set_nonblock($socket) //務必設置為阻塞模式
ordie("Unabletosetnonblockonsocketn");
$time=time();
//循環的時候每次都減去相應值
while(!@socket_connect($socket,$host,$port))//如果沒有連接上就一直死循環
{
$err=socket_last_error($socket);
if($err==115||$err==114)
{
if((time()-$time)>=$timeout)//每次都需要去判斷一下是否超時了
{
socket_close($socket);
die("Connectiontimedout.n");
}
sleep(1);
continue;
}
die(socket_strerror($err)."n");
}
socket_set_block($this->socket)//還原阻塞模式
ordie("Unabletosetblockonsocketn");
?>

二、升級:使用PHP自帶非同步IO去實現(毫秒級超時)
說明:
非同步IO:非同步IO的概念和同步IO相對。當一個非同步過程調用發出後,調用者不能立刻得到結果。實際處理這個調用的部件在完成後,通過狀態、通知和回調來通知調用者。非同步IO將比特分成小組進行傳送,小組可以是8位的1個字元或更長。發送方可以在任何時刻發送這些比特組,而接收方從不知道它們會在什麼時候到達。
多路復用:復用模型是對多個IO操作進行檢測,返回可操作集合,這樣就可以對其進行操作了。這樣就避免了阻塞IO不能隨時處理各個IO和非阻塞佔用系統資源的確定。
使用socket_select()實現超時
socket_select(...,floor($timeout),ceil($timeout*1000000));
select的特點:能夠設置到微秒級別的超時!
使用socket_select()的超時代碼(需要了解一些非同步IO編程的知識去理解)
復制代碼 代碼如下:

編程 調用類 編程#
<?php
$server=newServer;
$client=newClient;
for(;;){
foreach($select->can_read(0)as$socket){
if($socket==$client->socket){
//NewClientSocket
$select->add(socket_accept($client->socket));
}
else{
//there'ssomethingtoreadon$socket
}
}
}
?>
編程 非同步多路復用IO & 超時連接處理類 編程
<?php
classselect{
var$sockets;
functionselect($sockets){
$this->sockets=array();
foreach($socketsas$socket){
$this->add($socket);
}
}
functionadd($add_socket){
array_push($this->sockets,$add_socket);
}
functionremove($remove_socket){
$sockets=array();
foreach($this->socketsas$socket){
if($remove_socket!=$socket)
$sockets[]=$socket;
}
$this->sockets=$sockets;
}
functioncan_read($timeout){
$read=$this->sockets;
socket_select($read,$write=NULL,$except=NULL,$timeout);
return$read;
}
functioncan_write($timeout){
$write=$this->sockets;
socket_select($read=NULL,$write,$except=NULL,$timeout);
return$write;
}
}
?>

[C&C++中超時實現]
一般在LinuxC/C++中,可以使用:alarm()設置定時器的方式實現秒級超時,或者:select()、poll()、epoll()之類的非同步復用IO實現毫秒級超時。也可以使用二次封裝的非同步io庫(libevent,libev)也能實現。
一、使用alarm中用信號實現超時 (秒級超時)
說明:Linux內核connect超時通常為75秒,我們可以設置更小的時間如10秒來提前從connect中返回。這里用使用信號處理機制,調用alarm,超時後產生SIGALRM信號(也可使用select實現)
用alarym秒級實現connect設置超時代碼示例:
復制代碼 代碼如下:

//信號處理函數
staticvoidconnect_alarm(intsigno)
{
debug_printf("SignalHandler");
return;
}
//alarm超時連接實現
staticvoidconn_alarm()
{
Sigfunc*sigfunc;//現有信號處理函數
sigfunc=signal(SIGALRM,connect_alarm);//建立信號處理函數connect_alarm,(如果有)保存現有的信號處理函數
inttimeout=5;
//設置鬧鍾
if(alarm(timeout)!=0){
//...鬧鍾已經設置處理
}
//進行連接操作
if(connect(m_Socket,(structsockaddr*)&addr,sizeof(addr))<0){
if(errno==EINTR){//如果錯誤號設置為EINTR,說明超時中斷了
debug_printf("Timeout");

㈥ 在Linux環境下,APACHE和PHP配置文件怎麼設置(RPM包)

LAMP配置與應用 LAMP(Linux+Apache+Mysql+Php)配置:

Fedora 5已默認安裝了php,可以使用rmp -q php查看其版本號
安裝mysql客戶端mysql(與perl-DBI包有依賴關系,要先安裝)
安裝mysql服務端mysql-server(與perl-DBD包有依賴關系,要先安裝)
安裝php支持mysql的模塊php-mysql(與php-pdo包有依賴關系,要先安裝)
Mysql的web管理工具phpMyAdmin
安裝
下載並解壓phpMyAdmin的包到某個web目錄(或為phpMyadmin建立虛擬主機,將該包解壓到虛擬主機目錄)
#tar -xzvf phpMyAdmin-2.10.0.2-all-languages.tar.gz
執行下列命令:
#cd phpMyAdmin
#mkdir config #建立一個用來保存配置的目錄
#chmod o+rw config #更改該目錄的許可權為屬主可讀寫
#cp config.sample.inc.php config/ #將當前目錄下的config.sample.inc.php復制到config
#chmod o+w config/config.inc.php # 使該文件的屬主具有寫許可權
運行安裝向導頁面
在瀏覽器中打開scripts/setup.php,按照向導頁面添入相關信息,最後單擊「保存」,則所做的配置保存在config/config.inc.php中。(註:如果config子目錄沒有建立,或沒有對該文件的寫許可權的話,則會出現"Cannot load or save configuration."的提示,這種情況下應選擇「DownLoad」下載到本地,再上傳到phpMyAdmin的主目錄下 ),主要有以下樣目需要添寫:
User for config auth__________________
Password for config auth__________________
phpMyAdmin control user____________________
phpMyAdmin control user password______________________
phpMyAdmin database for advanced features__________________
配置成功保存的話,執行下面命令
#mv config/config.inc.php . #將配置文件移動到phpMyAdmin的主目錄
#chmod o-r config.inc.php #為安全起見,移去該文件的讀寫許可權
在瀏覽器中打開phpMyAdmin對應的站點
phpbb應用
註:以下頭3步有關mysql的操作也可以在webmin中完成.
mysql的賬號管理
1) 要設置root用戶的密碼為123456,則在系統提示符下執行下面的命令:
#mysqladmin -u root -p password "123456"
2) 要在mysql命令行客戶端,設置root用戶的密碼為123456,則需執行以下命令:
mysql> use mysql;
mysql> update user set Password=password('123456') where User='root';
mysql> flush privileges;
3) 如果要新增用戶u1,給他授予對資料庫bb中所有表(*)的所有許可權(all),密碼設為888888,則在mysql提示符下:
mysql> grant all on bb.* to 'u1'@'localhost' identified by '888888';
如果root用戶有密碼,則進入mysql客戶端需用下面的命令:#mysql -u root -p
新建phpbb論壇所要用到的資料庫:mysql>create database XXX;
為phpbb所在目錄新建虛擬主機
在瀏覽器中訪問該虛擬主機,以安裝phpbb
注意:在安裝結尾,選擇下載配置文件,自行上傳.然後刪除install,contrib兩個目錄
php配置實例

1.使用Apache配置基本的web站點,使客戶端瀏覽簡體中文網頁能正常顯示、新增支持的主頁文件index.htm index.php default.htm default.html。最後要能在其它計算機上通過域名訪問,比如www.yyy.net03.org。

2.在web站點下實現虛擬目錄,即web站點的子目錄,該子目錄與主目錄不一定是上下目錄關系.同時,允許該目錄有目錄列表功能(即在沒有找到主文件件的時候,顯示當前目錄下的列表).
3.實現Linux用戶個人站點.

4.配置多個基於名稱的虛擬主機,比如www1.yyy.net03.org,www2.yyy.net03.org。最後要能在其它計算機上通過域名訪問。

5.配置多個基於IP的虛擬主機,比如lit.yyy.net03.org,mil.yyy.net03.org。最後要能在其它計算機上通過域名訪問。

6.配置LAMP環境

7.配置phpbb論壇,並使該論壇可以通過形如bbs.yyy.net03.org的形式訪問。
(*)8. 刪除系統原有Apache、php、Mysql項目,使用源文件安裝最新版本的Apache、php、Mysql
利用源代碼安裝LAMP
首先要在相關網站獲取Apache、Mysql、Php的源碼包,一般擴展名為xxx.tar.gz.
刪除系統原有Apache、php、Mysql項目,可能要用到下面的命令
# rpm -e xxx
# rpm -e xxx nodeps #不考慮依賴關系而刪除xxx包
# rpm -e xxx yyy zzz #刪除xxx,yyy,zzz包
如果無法刪除一個RPM包,可以使用以下兩步:
#rpm -f /var/lib/rpm
#rpm --rebuilddb
或:
#rpm -ivh --justdb xxx
#rpm -e xxx
1. 安裝Apache(httpd-2.2.8)

# ./configure --enable-so
# make
# make install
# /usr/local/apache2/bin/apachectl start

2. 安裝Mysql(Mysql-5.0.22)
1) 建立用戶及組,如果在/etc/passwd中已有該用戶,則下列操作可以省略
shell> groupadd mysql
shell> useradd -g mysql mysql
2) 解壓、配置編譯安裝
shell> gunzip < mysql-VERSION.tar.gz | tar -xvf -
shell> cd mysql-VERSION
shell> ./configure --prefix=/usr/local/mysql #配置(指定mysql安裝路徑)
shell> make #編譯
shell> make install #安裝
3) 配置mysql
shell> cp support-files/my-medium.cnf /etc/my.cnf #建立mysql配置文件
shell> cp support-files/mysql.server /etc/init.d/ #建立mysql控制腳本
shell> cd /usr/local/mysql
shell> bin/mysql_install_db --user=mysql #建立mysql系統資料庫
shell> chown -R root . #更改當前目錄及子目錄所有者
shell> chown -R mysql var #更改var目錄及子目錄所有者
shell> chgrp -R mysql . #更改當前目錄及子目錄所屬組
4) 啟動mysql
shell> bin/mysqld_safe --user=mysql & #以後台模式運行mysqld服務
shell> chkconfig --list | less #查看服務列表
shell> chkconfig --add mysql.server #將mysql.server添加到服務列表
shell> chkconfig --list | less #查看服務列表
shell> service mysql.server restart
shell> /usr/local/mysql/bin/mysqladmin -u root -p password '888888' #更改mysql管理用戶root的密碼
3. 安裝php(php5 on Apache 2 Shared Mole Version)
1) tar -zxvf php-NN.tar

2) cd php-NN

3) ./configure --with-apxs2=/usr/local/apache2/bin/apxs --with-mysql=/usr/local/mysql

4) make
5) make install

6) 建立php配置文件php.ini

# cp php.ini-dist /usr/local/lib/php.ini

7) 編輯http配置文件 httpd.conf 使之載入PHP模塊

對於 PHP 4,添加下句:

LoadMole php4_mole moles/libphp4.so

對於 PHP 5,添加下句:

LoadMole php5_mole moles/libphp5.so

8) 編輯http配置文件 httpd.conf,使之能解析擴展名為php的文件

AddType application/x-httpd-php .php .phtml

9) 編輯http配置文件 httpd.conf,修改主頁文件
DirectoryIndex index.php index.htm index.html
10) 重啟httpd服務
# /usr/local/apache2/bin/apachectl start

# /usr/local/apache/bin/apachectl -k start
11) 編輯index.php文件,並在瀏覽器中訪問該站點,如果出現關於php的當前配置信息(其中有mysql的配置項),表示LAMP安裝成功。
$vi index.php
<?php
phpinfo()
?>

㈦ Apache測試安裝時,卻顯示下載頁面

配置有問題,沒有解析出php文件。

㈧ 如何查看linux系統中linux,apache,nginx,mysql,php版本

版本的單詞version,簡寫v。

apache

root@ubuntu:~#apachectl-v
Serverversion:Apache/2.4.7(Ubuntu)
Serverbuilt:Jul15201615:34:04

nginx

root@ubuntu:~#nginx-v
nginxversion:nginx/1.4.6(Ubuntu)

php

root@ubuntu:~#php-v
PHP5.5.9-1ubuntu4.19(cli)(built:Jul28201619:31:33)
Copyright(c)1997-2014ThePHPGroup
ZendEnginev2.5.0,Copyright(c)1998-2014ZendTechnologies
withZendOPcachev7.0.3,Copyright(c)1999-2014,byZendTechnologies

如果是編譯安裝,需定義環境變數。

㈨ 最新版本Apache+PHP+MySQL的問題

你要干什麼你沒說清楚啊???這個+來+去這個我用了,可能沒弄好出了問題,後來我分開各是各下載的,我用IIS架論壇,成功了,文件上傳最大上限也改到了1G,哪裡都能用了。如果你要架論壇,加我Q383149736我發動畫教程給你.
找了個文章你研究了
Apache是免費的開放源代碼的性能優良的HTTP伺服器,現在全世界超過60%的HTTP伺服器在使用Apache.你可以從Apache的網站_blank>http://httpd.apache.org/download.cgi下載Apache的安裝文件.我這里使用的是目前最新版本Apache V2.0.50 for Windows。

我在安裝時先把IIS刪除了。下面我們來安裝Apache。Apache的安裝非常簡單,選擇接受許可協議後進入伺服器信息配置界面,在第一欄"Network Domain"填寫已經申請到域名或本機的IP地址。
第二欄是伺服器名,填入完整的域名或IP地址。最後一欄是管理員Email地址。填寫好後,點擊"Next"進入下一步。選擇"Typical"典型安裝,再點擊下一步,選擇安裝目錄,默認安裝目錄是系統盤的Program Files/Apache Group目錄,我們這里選擇把apache安裝在C:/.點擊"Next"再單擊"Install"進行安裝.安裝完成後,在開始菜單的Apache HTTP Server 2.0.50菜單中可以看到五個選項,現在點擊"Control Apache Server"目錄下的"Start"啟動伺服器。可以看到系統狀態欄里出現Apache的羽毛狀圖標並帶有綠色箭頭,說明伺服器啟動成功。打開瀏覽器,輸入127.0.0.1,如果安裝正確的話你就能看到Apache的測試頁面了! 歡迎使用DedeCms

下面我們就要配置Apache了,單擊開始菜單中Apache目錄下的"Configure Apache Server"中的"Edit the Apache httpd.conf Configuration File",便可以打開Apache的配置文件。關於Apache的詳細配置大家可以看一下Apache伺服器的配置教程,在這里我就不細說了。

(1)Apache2 雷傲極酷超級論壇LeoBBS X 簡體正式版
我們這次還是安裝LeoBBSX,下面我來介紹如何配置Apache使其支持CGI.要讓Apache支持CGI還需安裝ActivePerl,我們還是把它安裝在「C:\usr」,然後將LeoBBSX源代碼解壓到c:\Apache2\htdocs\LeoBBS下。Apache配置文件中需要改動的地方有:
找到AddDefaultCharset一行,將它後面的內容改為GB2312(建議使用記事本的查找工具Ctrl F).
找到DocumentRoot "C:/Apache2/htdocs"改為DocumentRoot "C:/Apache2/htdocs/LeoBBS/cgi-bin"
找到ScriptAlias /cgi-bin/ "C:/Apache2/cgi-bin/"這一行,將其改為ScriptAlias /cgi-bin/ "C:/Apache2/htdocs/LeoBBS/cgi-bin"在它下面不遠處<Directory "C:/Apache2/cgi-bin">改為<Directory "C:/Apache2/htdocs/LeoBBS/cgi-bin">再將Options None改為Options ExecCGI
織夢好,好織夢

找到DirectoryIndex然後添加install.cgi,找到AddHandler cgi-script .cgi去掉它前面的#,還可以添加程序擴展名.pl。然後單擊開始菜單中Apache目錄下的"Control Apache Server"中的"Restart"重起Apache.
好了這次我們在瀏覽器中瀏覽127.0.0.1就可以看到LeoBBS的安裝頁面了!但是發現圖像文件(non-cgi) URL路徑不對,不過沒關系,我們把LeoBBS下的non-cgi文件加拖入cgi-bin文件加中就OK了!填好安裝頁面後,我們再次進入配置文件,把剛才在DirectoryIndex這一行我們添加的install.cgi改為index.cgi,重起Apache,在瀏覽器中輸入127.0.0.1就可以看到LeoBBS了!

(2)Apache2 CTB1.73
配置過程如下:
1、安裝apache_2.0.50至C:\Apache2

2、解壓php-5.0至C:\php5

3、將php5目錄下面的php5ts.dll拷貝到C:\WINNT\system32目錄里。

4、修改apache_2.0.50的配置文件
將AddDefaultCharset iso-8859-1修改為AddDefaultCharset gb2312
添加 LoadMole php5_mole C:/php5/php5apache2.dll
AddType application/x-httpd-php .php

5、將C:\php5\libmysql.dll和C:\php5\ext\php_mysql.dll拷貝到WINNT\system32目錄里。
織夢CMS

6、將C:\php5\php.ini-dist改名為php.ini
編輯php.ini,將;extension=php_mysql.dll前面的;去掉。將safe_mode = Off修改為safe_mode = On。
將;default_charset = "iso-8859-1"修改為default_charset = "gb2312" 。
建立文件夾C:\php5\tmp,將extension_dir = "./"修改為extension_dir= "C:/php5/ext" 。

7、配置php5支持gd庫。將C:\php5\ext\php_gd2.dll文件拷貝到WINNT\system32目錄里。修改php.ini,將;extension=php_gd2.dll前面的;去掉。將php.ini拷貝到WINNT目錄下,然後重新啟動apache。

這下Apache不但支持了最新的PHP5還可以支持mySQL了。雖然CTB1.73不用任何資料庫支持,但是這是為了我們還可以利用這個環境安裝像紫銅論壇這樣的需要mySQL支持的論壇了。

我們解壓CTB源代碼到c:\Apache2\htdocs\CTB下,修改apache_2.0.50的配置文件,找到DocumentRoot "C:/Apache2/htdocs"改為DocumentRoot "C:/Apache2/htdocs/CTB",找到DirectoryIndex在它後面添加index.php,重起Apache,在瀏覽器中輸入127.0.0.1我們是不是又看到漂亮的CTB論壇了!

㈩ centos6.5 php5.6已經綁定了httpd2.2怎樣換httpd2.4

目錄(?)[-]
一卸載系統自帶Apache
1准備工作
2安裝Apache24
3將Apache添加成httpd服務並開機自啟動
二安裝PHP5615
1 源代碼安裝PHP
2修改PHP的配置文件phpini
3修改Apache配置文件httpdconf相關修改以支持PHP4使用小技巧
三防火牆的管理
可能立刻會有人要問:為啥不裝MySQL,這是因為本次項目准備購買雲RDS,所以就不在系統中自己安裝MySql了。
言歸正傳,開始安裝系統。
一,卸載系統自帶Apache
首先我個人覺得應該要卸載掉系統中自帶的apache軟體:
首先我們檢查系統中是否已經安裝了httpd服務:
root@server ~]# rpm -qa|grephttpd
httpd-2.2.3-11.el5_2.centos.4
httpd-manual-2.2.3-11.el5_2.centos.4
說明:rpm –qa | grep mysql 命令是為了把mysql相關的包都列出來,我上面的例子是Linux默認安裝apache的rpm軟體包列表,如果是別的Linux版本列出來的列表有可能會不一樣,不過不用擔心,不管是什麼,卸載都從最下面的一個包開始,直到卸載掉第一個為止。
比如:在這個例子中,我們應該先卸載httpd-manual-2.2.3-11.el5_2.centos.4方法如下:
rpm –ehttpd-manual-2.2.3-11.el5_2.centos.4如果卸載不掉,則會顯示軟體的依賴關系,則可以刪除掉依賴的軟體,然後再來卸載當前軟體包。
如果實在覺得依賴軟體的關系鏈太長太復雜,則可以強行刪除,添加—nodeps參數即可,指令如下:
rpm –ehttpd-manual-2.2.3-11.el5_2.centos.4 --nodeps個人觀點:刪除掉自帶的apache對於今後確認apache出現的問題有好處。
1.1,准備工作
首先要下載所需軟體的源碼包,有如下這些:
apr-1.5.2.tar.gz
apr-util-1.5.4.tar.gz
pcre-8.36.tar.gz
httpd-2.4.17.tar.gz
PHP-5.6.15.tar.gz
把所有的源碼包上傳到伺服器上。
1.2,安裝Apache2.4
首先要安裝Apache的依賴庫
apr-1.5.2.tar.gz
apr-util-1.5.4.tar.gz
pcre-8.36.tar.gz
tar zxvf apr-1.5.2.tar.gz
cd apr-1.5.2
./configure--prefix=/usr/local/apr
make && make install
tar zxvfapr-util-1.5.4.tar.gz
cd apr-util-1.5.4
./configure--prefix=/usr/local/apr-util --with-apr=/usr/local/aprmake && make install
tar zxvf pcre-8.36.tar.gz
cd pcre-8.36
./configure --prefix=/usr/local/pcre--with-apr-util=/usr/local/apr-util --with-apr=/usr/local/aprmake && make install
安裝PCRE的時候遇到如下錯誤:
You need a C++ compiler forC++ support
解決方案是:
yum install -y gcc gcc-c++
注意:這個-y千萬不能少。
可以開始安裝Apache了,
壓縮
cd httpd-2.4.17
./configure--prefix=/usr/local/apache2 --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util--with-pcre=/usr/local/pcre --enable-so --enable-rewritemake && make install
注意:之前安裝的時候從windows上復制的./configure配置參數,結果中間不知為何多出來一些換行符,導致運行結果出錯了,所以大家拷貝指令的時候一定要小心。
【報錯】/usr/bin/ld: cannotfind -l*
主要的原因是庫文件並沒有導入的ld檢索目錄中比如說我就遇到了如下兩個錯誤:
/usr/bin/ld: cannot find -lssl
/usr/bin/ld: cannot find -lcrypto
這兩個錯誤就表示:libssl.so和libcrypto.so這兩個文件並不在ld檢索的目錄下面。
這兩個so文件經過查找,其實就在/usr/local/ssl/lib文件夾下面,並且/usr/local/ssl/lib也已經存在於ld的配置文件中:/etc/ld.so.conf文件。但是就是沒有起作用。
我的解決方案是:我沒有去學習ld的工作機制,我在ld默認的Lib檢查目錄之一的/usr/local/lib中增加了以上兩個so文件的外鏈,指令如下:
cd /usr/local/lib
ln -sv/usr/local/ssl/lib/libssl.so libssl.soln -sv/usr/local/ssl/lib/libcrypto.so libcrypto.so這樣的話,apahce的報錯問題就解決了。
1.3,將Apache添加成httpd服務並開機自啟動
如果沒有httpd 服務的時候,每次啟動都要運行如下指令:
/usr/local/apache/bin/apachectl start
好難受的說,下面就將httpd裝到服務中,同理也可以用到其他服務的操作。
1.將apachectl文件一分到/etc/rc.d/init.d中,然後再/etc/rc.d/rc5.d中加入鏈接。
其中init.d中的腳本就相當於window中的注冊表,在系統啟動的時候某些指定的腳本被執行。而rc5.d就和rc3.d差不多吧。也都是一些腳本只是執行級別不同。
命令如下:
cp/usr/local/apache/bin/apachectl /etc/init.d/httpdln -s /etc/init.d/httpd/etc/rc.d/rc5.d/S85httpd2.運行chkconfig --list 發現列表中沒有httpd,通過chkconfig --add httpd來添加,可能會提示httpd服務不支持chkconfig,需要編輯/etc/rc.d/init.d/httpd在第二行添加以下注視信息:
# chkconfig: 345 85 15
# description:Activates/Deactivates Apache Web Server345代表哪些linux級別需要啟動httpd,啟動序號是85,關閉序號是15。
保存以後執行 chkconfig --addhttpd 添加成功3.運行chkconfig --list httpd 基本就存在了。然後就可以用了。service httpd start 和 service httpd stop二,安裝PHP5.6.15
2.1 源代碼安裝PHP
解壓縮
Cd php-5.6.15
配置參數太復雜於是去網上找了一個大牛的推薦,如下:
./configure--prefix=/usr/local/php--with-apxs2=/usr/local/apache2/bin/apxs--with-libxml-dir=/usr/include/libxml2 --with-config-file-path=/usr/local/apache2/conf--with-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config--with-gd--enable-gd-native-ttf --with-zlib--with-mcrypt--with-pdo-mysql=/usr/local/mysql --enable-shmop --enable-soap--enable-sockets--enable-wddx --enable-zip --with-xmlrpc --enable-fpm--enable-mbstring--with-zlib-dir --with-bz2 --with-curl --enable-exif--enable-ftp--with-jpeg-dir=/usr/lib --with-png-dir=/usr/lib--with-freetype-dir=/usr/lib/於是乎遇到了一系列的報錯,推薦我之前的一篇文章介紹了常見錯誤的解決辦法:
http://blog.csdn.NET/dodott/article/details/49664379我遇到的問題如下:
【報錯】configure errorxml2-config not found. please check your libxml2 installation解決方案:
Centos: yum install libxml2
yum install libxml2-devel -y
【報錯】Configure: error:Please reinstall the BZip2 distribution解決方案:
centos: yum install bzip2bzip2-devel
debian: apt-get installbzip2-devel
【報錯】
configure: error: Pleasereinstall the libcurl distribution -easy.h should bein<curl-dir>/include/curl/解決方案:
centos: yum install curlcurl-devel (For Redhat & Fedora)【報錯】
configure: error: mcrypt.hnot found. Please reinstalllibmcrypt.
解決方案:
網上大部分給的方法是使用如下指令
yum install libmcryptlibmcrypt-devel (For Redhat & Fedora)但是基本上都沒有作用,系統甚至會提示:nothingto do。估計可能和YUM源的軟體版本太低有關系。
正確做法是自己下載源碼來安裝:
libmcrypt-2.5.7.tar.gz
cd libmcrypt-2.5.7
#編譯(默認安裝到/usr/local/lib/)
./configure--prefix=/usr/local/libmcrypt
#執行安裝
make && make install
注意:這里的安裝路徑要記住,等會安裝PHP的時候會用到。
繼續回到PHP的安裝,此時的配置參數修改為:
./configure--prefix=/usr/local/php--with-apxs2=/usr/local/apache2/bin/apxs--with-libxml-dir=/usr/include/libxml2--with-config-file-path=/usr/local/apache2/conf--with-mysql=/usr/local/mysql--with-mysqli=/usr/local/mysql/bin/mysql_config--with-gd --enable-gd-native-ttf--with-zlib --with-pdo-mysql=/usr/local/mysql--enable-shmop --enable-soap--enable-sockets --enable-wddx --enable-zip--with-xmlrpc --enable-fpm--enable-mbstring --with-zlib-dir --with-bz2--with-curl --enable-exif--enable-ftp --with-jpeg-dir=/usr/lib --with-png-dir=/usr/lib--with-freetype-dir=/usr/lib/--with-mcrypt=/usr/local/libmcrypt修改內容是:
去掉了--with-mcrypt,在最後增加了--with-mcrypt=/usr/local/libmcrypt【報錯】configure: error:libjpeg.(a|so) not foundconfigure: error: png.h not found.
解決方法:
關於jpeg的問題,安裝如下軟體包
yum -y install libjpeg-devel
關於png的問題,安裝如下軟體包
yum -y install libpng-devel
【報錯】
configure: error: Cannot findMySQL header files under/usr/local/mysql.
Note that the MySQL clientlibrary is not bundled anymore!
這個問題是因為沒有安裝mysql,所以找不到mysql的運行庫。
但是本次安裝本身就不想安裝完整的mysql軟體,去php官網查了資料後找到如下一段翻譯文字:
「對於 php-5.3.0或更新版本,mysqli 默認使用Mysql Native Driver作為驅動。 這個驅動比libmysql會有一些優勢, --with-mysql=mysqlnd」
最終configure參數修改為:
./configure--prefix=/usr/local/php --with-apxs2=/usr/local/apache2/bin/apxs--with-libxml-dir=/usr/include/libxml2--with-config-file-path=/usr/local/apache2/conf --with-mysql=mysqlnd--with-mysqli=mysqlnd --with-gd --enable-gd-native-ttf --with-zlib--with-pdo-mysql=mysqlnd --enable-shmop --enable-soap --enable-sockets--enable-wddx --enable-zip --with-xmlrpc --enable-fpm --enable-mbstring --with-zlib-dir --with-bz2 --with-curl--enable-exif --enable-ftp --with-jpeg-dir=/usr/lib --with-png-dir=/usr/lib--with-freetype-dir=/usr/lib/ --with-mcrypt=/usr/local/libmcrypt注意:上面紅色標記出來的目錄就是後面php.ini需要放置的目錄。
到此終於把PHP的configure成功通過。
make 和 makeinstall。PHP安裝完畢。
2.2,修改PHP的配置文件php.ini
進入php源碼目錄,選擇php.ini-development復制一份到/usr/local/apache2/conf,並改名為php.ini使用vi打開,查找extension_dir,修改為extension_dir = "/usr/local/php/lib/php/extensions/no-debug-zts-20131226",讀者根據自己的PHP安裝目錄結構配置,目的是找到PHP的擴展庫。
查找extension=php_,去掉extension=php_curl.dll,extension=php_gd2.dll,extension=php_mbstring.dll,extension=php_mysql.dll,extension=php_mysqli.dll,extension=php_pdo_mysql.dll,extension=php_xmlrpc.dll前面 的分號。查找short_open_tag= Off把它修改成short_open_tag = On,讓其支持短標簽(我看注釋這個默認是打開的)。
從別人的伺服器上我還拷貝了如下文件放到
/usr/local/php/lib/php/extensions/no-debug-zts-20131226目錄,文件如下:
Imap.so
Mcrypt.so
Memcache.so
Openssl.so
Zip.so
然後在php.ini的最後增加如下配置文字:
extension=memcache.so
extension=openssl.so
extension=mcrypt.so
extension=zip.so
2.3,修改Apache配置文件httpd.conf相關修改以支持PHPvi/usr/local/apache/conf/httpd.conf
? 添加php支持。
【添加欄位一】
AddTypeapplication/x-httpd-php .php .phtmlAddType application/x-httpd-php-source.phps【添加欄位二】
<FilesMatch \.php$>
SetHandlerapplication/x-httpd-php
</FilesMatch>
? 添加默認索引頁面index.php,再找到「DirectoryIndex」,在index.html後面加上「 index.php」
DirectoryIndex index.htmlindex.php
? 3. 不顯示目錄結構,找到「Options Indexes FollowSymLinks」,修改為Options FollowSymLinks
? 4. 開啟Apache支持偽靜態,找到「AllowOverride None」,修改為AllowOverride All
重啟Apache
service httpd restart
提醒:實在不知道怎麼配置,就找個已經搭建成功的伺服器把配置文件弄過來對比一下。
此時還會遇到如下報錯:
httpd: Could not reliablydetermine the server's fully qualified domain name解決辦法:
linux :/usr/local/apache/conf
用記事本打開httpd.conf
將裡面的#ServerNamelocalhost:80注釋去掉即可。
【報錯】:我也曾經配置成了ServerName127.0.0.1:80,結果區域網其他電腦就沒法訪問了,原因不清楚。
到此,整個Apache+PHP5.6的環境搭建完畢。
2.4,使用小技巧
【查看Apache的版本號】
運行apache安裝目錄下的/bin/httpd -v,具體實踐後的指令是:
#進入apache安裝目錄
#cd /usr/local/apache2/bin
#./httpd -v
Server version: Apache/2.4.17(Unix)
Server built: Feb 23 2016 15:21:50
三,防火牆的管理
1) 重啟後生效
開啟: chkconfig iptables on
關閉: chkconfig iptables off
2) 即時生效,重啟後失效
開啟: service iptables start
關閉: service iptables stop
需要說明的是對於Linux下的其它服務都可以用以上命令執行開啟和關閉操作。

閱讀全文

與phpapacheversion相關的資料

熱點內容
什麼app查車的維修記錄 瀏覽:241
超級7000單詞串聯pdf 瀏覽:160
現在看小電影什麼網站好 瀏覽:969
葉彤倩有聲讀物mp3下載 瀏覽:544
我的世界多線伺服器是什麼意思 瀏覽:989
牛奶春葯1978電影 瀏覽:597
麗水hypermill五軸編程 瀏覽:75
文件夾怎麼讀用英語 瀏覽:772
365影院 瀏覽:644
言情肉文小說下載 瀏覽:168
穿書肉文 瀏覽:590
早期小電影下載軟體 瀏覽:940
學生在老師家裡的韓國電影 瀏覽:774
可以看的網站網址 瀏覽:878
腰壓縮性骨裂痊癒後經常腰痛 瀏覽:957
圖片電影小說 瀏覽:379
php怎麼去面試 瀏覽:142
win7壓縮文件java解壓失敗 瀏覽:901
彼吋曾相伴電影 瀏覽:673
免費美國電影網站網址推薦 瀏覽:602