『壹』 php怎麼用
推薦閱讀:騰訊T3-T4標准精品PHP架構師教程目錄大全,只要你看完保證薪資上升一個台階(持續更新)點擊此處
『貳』 PHP可以做什麼
PHP可以做什麼
PHP屬於後起之秀,吸收了java和c以及perl等語言優點,專注互聯網領域。WEB領域PHP擁有得天獨厚的優勢,WEB領域沒有語言可以和他比。將來一定是互聯網的天下。互聯網離不開WEB,WEB離不開PHP。那麼PHP可以做什麼?一起來看看PHP的用途吧!
PC端網站開發
60%全球互聯網網站採用php技術,80%國內互聯網網站使用php開發。這些網站包含購物網站,政府企業網站,QQ空間,論壇博客等等。
移動端微網站開發
移動設備的普及為移動互聯網的快速發展奠定了基礎!手機淘寶網站,手機京東網站等等, 微信公眾號應用中的微網站。 將來微網站和公眾號肯定會取代APP的地位!
APP後台開發
APP後台開發也是移動互聯網發展的一個產物。大多數網站為了讓用戶在手機上能夠得到更好體驗效果,都加入開發APP的開發行列中。而PHP後端技術將會作為他們的不二選擇。
PHP主要用來做網站開發,許多小型網站都用PHP開發,PHP是開源的,這是使得PHP經久不衰的原因。在電商、社區等方面,PHP具備非常成熟的開源代碼和模板,因此使得PHP應用極為廣泛。
php-fpm的安裝目錄
下面是我的平時的環境搭建php的各種安裝目錄,大家的基本也差不多。
centos等linux平台
1./usr/local/php/php
2./usr/local/php/etc/php.ini
3./usr/local/php/sbin/php-fpm
4./usr/local/php/etc/php-fpm.conf
mac平台
1./usr/bin/php
2./etc/php.ini
3./usr/bin/php-fpm
4./etc/php-fpm.conf
由於我開發以Mac為主,所以就用Mac的環境配置來學習。
php-fpm配置詳解
這是搜索的一份還算算比較詳細的php-fpm.conf配置詳解,我會針對性的修改下,當然php手冊上也有詳細的講解:http://php.net/manual/zh/install.fpm.configuration.php
1.pid = /usr/local/var/run/php-fpm.pid
2.#pid設置,一定要開啟,上面是Mac平台的。默認在php安裝目錄中的var/run/php-fpm.pid。比如centos的在: /usr/local/php/var/run/php-fpm.pid
3.
4.error_log = /usr/local/var/log/php-fpm.log
5.#錯誤日誌,上面是Mac平台的,默認在php安裝目錄中的var/log/php-fpm.log,比如centos的在: /usr/local/php/var/log/php-fpm.log
6.
7.log_level = notice
8.#錯誤級別. 上面的php-fpm.log紀錄的登記。可用級別為: alert(必須立即處理), error(錯誤情況), warning(警告情況), notice(一般重要信息), debug(調試信息). 默認: notice.
9.
10.emergency_restart_threshold = 60
11.emergency_restart_interval = 60s
12.#表示在emergency_restart_interval所設值內出現SIGSEGV或者SIGBUS錯誤的php-cgi進程數如果超過 emergency_restart_threshold個,php-fpm就會優雅重啟。這兩個選項一般保持默認值。0 表示 '關閉該功能'. 默認值: 0 (關閉).
13.
14.process_control_timeout = 0
15.#設置子進程接受主進程復用信號的超時時間. 可用單位: s(秒), m(分), h(小時), 或者 d(天) 默認單位: s(秒). 默認值: 0.
16.
17.daemonize = yes
18.#後台執行fpm,默認值為yes,如果為了調試可以改為no。在FPM中,可以使用不同的設置來運行多個進程池。 這些設置可以針對每個進程池單獨設置。
19.
20.listen = 127.0.0.1:9000
21.#fpm監聽埠,即nginx中php處理的地址,一般默認值即可。可用格式為: 'ip:port', 'port', '/path/to/unix/socket'. 每個進程池都需要設置。如果nginx和php在不同的機器上,分布式處理,就設置ip這里就可以了。
22.
23.listen.backlog = -1
24.#backlog數,設置 listen 的半連接隊列長度,-1表示無限制,由操作系統決定,此行注釋掉就行。backlog含義參考:http://www.3gyou.cc/?p=41
25.
26.listen.allowed_clients = 127.0.0.1
27.#允許訪問FastCGI進程的IP白名單,設置any為不限制IP,如果要設置其他主機的nginx也能訪問這台FPM進程,listen處要設置成本地可被訪問的IP。默認值是any。每個地址是用逗號分隔. 如果沒有設置或者為空,則允許任何伺服器請求連接。
28.
29.listen.owner = www
30.listen.group = www
31.listen.mode = 0666
32.#unix socket設置選項,如果使用tcp方式訪問,這里注釋即可。
33.
34.user = www
35.group = www
36.#啟動進程的用戶和用戶組,FPM 進程運行的Unix用戶, 必須要設置。用戶組,如果沒有設置,則默認用戶的組被使用。
37.
38.pm = dynamic
39.#php-fpm進程啟動模式,pm可以設置為static和dynamic和ondemand
40.#如果選擇static,則進程數就數固定的,由pm.max_children指定固定的子進程數。
41.
42.#如果選擇dynamic,則進程數是動態變化的,由以下參數決定:
43.pm.max_children = 50 #子進程最大數
44.pm.start_servers = 2 #啟動時的進程數,默認值為: min_spare_servers + (max_spare_servers - min_spare_servers) / 2
45.pm.min_spare_servers = 1 #保證空閑進程數最小值,如果空閑進程小於此值,則創建新的子進程
46.pm.max_spare_servers = 3 #,保證空閑進程數最大值,如果空閑進程大於此值,此進行清理
47.
48.pm.max_requests = 500
49.#設置每個子進程重生之前服務的請求數. 對於可能存在內存泄漏的第三方模塊來說是非常有用的. 如果設置為 '0' 則一直接受請求. 等同於 PHP_FCGI_MAX_REQUESTS 環境變數. 默認值: 0.
50.
51.pm.status_path = /status
52.#FPM狀態頁面的網址. 如果沒有設置, 則無法訪問狀態頁面. 默認值: none. munin監控會使用到
53.
54.ping.path = /ping
55.#FPM監控頁面的ping網址. 如果沒有設置, 則無法訪問ping頁面. 該頁面用於外部檢測FPM是否存活並且可以響應請求. 請注意必須以斜線開頭 (/)。
56.
57.ping.response = pong
58.#用於定義ping請求的返回相應. 返回為 HTTP 200 的 text/plain 格式文本. 默認值: pong.
59.
60.access.log = log/$pool.access.log
61.#每一個請求的訪問日誌,默認是關閉的。
62.
63.access.format = "%R - %u %t "%m %r%Q%q" %s %f %{mili}d %{kilo}M %C%%"
64.#設定訪問日誌的格式。
65.
66.slowlog = log/$pool.log.slow
67.#慢請求的`記錄日誌,配合request_slowlog_timeout使用,默認關閉
68.
69.request_slowlog_timeout = 10s
70.#當一個請求該設置的超時時間後,就會將對應的PHP調用堆棧信息完整寫入到慢日誌中. 設置為 '0' 表示 'Off'
71.
72.request_terminate_timeout = 0
73.#設置單個請求的超時中止時間. 該選項可能會對php.ini設置中的'max_execution_time'因為某些特殊原因沒有中止運行的腳本有用. 設置為 '0' 表示 'Off'.當經常出現502錯誤時可以嘗試更改此選項。
74.
75.rlimit_files = 1024
76.#設置文件打開描述符的rlimit限制. 默認值: 系統定義值默認可打開句柄是1024,可使用 ulimit -n查看,ulimit -n 2048修改。
77.
78.rlimit_core = 0
79.#設置核心rlimit最大限制值. 可用值: 'unlimited' 、0或者正整數. 默認值: 系統定義值.
80.
81.chroot =
82.#啟動時的Chroot目錄. 所定義的目錄需要是絕對路徑. 如果沒有設置, 則chroot不被使用.
83.
84.chdir =
85.#設置啟動目錄,啟動時會自動Chdir到該目錄. 所定義的目錄需要是絕對路徑. 默認值: 當前目錄,或者/目錄(chroot時)
86.
87.catch_workers_output = yes
88.#重定向運行過程中的stdout和stderr到主要的錯誤日誌文件中. 如果沒有設置, stdout 和 stderr 將會根據FastCGI的規則被重定向到 /dev/null . 默認值: 空.
當然還有一些無關緊要的設置,用到了再說吧。
一些重要的設置
php-fpm進程分配
在之前的文章中就說過了。在fasgcgi模式下,php會啟動多個php-fpm進程,來接收nginx發來的請求,那是不是進程越多,速度就越快呢?這可不一定!得根據我們的機器配置和業務量來決定。
我們先來看下,設定進程的配置在哪裡?
pm = static | dynamic | ondemand
pm可以設置成這樣3種,我們用的最多的就上前面2種。
pm = static 模式
pm = static 表示我們創建的php-fpm子進程數量是固定的,那麼就只有pm.max_children = 50這個參數生效。你啟動php-fpm的時候就會一起全部啟動51(1個主+50個子)個進程,頗為壯觀。
pm = dynamic 模式
pm = dynamic模式,表示啟動進程是動態分配的,隨著請求量動態變化的。他由 pm.max_children,pm.start_servers,pm.min_spare_servers,pm.max_spare_servers 這幾個參數共同決定。
上面已經講過,這里再重申一下吧:
pm.max_children = 50 是最大可創建的子進程的數量。必須設置。這里表示最多隻能50個子進程。
pm.start_servers = 20 隨著php-fpm一起啟動時創建的子進程數目。默認值:min_spare_servers + (max_spare_servers - min_spare_servers) / 2。這里表示,一起啟動會有20個子進程。
pm.min_spare_servers = 10
設置伺服器空閑時最小php-fpm進程數量。必須設置。如果空閑的時候,會檢查如果少於10個,就會啟動幾個來補上。
pm.max_spare_servers = 30
設置伺服器空閑時最大php-fpm進程數量。必須設置。如果空閑時,會檢查進程數,多於30個了,就會關閉幾個,達到30個的狀態。
到底選擇static還數dynamic?
很多人恐懼症來襲,不知道選什麼好?
一般原則是:動態適合小內存機器,靈活分配進程,省內存。靜態適用於大內存機器,動態創建回收進程對伺服器資源也是一種消耗。
如果你的內存很大,有8-20G,按照一個php-fpm進程20M算,100個就2G內存了,那就可以開啟static模式。如果你的內存很小,比如才256M,那就要小心設置了,因為你的機器裡面的其他的進程也算需要佔用內存的,所以設置成dynamic是最好的,比如:pm.max_chindren = 8, 佔用內存160M左右,而且可以隨時變化,對於一半訪問量的網站足夠了。
慢日誌查詢
我們有時候會經常飽受500,502問題困擾。當nginx收到如上錯誤碼時,可以確定後端php-fpm解析php出了某種問題,比如,執行錯誤,執行超時。
這個時候,我們是可以開啟慢日誌功能的。
slowlog = /usr/local/var/log/php-fpm.log.slow
request_slowlog_timeout = 15s
當一個請求該設置的超時時間15秒後,就會將對應的PHP調用堆棧信息完整寫入到慢日誌中。
php-fpm慢日誌會記錄下進程號,腳本名稱,具體哪個文件哪行代碼的哪個函數執行時間過長:
1.[21-Nov-2013 14:30:38] [pool www] pid 11877
2.script_filename = /usr/local/lnmp/nginx/html/www.quancha.cn/www/fyzb.php
3.[0xb70fb88c] file_get_contents() /usr/local/lnmp/nginx/html/www.quancha.cn/www/fyzb.php:2
通過日誌,我們就可以知道第2行的file_get_contents 函數有點問題,這樣我們就能追蹤問題了。
;『叄』 什麼是PHP,PHP能幹什麼,為什麼使用PHP
在學習任何東西之前,我們都得了解這門東西究竟是什麼,有什麼用。學習PHP一樣如此。
一、什麼是PHP
PHP,全稱 Hypertext Preprocessor ,中文翻譯「超文字前處理器」。
在PHP的官網是這樣介紹PHP的:
PHP is a popular general-purpose scripting language that is especially suited to web development.
Fast, flexible and pragmatic, PHP powers everything from your blog to the most popular websites in the world.
照顧英文能力較差的同學,以下為中文版
PHP是一種被廣泛應用的開源通用指令碼語言,尤其適用於 Web 開發。
擁有快速,靈活,實用的特點,PHP能做任何事,包括你的個人部落格甚至是全球性的大型站點系統。
PHP核心由C開發,因此在語法上跟C有不少相似之處。但PHP絕對不是C。
PHP語法除了跟C有相似之處外,還跟Java、Perl比較流行的程式語言存在相似的地方。因此,如果你有上述語言基礎,PHP入門會更加快速。
二、PHP能幹什麼
PHP能幹任何事!
PHP能直接嵌入HTML語言中,與HTML混編。PHP開發的目的主要是允許 web 開發人員快速編寫動態生成的 web 頁面,但 PHP 的用途遠不只於此。
PHP還包含了命令列執行介面(mand line interface),和產生圖形使用者介面(GUI)程式。
PHP能幹任何事!
PHP能幹任何事!
PHP能幹任何事!
重要的事情要說3遍!
三、為什麼選擇PHP
1、PHP開源免費,沒有任何收費的專案。你可以隨便修改他的核心然後用於自己的商業使用。
2.、PHP開發元件豐富(對於新手來說一堆IDE也是夠選擇困難症糾結的)
3、社群成熟,85%以上的問題能在社群找到相應的解決思路。
4、PHP學習成本低,不想某門語言要學就得三件套。見效快,學1個月基本能入門
5、開源庫豐富,基本所有型別均有開源產品
6、PHP7.0基本不輸任何一門語言~!這是重點
7、與MySQL近乎完美的支援
8、找工作容易
9、連Facebook都在用php,你還什麼理由不用?
利用PHP技術應用而開發的網頁自動生成工具,不僅可以作為自助建站的平台,同時也可以作為網站管理系統。它的資料更新很大程度上能滿足使用者的"個性化需求",即在內容上和風格上接近使用者所想,該系統完全圖形視覺化,即使不懂製作網頁的專門技術,不懂HTML語言,通過對該系統中如欄目、模板設定、網站關鍵字、功能模組等進行引數設定,使用者也可以用它輕松地製作出千變萬化、色彩豐富的網站。
為什麼使用 PHP?
PHP 運行於各種平台(Windows, Linux, Unix, Mac OS X 等等)
PHP 相容幾乎所有伺服器(Apache, IIS 等等)
PHP 支援多種資料庫
PHP 是免費的。請從官方 PHP 資源下載:php.
PHP 易於學習,並可高效地執行在伺服器端
1使用array_map可以簡單搞定PHP刪除檔案、刪除目錄
2.具體程式碼如下:
?php
刪除目錄下所有空目錄
array_map('rmdir', glob('*', GLOB_ONLYDIR));
刪除目錄所有檔案
array_map('unlink', array_filter(glob('*'), 'is_file'));
3.$data = array(
array(
'a' => 'first a',
'b' => 'first b'
),
array(
'a' => 'second a',
'b' => 'second b'
)
);
$array_column = array_map(function($element){
return $element['a'];
}, $data);
print_r($array_column);
PHP是一種HTML內嵌式的在伺服器端執行的指令碼語言,所以大部分PHP開發出來的Web應用,初始的開發模板就是混合層的資料程式設計。雖然通過MVC設計模式可以把程式應用邏輯與網頁呈現邏輯強制性分離,但也只是將應用程式的輸入、處理和輸出分開,網頁呈現邏輯(檢視)還會有HTML程式碼和PHP程式強耦合在一起。
你是初學者吧。我開始學的時候也是這樣。不知道這個是幹嘛的,我哥哥當時拉我一起去了北京的兄弟連,當時和我一樣不知道這個是幹嘛的人很多,但是我真心不想告訴你,我現在一個月有5K以上的工資。
php是程式語言,做網站,做程式都可以,不過它做網站能發揮它的長處,應用程式的話呢還是用Java、.好些
這個應用可以使用JavaConfig完成配置。我把它切分為下面幾個部分:
ServicesConfig(服務配置)
無需掃描元件,配置真的非常簡單:
@Configuration
public class ServicesConfig {
@Autowired
private AountRepository aountRepository;
@Bean
public UserService userService() {
return new UserService(aountRepository);
}
1、在配置檔案/usr/local/php/etc/php-fpm.conf檔案中找到
<value name= "listen_address">127.0.0.1:9000</value>
改為
<value name=listen_address> /var/run/phpfpm.sock</value>
重啟php-fpm
/usr/local/php/ *** in/php-fpm restart
2、配置nginx
在/usr/local/nginx/conf/nginx.conf中找到
fastcgi_pass 127.0.0.1:9000;
改為
fastcgi_pass unix:/var/run/phpfpm.sock;
重啟nginx
/usr/local/nginx/ *** in/nginx -s reload
試試吧我剛在後盾網問的講師相關知識,我加上自己的理解,希望能幫到你(づ ●─● )づ
mb打頭的函式,都最新新增的,好多要求php5版本
處理速度能更快,功能更強大一些
但也有一些預設是未被開啟
沒有非說得用mb函式的說法,合適的就是最好的
比如說mb_substr用來擷取中文時不會把一個漢字截斷的現象
substr更適合擷取英文內容
但php預設是不支援的,需要在配置中解開
;extension=php_mbstring.dll
『肆』 php如何使用
按照以下的使用說明,可以快速的建立一個本地 PHP 開發環境。建議將 PHP 升級到最新的版本。
1.PHP安裝
使用綠色方式,下載Zip文件解壓。
2.配置
在解壓的根目錄下找到php.ini-development,是用於開發環境的配置文件;還有一個php.ini-proction,這個是用於生產環境的配置文件。使用php.in-development,復制一份,重命名為php.ini。開始編輯。
定位registe_globals =Off;
3.與Apache協同工作
php以mole方式與Apache相結合,打開Apache的配置文件,以關鍵字「LoadMole」定位,配置要載入的模塊,
在最後添加如下兩行:
LoadMole php5_mole D:/php/php5apache2_2.dll
PHPIniDir "D:/php"
第一行「LoadMole php5_mole D:/php/php5apache2_2.dll」是指以mole方式載入php,第二行「PHPIniDir "D:/php"」是指明php的配置文件php.ini的位置,是當然,其中的「D:/php」要改成你先前選擇的php解壓縮的目錄。
在php的解壓目錄下同時有php5apache2.dll和php5apache2_2.dll,因為我們的apache版本是2.2的,所以載入dll
使用php5apache2_2.dll,可以根據自己的情況配置。
『伍』 php怎麼使用
PHP(外文名:PHP: Hypertext Preprocessor,中文名:「超文本預處理器」)是一種通用開源腳本語言。語法吸收了C語言、Java和Perl的特點,利於學習,使用廣泛,主要適用於Web開發領域。PHP 獨特的語法混合了C、Java、Perl以及PHP自創的語法。它可以比CGI或者Perl更快速地執行動態網頁。用PHP做出的動態頁面與其他的編程語言相比,PHP是將程序嵌入到HTML(標准通用標記語言下的一個應用)文檔中去執行,執行效率比完全生成HTML標記的CGI要高許多;PHP還可以執行編譯後代碼,編譯可以達到加密和優化代碼運行,使代碼運行更快。
『陸』 如何使用PHP編程說明
PHP是一門高效的網路編程語言 由於它具有編寫靈活 運行快速等優點 迅速成為Web程序員的首選語言 前不久的一份權威調查表明 現在已經有 %的網站使用PHP作為主要的伺服器端編程語言
但是 要成為一名PHP編程高手卻並不容易 並不像很多人想像的那樣 只要能夠飛快地編寫幾條簡單的代碼去解決一個復雜的問題就是PHP編程高手了 真正的PHP高手還需要考慮更多的其它問題 以下三條准則是一名成熟的PHP程序員在編程中應該首先遵循的准則
懶惰是金
編寫漂亮的代碼
追求程序的速度 而不是編程的速度
一 懶惰是金
做一個懶惰的程序員嗎?這個想法太奇怪了!因為這個世界上最忙碌的人可能就是計算機程序員了 但正是因為程序員太忙了 所以才應該在編程時學會偷懶
對於一個程序員來說 懶惰的方法有兩種 其一 大膽使用現成的別人的程序代碼 把這些代碼融入到你自己的程序或者項目中去 其二是編寫一些有用的代碼建立一個函數庫 在將來編寫程序時可以順手拈來 省去了許多重復的勞動 自然就可以懶惰一點了
這兩種偷懶的方法都非常適合PHP程序員了
首先 PHP是在自由開放的環境中誕生和成長的一門語言 在世界各地 有成千上萬的程序員 他們一直在為PHP的完美而不斷奮斗 他們也願意和別人分享自己的聰明才智和自己編寫的代碼 你每天都可以從一些PHP網站 郵件列表 新聞組發現大量的優秀的程序代碼 這樣說 我並不是鼓勵你整天等著讓別人為你編寫代碼 但是你可以 站在偉人的肩膀上 充分發揚 拿來主義 聰明地應用別人的程序代碼可以節省你大量時間 其次 在PHP中 你可以方便地建立自己的函數庫 這樣可以在你以後編寫程序時省去很多麻煩
下面筆者為大家介紹幾個通用的函數 這些函數有的來自網上的一些開放源代碼的項目 有的精選自郵件列表 如果你能把它們加入到你自己的函數庫中 遲早你將會發現自己受益無窮
通用資料庫處理函數
和其它的CGI函數相比 PHP的優點之一是具有很強大的資料庫處理能力 但是 在PHP中 對於不同的資料庫都使用一些特定的函數來專門處理 缺少通用的資料庫處理函數 這大大降低了程序代碼的可移植性 這也為初學編程的朋友帶來了很多不便
在網上 許多程序員都通過封裝類解決了這個問題 他們編寫了統一的函數用來處理任何流行的資料庫——不管是在Linux世界深受歡迎的mysql_query($Query_String $this->Link_ID);ss_timing_stop();ss_log(INFO ss_timing_current() Secs - $Query_String);$this->Row = ;$this->Errno = mysql_errno();$this->Error = mysql_error();if ($halt_on_error && !$this->Query_ID) {$this->halt( Invalid SQL: $Query_String);}return $this->Query_ID; }
二 編寫漂亮的代碼
將後台程序與前端程序分開
在編寫PHP程序時 有些代碼是用來處理一些事務 例如操作資料庫 進行數學運算等 而另外的一些代碼則只是事務處理的結果顯示出來 例如一些使用echo 語句將結果以HTML的格式顯示在Web瀏覽器上的PHP代碼以及那些直接嵌入PHP程序的HTML代碼 首先我們應該清晰地區分這兩種代碼 把前者稱為後台程序 把後者稱為前端程序
因為PHP是一種嵌入式編程語言 也就是說 所有的PHP代碼都可以嵌入到HTML代碼之中 這為程序的編寫帶來了許多便利之處 但是 物極必反 如果在一段較長的程序中將PHP代碼和HTML代碼混合編寫 這將使程序雜亂無章 不利於程序的維護和閱讀 所以我們需要盡可能地將這些程序中混雜於HTML代碼中的PHP代碼移植出來 在專門的文件中將這些代碼封裝成函數 然後在HTML代碼中使用 include語句來包含這些文件 在適當的位置調用這些函數即可
這種做法一方面使HTML代碼和PHP代碼都簡單易讀 另一方面因為HTML代碼需要不斷更新 而這種分離的方法可以確保後台程序不會被破壞 同前端程序不同 後台程序更多追求的是穩定 結構化 極少更改 所以應該認真地設計和管理 其實 在設計台程序時 投入大量時間是值得的 現在栽樹 以後乘涼 在以後的設計工作中將可以輕松地使用現在編寫的後台程序
靈活使用包含文件
正如前面所說的那樣 後台程序應當安排在一系列的包含文件中 包含文件可以通過include語句在需要時動態裝入 也可以在php ini文件中通過使用auto_prepend_file指令預先自動裝入 如果使用後一種方法的話 雖然取得了一勞永逸的好處 但是也有一些缺點值得我們注意 下面的一段代碼向我們展示了解析一個龐大的包含文件需要一定的時間
require(timing inc); ss_timing_start(); include(test inc); ss_timing_stop(); echo ss_timing_current() ?>
在上面的代碼中 test inc是一個 行的包含文件 運行的結果顯示 解析這個包含文件花費了 秒鍾 對於一個大型網站來說 這個速度並不是可以忽略不記的
使用包含文件的另外一個缺點是 如果一個文件中的一個語句發生錯誤 將會使整個網站的PHP程序都無法運行 所以使用起來也及其小心
其實 對包含文件稍做處理 即可以使包含文件只在需要時進行解析 下面的代碼使abc inc文件只在程序需要時才作解析
if ( defined( __LIBA_INC) ) return; define( __LIBA_INC ); /* * 代碼 */ ?>
使用面向對象的編程方法
PHP 也是一種面向對象的語言 面向對象的編程方法是優秀的程序員們非常推崇的一種軟體設計方法 在PHP編程中可以充分發揮面向對象語言的優勢 對編程中的對象進行封裝 在前面的代碼中 我們使用了面向對象的方法 例如在管理資料庫時 我們將query()函數封裝進資料庫類中 這極大地方便了代碼的管理 增加了程序的可讀性
三 追求程序速度 而不是編程的速度
在網站建設中 程序運行速度和網頁下載速度都是關系成敗的重要因素 作為一名Web程序員 應該更加註意代碼的運行速度 下面介紹的幾種方法都在不同程度上提高了代碼的運行速度
使用內嵌的HTML代碼 而不是PHP的echo語句
因為PHP是一門嵌入式Web編程語言 可以將HTML代碼和PHP代碼相互嵌入 但是很多程序員擔心在HTML代碼中過多的使用 嵌入PHP代碼會多次調用PHP解釋器 從而降低了PHP代碼的運行速度 所以寧願使用PHP的echo語句來輸出HTML代碼 而不直接使用HTML代碼 但事實卻恰恰相反 每一個PHP頁面只調用一次PHP解釋器來解釋所有的PHP代碼 所以 只在需要時才嵌入PHP代碼 而大多數的時候直接使用HTML代碼輸入結果 不但不會降低程序的運行速度 而且因為減少了對echo語句的解析 往往可以提高代碼的運行速度
下面的一段代碼證明了我們的結論 在這段代碼中 我們使用了前面介紹的時間測試函數
使用str-replace而不是ereg-replace 習慣使用Perl進行編程的程序員更加願意使用ereg_replace完成字元串替換工作 因為在PHP中ereg_replace的用法和Perl中模式匹配的用法相近 但是 下面的這段代碼證明 使用str_replace 代替 ereg_replace將可以大大提高代碼的運行速度
測試str_replace和ereg_replace的運行速度
//這段代碼測試str_replace的運行速度 emphasis; ?> for ($i= ; $i< ; $i++) {str_replace(i> b> $string) } ?>
//這段代碼測試ereg_replace的運行速度 for ($i= ; $i< ; $i++) {ereg_replace(<([/]*)i> < b> $string) } ?> //列印結果
結論
使用str_replace的時間 - 使用ereg_pattern的時間 -
運行上面的代碼 得到的結果是
使用str_replace的時間 - 使用ereg_pattern的時間 -
從運行的結果我們可以看出使用str_replace替代ereg_replace作為字元串替換函數 極大地提高了代碼的運行速度
注意字元串的引用
PHP 和其它很多編程語言一樣 可以使用雙引號( )來引用字元串 也可以使用單引號() 但是在PHP中 如果使用雙引號來引用字元串 那麼PHP解析器將首先分析字元串中有沒有對變數的引用 有變數的話 將對變數進行替換 如果是單引號 則沒有如此復雜——直接將單引號包含起來的所有字元串直接顯示出來 顯然 在PHP編程中 如果使用單引號引用字元串變數要比使用雙引號快速一些
在資料庫中避免使用聯合操作
比起其它的Web編程語言來說 PHP的資料庫功能十分強大 但是在PHP中資料庫的運行仍然是一件十分費時費力的事情 所以 作為一個Web程序員 要盡量減少資料庫的查詢操作 同時應該為資料庫建立適當的索引 另一件值得注意的事情是在用PHP操作資料庫時 盡可能不使用多個數據表的聯合操作 盡管聯合操作可以增強資料庫的查詢功能 但是卻大大增加了伺服器的負擔
為了說明這個問題 我們可以看看下面的這個簡單的例子
我們在資料庫中創建了兩個數據表foo和big_foo 在數據表foo中 只有一個欄位 包含了從 - 之間的所有自然數 數據表big_foo同樣只有一個欄位 但包含了從 - 之間的全部自然數 所以 從大小上說 big_foo等於foo與它自身進行了聯合操作
$db->query( select * from foo ); secs $db->next_record(); secs $db->query( insert into foo values (NULL) ); secs $db->query( select * from foo as a foo as b ); secs $db->query( select * from foo as a foo as b where a id > b id ); secs $db->query( select * from foo as a foo as b where a id = b id ); secs $db->query( select * from big_foo ); secs
從上面操作結果我們可以發現 對於兩個有 條記錄的數據表進行聯合 其速度並不比對一個 條紀錄的大型數據表單獨進行操作快多少
注意include與require的區別
在PHP變成中 include()與require()的功能相同 但在用法上卻有一些不同 include()是有條件包含函數 而require()則是無條件包含函數 例如在下面的一個例子中 如果變數$somgthing為真 則將包含文件somefile
if($something){include( somefile ); }
但不管$something取何值 下面的代碼將把文件somefile包含進文件里
if($something){require( somefile ); }
下面的這個有趣的例子充分說明了這兩個函數之間的不同
$i = ; while ($i < ) {require( somefile $i );$i++; }
在這段代碼中 每一次循環的時候 程序都將把同一個文件包含進去 很顯然這不是程序員的初衷 從代碼中我們可以看出這段代碼希望在每次循環時 將不同的文件包含進來 如果要完成這個功能 必須求助函數include()
$i = ; while ($i < ) { include( somefile $i ); $i++; }
注意echo和print的區別
PHP中echo和print的功能也基本相同 但是兩者之間也有細微差別 在PHP代碼中可以把print作為一個普通函數來使用 例如執行下面的代碼後變數$res的值將為 $ret = print Hello World ;
lishixin/Article/program/PHP/201405/30767
『柒』 php文件,到底要怎麼使用啊!
php是一個伺服器端語言,是用來處理用戶在瀏覽網頁時向伺服器提交的請求的一種語言。這樣的語言還有python。
所以php普遍在伺服器端運行和使用。如果想在windows系統下運行也是可以的,直接安裝windows下的安裝包,然後就可以利用cmd下的命令運行任何目錄下的任何php腳本。zend
stdio支持直接一鍵運行,就像微軟的vistual
stdio一樣,很強大。
php是一種腳本語言,不需要c++一樣先必須要編譯才能夠執行。php是解釋執行的,windows下的bat文件見過嗎?bat文件也是這樣,用記事本寫好代碼,保存為bat後綴,然後雙擊就在windows下運行了,是不是很方便呢?python也是這樣的。
php處理用戶請求,或者動態組裝html文件給瀏覽器供展示都是很好的。部分人認為php拼接字元串比較慢,這個還是要看量級。如果對php的作用感興趣,想進一步了解的話,請閱讀《mysql,apache,php編程導學》,我相信就很快有一個概念了。
『捌』 PHP源碼如何使用
PHP程序都要用MYSQL,如果沒有MYSQL,就不能用它們;
第一:配置資料庫信息,改成自己所需的;
第二:導入資料庫;
第三:安裝wamp5 輸入 http://127.0.0.1/自己的文件名。
1:如果是php源碼,在本地電腦使用時。要先安裝phpnow環境套件包(下附),裡麵包含
了php+mysql等,也是用迅雷搜索下載。那個套件安裝很傻瓜化,不用我說了。
2:把所有的源碼復制到套件安裝目錄下的htdocs文件夾里,使用方法如上面的3
。
3:如果打不開,請先確定你的資料庫是需要導入的嗎?如果是,請用
http://127.0.0.1/phpmyadmin/導入資料庫。再檢查資料庫連接文件config.php
(用記事本打開,一般是這個文件。)里的資料庫連接參數如密碼等是否正確,
否則改之。
4:如果你添加了虛擬主機,想在虛擬主機里運行php源碼,那就把源碼復制到虛
擬主機所控的文件夾下,用「http://虛擬主機地址/ 」來訪問。
『玖』 php引用函數的使用方法
在技術學習的道路上,能掌握一些有用的技巧,對於初學者是非常有幫助的,下面是php引用函數的使用方法,希望大家會喜歡。
1.不要在你的應用程序中gzip輸出,讓apache來做
考慮使用ob_gzhandler?不,別這樣做。它沒有任何意義。PHP應該是來寫應用程序的。不要擔心PHP中有關如何優化在伺服器和瀏覽器之間傳輸的數據。
使用apache mod_gzip/mod_deflate通過.htaccess文件壓縮內容。
2.從php echo javascript代碼時使用json_encode
有些時候一些JavaScript代碼是從php動態生成的。
$images = array( 'myself.png' , 'friends.png' , 'colleagues.png');
$js_code = '';foreach($images as $image)
{
$js_code .= "'$image' ,";
}
$js_code = 'var images = [' . $js_code . ']; ';echo $js_code;//Output is var images = ['myself.png' ,'friends.png' ,'colleagues.png' ,];
放聰明點。使用json_encode:
$images = array( 'myself.png' , 'friends.png' , 'colleagues.png');
$js_code = 'var images = ' . json_encode($images);
echo $js_code;//Output is : var images = ["myself.png","friends.png","colleagues.png"]
這不是很整潔?
3.在寫入任何文件之前檢查目錄是否可寫
在寫入或保存任何文件之前,請務必要檢查該目錄是否是可寫的,如果不可寫的話,會閃爍錯誤消息。這將節省你大量的「調試」時間。當你工作於Linux時,許可權是必須要處理的,並且會有很多很多的許可權問題時,當目錄不可寫,文件無法讀取等的時候。
請確保你的應用程序盡可能智能化,並在最短的時間內報告最重要的信息。
$contents = "All the content";
$file_path = "/var/www/project/content.txt";
file_put_contents($file_path , $contents);
這完全正確。但有一些間接的問題。file_put_contents可能會因為一些原因而失敗:
父目錄不存在
目錄存在,但不可寫
鎖定文件用於寫入?
因此,在寫入文件之前最好能夠一切都弄明確。
$contents = "All the content";
$dir = '/var/www/project';
$file_path = $dir . "/content.txt";if(is_writable($dir))
{
file_put_contents($file_path , $contents);
}else{ die("Directory $dir is not writable, or does not exist. Please check");
}
通過這樣做,你就能得到哪裡文件寫入失敗以及為什麼失敗的准確信息。
4.改變應用程序創建的文件的許可權
當在Linux環境下工作時,許可權處理會浪費你很多時間。因此,只要你的php應用程序創建了一些文件,那就應該修改它們的許可權以確保它們在外面「平易近人」。否則,例如,文件是由「php」用戶創建的,而你作為一個不同的用戶,系統就不會讓你訪問或打開文件,然後你必須努力獲得root許可權,更改文件許可權等等。
// Read and write for owner, read for everybody elsechmod("/somedir/somefile", 0644);// Everything for owner, read and execute for otherschmod("/somedir/somefile", 0755);
5.不要檢查提交按鈕值來檢查表單提交
if($_POST['submit'] == 'Save')
{ //Save the things}
以上代碼在大多數時候是正確的,除了應用程序使用多語言的情況。然後「Save」可以是很多不同的東西。那麼你該如何再做比較?所以不能依靠提交按鈕的值。相反,使用這個:
if( $_SERVER['REQUEST_METHOD'] == 'POST' and isset($_POST['submit']) )
{ //Save the things}
現在你就可以擺脫提交按鈕的值了。
6.在函數中總是有相同值的地方使用靜態變數
//Delay for some timefunction delay(){
$sync_delay = get_option('sync_delay'); echo "
Delaying for $sync_delay seconds...";
sleep($sync_delay); echo "Done
";
}
相反,使用靜態變數:
//Delay for some timefunction delay(){ static $sync_delay = null; if($sync_delay == null)
{
$sync_delay = get_option('sync_delay');
} echo "
Delaying for $sync_delay seconds...";
sleep($sync_delay); echo "Done
";
}
7.不要直接使用$ _SESSION變數
一些簡單的例子是:
$_SESSION['username'] = $username;
$username = $_SESSION['username'];
但是這有一個問題。如果你正在相同域中運行多個應用程序,會話變數會發生沖突。2個不同的應用程序在會話變數中可能會設置相同的鍵名。舉個例子,一個相同域的前端門戶和後台管理應用程序。
因此,用包裝函數使用應用程序特定鍵:
define('APP_ID' , 'abc_corp_ecommerce');//Function to get a session variablefunction session_get($key){
$k = APP_ID . '.' . $key; if(isset($_SESSION[$k]))
{ return $_SESSION[$k];
} return false;
}//Function set the session variablefunction session_set($key , $value){
$k = APP_ID . '.' . $key;
$_SESSION[$k] = $value; return true;
}
8.封裝實用輔助函數到一個類中
所以,你必須在一個文件中有很多實用函數:
function utility_a(){ //This function does a utility thing like string processing}function utility_b(){ //This function does nother utility thing like database processing}function utility_c(){ //This function is ...}
自由地在應用程序中使用函數。那麼你或許想要將它們包裝成一個類作為靜態函數:
class Utility{ public static function utility_a()
{
} public static function utility_b()
{
} public static function utility_c()
{
}
}//and call them as $a = Utility::utility_a();
$b = Utility::utility_b();
這里你可以得到的一個明顯好處是,如果php有相似名稱的內置函數,那麼名稱不會發生沖突。
從另一個角度看,你可以在相同的應用程序中保持多個版本的相同類,而不會發生任何沖突。因為它被封裝了,就是這樣。
9.一些傻瓜式技巧
使用echo代替print
使用str_replace代替preg_replace,除非你確定需要它
不要使用short tags
對於簡單的字元串使用單引號代替雙引號
在header重定向之後要記得做一個exit
千萬不要把函數調用放到for循環控制行中。
isset比strlen快
正確和一致地格式化你的'代碼
不要丟失循環或if-else塊的括弧。
不要寫這樣的代碼:
if($a == true) $a_count++;
這絕對是一種浪費。
這樣寫
if($a == true)
{
$a_count++;
}
不要通過吃掉語法縮短你的代碼。而是要讓你的邏輯更簡短。使用具有代碼高亮功能的文本編輯器。代碼高亮有助於減少錯誤。
10. 使用array_map快速處理數組
比方說,你要trim一個數組的所有元素。新手會這樣做:
foreach($arr as $c => $v)
{
$arr[$c] = trim($v);
}
但它可以使用array_map變得更整潔:
$arr = array_map('trim' , $arr);
這適用於trim數組$arr的所有元素。另一個類似的函數是array_walk。
11.使用php過濾器驗證數據
你是不是使用正則表達式來驗證如電子郵件,IP地址等值?是的,每個人都是這樣做的。現在,讓我們試試一個不同的東西,那就是過濾器。
php過濾器擴展程序將提供簡單的方法來有效驗證或校驗值。
12.強制類型檢查
$amount = intval( $_GET['amount'] );
$rate = (int) $_GET['rate'];
這是一種好習慣。
13.使用set_error_handler()將Php錯誤寫入到文件
set_error_handler()可以用來設置自定義的錯誤處理程序。在文件中編寫一些重要的錯誤用於日誌是個好主意。
14.小心處理大型數組
大型的數組或字元串,如果一個變數保存了一些規模非常大的東西,那麼要小心處理。常見錯誤是創建副本,然後耗盡內存,並得到內存溢出的致命錯誤:
$db_records_in_array_format; //This is a big array holding 1000 rows from a table each having 20 columns , every row is atleast 100 bytes , so total 1000 * 20 * 100 = 2MB$cc = $db_records_in_array_format; //2MB moresome_function($cc); //Another 2MB ?
當導入csv文件或導出表到csv文件時,上面這樣的代碼很常見。
像上面這樣做可能經常會由於內存限制而讓腳本崩潰。對於小規模的變數它不會出現問題,但當處理大型數組時一定要對此加以避免。
考慮通過引用傳遞它們,或者將它們存儲在一個類變數中:
$a = get_large_array();
pass_to_function(&$a);
這樣一來,相同的變數(並非其副本)將用於該函數。
class A{ function first()
{ $this->a = get_large_array(); $this->pass_to_function();
} function pass_to_function()
{ //process $this->a
}
}
盡快復原它們,這樣內存就能被釋放,並且腳本的其餘部分就能放鬆。
下面是關於如何通過引用來賦值從而節省內存的一個簡單示例。
<?phpini_set('display_errors' , true);
error_reporting(E_ALL);
$a = array();for($i = 0; $i < 100000 ; $i++)
{
$a[$i] = 'A'.$i;
}echo 'Memory usage in MB : '. memory_get_usage() / 1000000 . '
';
$b = $a;
$b[0] = 'B';echo 'Memory usage in MB after 1st : '. memory_get_usage() / 1000000 . '
';
$c = $a;
$c[0] = 'B';echo 'Memory usage in MB after 2st : '. memory_get_usage() / 1000000 . '
';
$d =& $a;
$d[0] = 'B';echo 'Memory usage in MB after 3st (reference) : '. memory_get_usage() / 1000000 . '
';
一個典型php 5.4機器上的輸出是:
Memory usage in MB : 18.08208Memory usage in MB after 1st : 27.930944Memory usage in MB after 2st : 37.779808Memory usage in MB after 3st (reference) : 37.779864
因此可以看出,內存被保存在第3份通過引用的副本中。否則,在所有普通副本中內存將被越來越多地使用。
15.在整個腳本中使用單一的資料庫連接
請確保你在整個腳本使用單一的資料庫連接。從一開始就打開連接,使用至結束,並在結束時關閉它。不要像這樣在函數內打開連接:
function add_to_cart(){
$db = new Database();
$db->query("INSERT INTO cart .....");
}function empty_cart(){
$db = new Database();
$db->query("DELETE FROM cart .....");
}
有多個連接也不好,會因為每個連接都需要時間來創建和使用更多的內存,而導致執行減緩。
在特殊情況下。例如資料庫連接,可以使用單例模式。