當前位置:
首頁 > 最新 > LAMP環境部署物聯網項目

LAMP環境部署物聯網項目

今天來在LAMP環境下搭建一個PHP項目,開始之前,先來普及下物聯網常識:

物聯網,即Internet of Things,簡寫IOT。讓所有能行使獨立功能的普通物體實現互聯互通的網路,通過物聯網可以用中心計算機對機器、設備、人員進行集中管理、控制,實現物物相連。近幾年物聯網在運輸、物流、健康醫療、智能環境(家庭、辦公、工廠)等領域都在迅速發展,前景打好。

B哥最近研究一個物聯網項目:基本功能就是要在web網站和手機app端實時監控硬體上發來的數據,用於分析、集中管理與控制,硬體是基於ARM的,web端是用php開發的,基本功能可以跑起來,現在主要在這基礎上實現自己的功能。上一節B哥已經在雲伺服器上搭建好LAMP環境(linux上安裝LAMP筆記),接下來就要把web項目部署好伺服器上。遇到了很多問題,在此一一記錄。

其中項目代碼結構如下:

先把項目傳到伺服器上,然後解壓:

用以下命令查看httpd、php、mariadb的版本:

分別為2.4.6、5.4.16、5.5.56

配置apache伺服器的時候httpd-vhosts.conf文件在/usr/share/doc/httpd-2.4.6目錄下

(windows上好像直接在conf/extra/下),

於是在/etc/httpd/conf/httpd.conf中加入:

include /usr/share/doc/httpd-2.4.6/httpd-vhosts.conf,

結果啟動時報錯了。於是就把

/usr/share/doc/httpd-2.4.6/httpd-vhosts.conf文件複製到/etc/httpd/conf/extra目錄下:

然後在extra下的httpd-vhosts.conf中添加如下配置:

DocumentRoot 為項目代碼路徑;

ServerName 服務別名,這裡設置為域名,但是得在host文件里配置對應的IP,IP即為當前節點IP;

然後在http.conf配置文件中包含httpd-vhosts.conf文件:

然後將域名綁定IP:

加入IP 域名,如下:

然後重新啟動httpd伺服器:

註:如果直接在windows上用域名訪問,得在windows的host里加IP 域名對應關係,但是加了以後訪問會報如下錯,因為域名得先備案才能用。所以下面都用IP訪問。

然後在本地windows瀏覽器里訪問http://120.79.147.88:80地址,報錯:

date(): It is not safe to rely on the system"s timezone settings:

然後在查到:

實際上,從 PHP 5.1.0 ,當對使用date()等函數時,如果timezone設置不正確,在每一次調用時間函數時,都會產生E_NOTICE 或者 E_WARNING 信息。而又在php5.1.0中,date.timezone這個選項,默認情況下是關閉的,無論用什麼php命令都是格林威治標準時間,但是PHP5.3中好像如果沒有設置也會強行拋出了這個錯誤的,解決此問題,只要本地化一下,就行了。

而我們使用的是PHP5.4版本,然後在php.ini文件中加入時區的配置:

加入以後,保存退出,重新啟動apache服務,刷新頁面,錯誤就解決了。

到這一步,說明項目部署流程已經打通,但是現在需要登錄,那麼肯定要在資料庫裡面先存入用戶名密碼等一些數據。接下來,先給資料庫里導入些初始化數據。

資料庫導入數據:

先重新啟動資料庫:

然後試著在本地windows上用Navicat資料庫管理工具導入sql腳本,用於資料庫的初始化(建庫、數據插入等),我習慣性的把埠寫為3306(資料庫默認埠),然後去連接,發現報錯了:

然後去查看3306埠是否監聽:

查不到東西,說明3306埠沒有監聽,這就奇怪了。然後登陸資料庫:

登陸進去查看資料庫埠:

發現查到的埠竟然是0,然後又查了資料,發現是啟動資料庫的時候加了skip-networking導致的,啟動時用了如下命令:

--skip-networking=0表示監聽配置埠,默認監聽3306,等於1或者--skip-networking不賦值表示跳過埠監聽,此時監聽0,網路不可訪問資料庫,只能資料庫節點訪問。可以通過以下命令查看:

發現是ON,說明開啟了skip_networking,接下來我們要關掉它。

查看mysql進程:

然後殺掉進程,重新啟動資料庫:

然後再來查看3306埠是否監聽:

發現埠正常監聽,然後登陸資料庫,查看:

發現port為3306,skip_networking為OFF,此時再在windows上連接資料庫,就ok了。

連接上資料庫後,就可以導入sql文件了:

導入以後,打開剛才的web登陸頁面,輸入用戶名和密碼,發現驗證碼圖片看不見:

然後去看運行日誌:

然後刷新驗證碼,報錯Call to undefined function Thinkimagecreate()

然後查看如下的說法:

在php中imagecreate函數是一個圖形處理函數,主要用於新建一個基於調色板的圖像了,然後在這個基礎上我們可以創建一些圖形數字字元之類的,但這個函數需要GD庫支持,如果沒有開啟GD庫使用時會提示Call to undefined function imagecreate()錯誤。

那就試著安裝一下GD庫吧,執行yum安裝gd命令,然後重新啟動apachce服務以使安裝後的GD庫生效。

然後刷新頁面,驗證碼就可以正常顯示了。登陸進去以後,又報錯了:Call to undefined function thinkmb_strlen()。

網上有人說,遇到上述錯誤,是未開啟php_mbstring拓展,即找到php.ini里的

;extension=php_mbstring.dll把前面的;去掉,但是找了發現沒有這個擴展配置,可能是因為版本較高的原因。在/etc/php.d目錄下也沒找到此擴展,然後就用yum安裝一個吧,然後重啟apache服務:

重啟以後登錄頁面後這個錯誤就沒了,但是又報另一個錯誤:

could not find driver

然後安裝php-mysql,安裝好後,重啟apache服務:

重新登錄頁面,這個錯誤也過去了。又報另一個錯誤:

SQLSTATE[28000] [1045] Access denied for user "iotadmin"@"localhost" (using password: YES)。

然後登陸資料庫,授權iotadmin用戶訪問許可權:

執行完以後,再次刷新頁面,報錯就過去了。接下來的又是另一個錯,錯誤如下圖:

進後台去看運行日誌10.log,報錯如下:

找到代碼Base.php的198行,如下:

代碼報錯:Arbitrary expressions in empty are allowed in PHP 5.5 only less,

大概意思就是說「不同類型的表達式用empty判空只有PHP5.5才」,而伺服器上安裝的是PHP5.4版本,所以就報這個錯。這裡不妨換一種方式寫,只要邏輯是一樣的。那就改成了這樣,原來的寫法先注釋掉。

然後把文件替換到伺服器對應路徑下,重啟apache服務,刷新頁面,一切OK。

到這裡web項目就正常跑起來了。一路走下來,步步是坑啊,做一下筆記,記錄一下坑,以後肯定會用到的。

如果對你有用,可以收藏一下,點個贊,留個言。能打賞那就更好了,你的支持是對我最大的鼓勵。

END

本文由「壹伴編輯器」提供技術支持


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 全球大搜羅 的精彩文章:

食遍陽春 狗肉
小米8的配置已經基本可以確定了

TAG:全球大搜羅 |