我一般會選用源碼安裝 php,安裝 php 的過程指定要安裝的擴展,但是避免不了缺少某個擴展未安裝導致程序運行報錯的問題。以 fileinfo 為例,介紹一下怎麼添加 php 擴展。
1. 准備
通常遇到報錯:xxx function undefined,而這個函數是系統函數的話,那一定是你缺少某個擴展。添加擴展也非常簡單。首選要確認當前的 php 是哪個版本,不同版本的 php 擴展會有些許出入。然後找到 Php 源碼目錄,也就是從網上下載下來並且解壓的 php 文件包。添加擴展的時候需要在源碼包裡面去執行命令。
2. 安裝 fileinfo 擴展
1. 確認 php 版本
php -v
# PHP 7.4.4 (cli)
2. 找到 php 可執行文件的位置
whereis php
# php: /usr/local/php /usr/local/php/bin/php
可以看出 php 執行文件在 /usr/local/php/bin 目錄裡面
那麼嘗試執行 phpize,保證這個文件存在,phpize 命令在添加擴展的時候需要用到
/usr/local/php/bin/phpize -v
# Configuring for:
# PHP Api Version: 20190902
# Zend Mole Api No: 20190902
# Zend Extension Api No: 320190902
3.進入php源碼目錄
我的習慣是網路下載的軟體會放在 /usr/local/src 下面,
cd /usr/local/src/php-7.4.4
cd /etc
cd fileinfo
擴展都在源碼目錄的 etc 下面,裡面有 curl,gd,ftp 等等擴展目錄,我要安裝 fileinfo,所以到 fileinfo 目錄裡面
4.開始安裝
確定目錄下面有 config.m4 文件,如果沒有,應該會有 config0.m4 文件,把 config0.m4 復制一份為 config.m4,如果沒有這個文件,會報錯:can not found config.m4
/usr/local/php/bin/phpize
./configure
make && make install
如果這幾行命令運行下來都沒有報錯,那麼說明擴展文件已經生成,並且已經自動移入相應位置。接下來就是修改 php.ini,追加 extension=fileinfo.so 到 php.ini 中。
5.修改php.ini,載入擴展文件
查看 php.ini 的位置
php -i | grep php.ini
#Configuration File (php.ini) Path => /usr/local/php/etc
#Loaded Configuration File => /usr/local/php/etc/php.ini
可以看到 php.ini 的位置: /usr/local/php/etc/php.ini
vim /usr/local/php/etc/php.ini
#添加extension=fileinfo.so,保存
php -m | grep fileinfo
#fileinfo
看到輸出 fileinfo,至此,fileinfo 擴展安裝完畢!另外可以使用 pecl 命令安裝,更方便快捷!
⑵ 如何優雅的使用 phpStorm 開發工具
按照慣例依然是從網路上復制一條簡介: PhpStorm 是 JetBrains 公司開發的一款商業的 PHP 集成開發工具。PhpStorm可隨時幫助用戶對其編碼進行調整,運行單元測試或者提供可視化debug功能和智能HTML/CSS/javaScript/PHP編輯、代碼質量分析、版本控制集成(SVN、GIT)、調試和測試等功能。另外,它還是跨平台。在Windows和MacOS下都可以使用。PhpStorm-讓開發更智能,而不是更困難。
聽說phpStorm 10支持php7呃
優點
跨平台。
對PHP支持refactor功能。
自動生成phpdoc的注釋,非常方便進行大型編程。
內置支持Zencode。
生成類的繼承關系圖,如果有一個類,多次繼承之後,可以通過這個功能查看他所有的父級關系。
支持代碼重構,方便修改代碼。
擁有本地歷史記錄功能(local history功能)。
方便的部署,可以直接將代碼直接upload到伺服器。
總之它很牛逼就是了,什麼都能幹
快捷鍵
phpStorm有非常非常多並且好用的的快捷鍵,我下面就舉一些經常用的的快捷鍵演示,還有一些不常用的就不舉例了,絕對能提高你開發的效力率...
(Windows與Mac類似,只要把 command 鍵換成 ctrl )
查詢相關
command + f 查找當前文件
command + r 查找替換
command + e 打開最近的文件
command + shift + o 快速查詢文件
command + shift + f 關鍵字查找,更強大的查詢器(機器不好的,最好還是先確定一下目錄)
command + shift + r 高級替換
command + alt + b 找到當剪類的所有子類
alt + shift + c 查找最近修改的文件
alt + f7 直接查詢選中的字元
ctrl + f7 文件中查詢選中字元
command + 滑鼠點擊 跳到類或方法或變數等聲明處
command + shift + tab 切換tab頁文件
command + shift + +,- 展開或縮起
command + . 折疊或展開選中的代碼
自動代碼
alt + 回車 導入包,自動修正
command + n 快事為每個成員屬性生成 getter 及 setter 方法
ctrl + i 快速生成插入魔術方法
ctrol + o 復寫父類方法
command + alt + l 對當前文件進行格式化排版
command + d 復制當剪行
command + / // 注釋
command + shift + / / / 注釋
⑶ php開發需要學習什麼
學習php編程:
1.前段的基礎知識:html div+css
2.php基礎知識(面向過程),及mysql資料庫
3.js的相關知識,jQuery等
4.php高級部分(面向對象),及pdo數據處理
5.php特級部分(框架的應用)
………………………………………………………………………………
看你問的問題,應該是對php很感興趣,其實你可以自學php。關於如何學習php,我剛才看到一篇很不錯的文章,是一個專科生介紹自己如何自學php,並找到php的工作,裡面介紹了他的學習方法和學習過程,希望對你有幫助。
先做個自我介紹,我07年考上一所很爛專科民辦的學校,學的是生物專業,具體的學校名稱我就不說出來獻丑了。09年我就輟學了,我在那樣的學校,一年學費要1萬多,但是根本沒有人學習,我實在看不到希望,我就退學了。
退學後我也迷茫,大專都沒有畢業,我真的不知道我能幹什麼,我在糾結著我能做什麼。所以輟學後我一段時間,我想去找工作,因為我比較沉默寡言,不是很會說話,我不適合去應聘做業務。我想應聘做技術的,可是處處碰壁。
一次偶然的機會,我才聽到php這個行業。那天我去新華書店,在計算機分類那邊想找本書學習。後來有個女孩子走過來,問我是不是讀計算機的,有沒有興趣學習php,然後給我介紹了一下php現在的火熱情況,告訴我學php多麼的有前景,給我了一份傳單,php培訓的廣告。聽了她的介紹,我心裡癢癢的,確實我很想去學會一門自己的技術,靠自己的雙手吃飯。
回家後,我就上網查了下php,確實是當今比較熱門的行業,也是比較好找工作的,工資也是相對比較高。我就下決心想學php了。於是我去找php培訓的相關信息,說真的,我也很迷茫,我不知道培訓是否真的能像他們宣傳的那樣好,所以我就想了解一段時間再做打算。
後來,我在網路知道看到一篇讓我很鼓舞的文章是一個php高手介紹沒有基礎的朋友怎麼自學入門學php,文章寫的很好,包含了如何學習,該怎麼學習。他提到一個方法就是看視頻,因為看書實在太枯燥和費解的,很多我們也看不懂。這點我真的很認同,我自己看書往往看不了幾頁。
我在想,為什麼別人都能自學成才,我也可以的!我要相信自己,所以我就想自學,如果實在學不會我再去培訓。
主意一定,我就去搜索php的視頻,雖然零星找到一些php的視頻,但是都不系統,我是想找一個能夠告訴我該怎麼學的視頻,一套從入門到精通的視頻,一個比較完整的資料,最好能有老師教,不懂可以請教的。
後來我又找到一份很好的視頻,是在IT學習聯盟推出的一份視頻《零基礎php就業班》(喜歡《零基礎php就業班》的可以復制 t.cn/8s1Z7Of 粘貼瀏覽器地址欄按回車鍵即打開)。裡面的教程還不錯,很完整,還贈送10個頂級企業項目。
下面介紹下我的學習流程,希望對和我一樣完全沒有基礎的朋友有所幫助。
收到他們寄過來的光碟後,我就開始學習了,由於我沒有什麼基礎,我就從最簡單的Html/css/javascript視頻教程學起,話說簡單,其實我還是很多不懂的,只要重復多看幾遍,就能看懂。Html/css/javascript我差不多學了一個禮拜,接下來我就學了PHP基礎和Mysql資料庫,差不多也就三個禮拜。我每天都在不停的寫一些簡單的代碼,這樣一月後我基本掌握了php的全部基礎。
接下來開始學習php高級課程,老師幽默風趣而又輕松的課堂教課,使我發現原來學習php並不是一件很難的事情。之前我把php基礎學得還不錯,到了到了php高級部分,我覺不又不是很難,可能老師太牛了,他能把復雜的問題講的比較通俗易懂,有些難點的地方我還是連續看了五六次,把他弄懂。每天下午6點下班後,吃了飯,馬上跑回家。看視頻,買了幾本筆記本。當時,為了編程還花幾百元了台二手的台式電腦,配置一般,但編程是足夠的。一邊看視頻,一邊記筆記,把重點都記下來,還一邊跟著老師敲代碼,為了能盡早學會php。每天都堅持學5-6個小時。經常學到晚上一點多才睡覺。星期六,日不用上班,每天7點多起床,學到晚上11,12點。那段時間特別辛苦,特別累。在學習php的三個多月里,除了吃飯睡覺工作,剩餘的時間都在學習,因為我知道自己的計算機基礎不是很好,也沒有學過什麼計算機,相對於那些科班的人來說我要比他們付出更多的努力。我只能咬緊牙關,堅持下去,我不能放棄,我要完成我的夢想,我要讓我的家人過上好日子。終於三個多月後我把php教程里的內容和項目都學完了,在學項目的過程中我發現項目特別重要,他能把你學過的知識全部聯系起來,能更好的理解你所學的知識。還有學習過程中,動手很重要,要經常跟著老師動手敲,動手吧,跟著做,一行一行的跟著敲,再試著加一些自己的功能,按照自己的思路敲一些代碼,收獲遠比干聽大的多。 如果遇到暫時對於一些思路不能理解的,動手寫,先寫代碼,慢慢你就會懂了。這套視頻還贈送了10個頂級企業項目,對於我沒有任何經驗的人來說,這個太重要了,還有在學習項目是提升能力最快的方法。項目能把所有的知識點全都連到一起了,不再是分散的,而是形成一個整體了。那種感覺是僅僅深入鑽研知識點而不寫真實項目的人所不能體會的。一個項目就是一根繩子可以把大片的知識串到一起。 就這樣,我用了兩個月也把項目給學完了。其實學完教程差不錯就達到就業水平,但是我可能覺得自己學歷低還是把那10個頂級企業項目才去找工作。
於是我就到51job瘋狂的投簡歷,因為我學歷的問題,專科沒有畢業,說真的,大公司沒有人會要我,所以我投的都是民營的小公司,我希望自己的努力有所回報。沒有想過幾天過後,就有面試了,但是第一次面試我失敗了,雖然我自認為筆試很好,因為我之前做了准備,但是他們的要求比較嚴格,需要有一年的項目經驗,所以我沒有被選中。
後來陸續面試了幾家公司,終於功夫不負有心人。我終於面試上的,是在閔行的一家民營的企業,公司規模比較小,我的職務是php開發程序員,但我也比較滿足,開的工資是3500一個月,雖然我知道在上海3500隻能過溫飽的生活,但是我想我足夠了。我至少不用每天都要靠父母養,我自己也能養活自己的。我想只要我繼續努力,我工資一定會翻倍的。
把本文寫出來,希望能讓和我一樣的沒有基礎的朋友有信心,其實我們沒有必要自卑,我們不比別人笨,只要我們肯努力,我們一樣會成功。
………………………………………………………………
希望你未來成為出色的php程序員。
⑷ 如何用C語言編寫PHP擴展的詳解
1:預定義
在home目錄,也可以其他任意目錄,寫一個文件,例如caleng_mole.def
內容是你希望定義的函數名以及參數:
int a(int x,int y)
string b(string str,int n)
2:到php源碼目錄的ext目錄
#cd /usr/local/php-5.4.0/ext/
執行命令,生成對應擴展目錄
#./ext_skel --extname=caleng_mole --proto=/home/hm/caleng_mole.def
3:修改config.m4
去掉dnl的注釋
PHP_ARG_ENABLE(caleng_mole, whether to enable caleng_mole support,
Make sure that the comment is aligned:
[ --enable-caleng_mole Enable caleng_mole support])
4:修改caleng_mole.c
代碼如下:
/* {{{ proto int a(int x, int y)
*/
PHP_FUNCTION(a)
{
int argc = ZEND_NUM_ARGS();
int x;
int y;
int z;
if (zend_parse_parameters(argc TSRMLS_CC, "ll", &x, &y) == FAILURE)
return;
z=x+y;
RETURN_LONG(z);
}
/* }}} */
/* {{{ proto string b(string str, int n)
*/
PHP_FUNCTION(b)
{
char *str = NULL;
int argc = ZEND_NUM_ARGS();
int str_len;
long n;
char *result;
char *ptr;
int result_length;
if (zend_parse_parameters(argc TSRMLS_CC, "sl", &str, &str_len, &n) == FAILURE)
return;
result_length = str_len * n;
result = (char *) emalloc(result_length + 1);
ptr = result;
while (n--) {
memcpy(ptr, str, str_len);
ptr += str_len;
}
*ptr = '