A. kali無法安裝php5-cgi是怎麼回事
Apache 中的提交了一種利用擴展應用程序執行動態網頁的機制. 稱為Common Gateway Interface (通用網關介面)簡稱CGI.
安裝apache
首先到apache的主頁下載最新版本的apache http server,地址為 http//httpd.apache.org/
本文寫於2006.4.29,apache版本為2.2.0 .如果你也想用這一個版本的話請點擊:http//mirror.vmmatrix.net/apache/httpd/httpd-2.2.0.tar.gz
安裝apache:
切換到httpd-2.2.0.tar.gz所在目錄,然後:
# tar xvzf httpd-2.2.0.tar.gz
此時在該目錄下有一個文件夾 httpd-2.2.0,切換到該文件夾:
# cd ./httpd-2.2.0
我不知道你想把apache安裝到哪個文件夾,我們假定想安裝到 /usr/local/apache2/ 下面,則
輸入下面的命令:
# ./configure --prefix= /usr/local/apache2 (可能遇到 error: APR not found. 請移步到解決error:APR not found 文章)
# make
# make install
執行完這3條命令之後,apache就安裝到你的 /usr/local/apache2目錄下了.
切換到該目錄看看有什麼咚咚吧;)
# cd ./usr/local/apache2
# ls
可以看到裡面有 /bin ,/conf , /htdocs, /cgi-bin 等目錄.此時apache還沒有啟動,我們通過/bin目錄下的工具apachectl來啟動,首先切換到/bin目錄:
# cd ./bin
然後啟動:
# ./apachectl start
這時候在地址欄輸入 http://localhost/ 看看是不是有成功的信息?(筆者看到的是 "It works!") 的信息, 當然不同的版本會不同,根據你 /htdocs 下的index.html內容而定.
把/usr/local/apache2/htdocs/index.html 替換成你的頁面文件就可以了.
到了這里,我們假定你的apache伺服器已經安裝成功.如果還有問題請在網上搜索一下或者聯系我:
lonestep AT gmail D。T com
2, 配置apache使之執行cgi程序
默認下,cgi程序必須放在cgi-bin目錄下,我們先來配置使得cgi-bin下的cgi程序能得到正確執行,
後面將會介紹怎麼讓apache執行放在別的目錄下的cgi程序.
1),承上,我們已經把apache安裝到 /usr/local/apache2 目錄下,切換到/usr/local/apache2/conf 目錄,裡面有一個 httpd.conf 文件, 編輯這個文件:
# cd /usr/local/apache2/conf
# vi httpd.conf (假定你的文本編輯器是vi, 如果你用別的編輯器如emacs, gedit, kedit 之類,把vi 替換成它們的命令即可)
尋找其中一行如:
# ScriptAlias /cgi-bin/ "/usr/local/apache2/cgi-bin/"
把這行前面前面的'#'去掉,然後重新啟動apache :
# cd ./bin (or cd /usr/local/apache2/bin)
# ./apachectl restart
ok, 假如你放了一個cgi程序'test.cgi'到cgi-bin的話,在地址欄
輸入 http://localhost/cgi-bin/test.cgi 看看是否能夠執行>?
如果不能,請發郵件給我:)
2),如果你想改變執行cgi的目錄(不用默認的cgi-bin目錄),則該變剛才的
ScriptAlias /cgi-bin/ "/usr/local/apache2/cgi-bin/" 為:
ScriptAlias /SomeOtherDirectory/ "/usr/local/apache2/cgi-bin/"
然後重新啟動apache.
B. PHP5教程之文件操作
一 引論
在任何計算機設備中 文件是都是必須的對象 而在web編程中 文件的操作一直是web程序員的頭疼的地方 而 文件的操作在cms系統中這是必須的 非常有用的 我們經常遇到生成文件目錄 文件(夾)編輯等操作 現在我把php中的這些函數做一詳細總結並實例示範如何使用 關於對應的函數詳細介紹 請查閱php手冊 此處只總結重點 和需要注意的地方 (這在php手冊是沒有的 )( lian )
二 目錄操作
首先介紹的是一個從目錄讀取的函數 opendir() readdir() closedir() 使用的時候是先打開文件句柄 而後迭代列出:
<?php $base_dir = filelist/ ; $fso = opendir($base_dir); echo $base_dir <hr/> ; while($flist=readdir($fso)){ echo $flist <br/> ; } closedir($fso) ?>
這是講返迴文件目錄下面的文件已經目錄的程序( 文件將返回false)
有時候需要知道目錄的信息 可以使用dirname($path)和basename($path) 分別返迴路徑的目錄部分和文件名名稱部分 可用disk_free_space($path)返回看空間空餘空間
創建命令:
mkdir($path )
是許可權碼 在非window下可用umask()函數設置
rmdir($path)
將刪除路徑在$path的文件
dir directory 類也是操作文件目錄的重要類 有 個方法 read rewind close 這是一個仿面向對象的類 它先使用的是打開文件句柄 然後用指針的方式讀取的 這里看php手冊:
<?php$d = dir( /etc/php );echo Handle: $d >handle /n ;echo Path: $d >path /n ;while (false !== ($entry = $d >read())) { echo $entry /n ;}$d >close();?>
輸出:
Handle: Resource id # Path: /etc/php apachecgicli
文件的屬性也非常重要 文件屬性包括創建時間 最後修改時間 所有者 文件組 類型 大小等
下面我們重點談文件操作
三 文件操作
A 讀文件
首先是一個文件看能不能讀取(許可權問題) 或者存在不 我們可以用is_readable函數獲取信息
<?php$file = dirlist php ;if (is_readable($file) == false) { die( 文件不存在或者無法讀取 );} else { echo 存在 ;}?>
判斷文件存在的函數還有file_exists(下面演示) 但是這個顯然無is_readable全面 當一個文件存在的話可以用
<?php$file = filelist php ;if (file_exists($file) == false) { die( 文件不存在 );}$data = file_get_contents($file);echo entities($data);?>
但是file_get_contents函數在較低版本上不支持 可以先創建文件的一個句柄 然後用指針讀取全部:
$fso = fopen($cacheFile r ); $data = fread($fso filesize($cacheFile)); fclose($fso);
還有一種方式 可以讀取二進制的文件:
$data = implode( file($file));
B 寫文件
和讀取文件的方式一樣 先看看是不是能寫:
<?php$file = dirlist php ;if (is_writable($file) == false) { die( 我是雞毛 我不能 );}?>
能寫了的話可以使用file_put_contents函數寫入:
<?php $file = dirlist php ; if (is_writable($file) == false) { die( 我是雞毛 我不能 ); } $data = 我是可鄙 我想要 ; file_put_contents ($file $data); ?>
file_put_contents函數在php 中新引進的函數(不知道存在的話用function_exists函數先判斷一下)低版本的php無法使用 可以使用如下方式:
$f = fopen($file w ); fwrite($f $data); fclose($f);
替換之
寫文件的時候有時候需要鎖定 然後寫:
function cache_page($pageurl $pagedata){ if(!$fso=fopen($pageurl w )){ $this >warns( 無法打開緩存文件 );//trigger_error return false; } if(!flock($fso LOCK_EX)){//LOCK_NB 排它型鎖定 $this >warns( 無法鎖定緩存文件 );//trigger_error return false; } if(!fwrite($fso $pagedata)){//寫入位元組流 serialize寫入其他格式 $this >warns( 無法寫入緩存文件 );//trigger_error return false; } flock($fso LOCK_UN);//釋放鎖定 fclose($fso); return true; }
C 復制 刪除文件
php刪除文件非常easy 用unlink函數簡單操作:
<?php $file = dirlist php ; $result = @unlink ($file); if ($result == false) { echo 蚊子趕走了 ; } else { echo 無法趕走 ; } ?>
即可
復制文件也很容易:
<?php $file = yang txt ; $newfile = ji txt ; # 這個文件父文件夾必須能寫 if (file_exists($file) == false) { die ( 小樣沒上線 無法復制 ); } $result = ($file $newfile); if ($result == false) { echo 復制記憶ok ; } ?>
可以使用rename()函數重命名一個文件夾 其他操作都是這幾個函數組合一下就能實現的
D 獲取文件屬性
我說幾個常見的函數:
獲取最近修改時間:
<?php $file = test txt ; echo date( r filemtime($file)); ?>
返回的說unix的時間戳 這在緩存技術常用
相關的還有獲取上次被訪問的時間fileatime() filectime()當文件的許可權 所有者 所有組或其它 inode 中的元數據被更新時間 fileowner()函數返迴文件所有者
$owner = posix_getpwuid(fileowner($file));
(非window系統) ileperms()獲取文件的許可權
<?php$file = dirlist php ;$perms = substr(sprintf( %o fileperms($file)) );echo $perms;?>
filesize()返迴文件大小的位元組數:
<?php
// 輸出類似 somefile txt: bytes
$filename = somefile txt ; echo $filename : filesize($filename) bytes ;
?>
獲取文件的全部信息有個返回數組的函數stat()函數:
<?php $file = dirlist php ; $perms = stat($file); var_mp($perms); ?>
那個鍵對應什麼可以查閱詳細資料 此處不再展開
四 結束語
lishixin/Article/program/PHP/201311/21262
C. php5-cgi和php5-fpm 這兩個東西是什麼意思啊有什麼區別
什麼是PHP-CGI:
PHP-CGI是PHP自帶的FastCGI管理器。
啟動PHP-CGI,使用如下命令:
php-cgi -b 127.0.0.1:9000
PHP-CGI的不足:
1、php-cgi變更php.ini配置後需重啟php-cgi才能讓新的php-ini生效,不可以平滑重啟
2、直接殺死php-cgi進程,php就不能運行了。(PHP-FPM和Spawn-FCGI就沒有這個問題,守護進程會平滑從新生成新的子進程。)
什麼是PHP-FPM
PHP-FPM是一個PHP FastCGI管理器,是只用於PHP的,可以在 http://php-fpm.org/download下載得到.
PHP-FPM其實是PHP源代碼的一個補丁,旨在將FastCGI進程管理整合進PHP包中。必須將它patch到你的PHP源代碼中,在編譯安裝PHP後才可以使用。
現在我們可以在最新的PHP 5.3.2的源碼樹里下載得到直接整合了PHP-FPM的分支,據說下個版本會融合進PHP的主分支去。相對Spawn-FCGI,PHP-FPM在CPU和內存方面的控制都更勝一籌,而且前者很容易崩潰,必須用crontab進行監控,而PHP-FPM則沒有這種煩惱。
PHP5.3.3已經集成php-fpm了,不再是第三方的包了。PHP-FPM提供了更好的PHP進程管理方式,可以有效控制內存和進程、可以平滑重載PHP配置,比spawn-fcgi具有更多有點,所以被PHP官方收錄了。在./configure的時候帶 –enable-fpm參數即可開啟PHP-FPM。
二者的區別:
php-cgi是被調用的進程,php-fpm是配置和管理進程的。