前言 這個記錄總的來說分兩部分: 搭建環境。 簡單使用教程。 搭建環境 安裝 ZeroMQ 庫 首先 PHP 很早之前就安裝了, 是以我不想選擇重新編譯 PHP , 而是想用動态加載子產品的方法來添加這個庫。 正好 zmermq 的官網介紹的有,于是我學會了動态給php安裝庫。
這個記錄總的來說分兩部分:
搭建環境。
簡單使用教程。
首先 PHP 很早之前就安裝了, 是以我不想選擇重新編譯 PHP , 而是想用動态加載子產品的方法來添加這個庫。
正好 zmermq 的官網介紹的有,于是我學會了動态給php安裝庫。
不過安裝 php 版本的 zmq 子產品之前, 需要有 c++ 版本的 zmw 庫。
于是先安裝 c++ 版本的庫。
然後安裝 php 版本的子產品, 和普通安裝隻多了一步: phpize
下載下傳位址在 github 上
這個可以看上面的兩個代碼的差別。
由于 make 的時候就隻編譯有修改的檔案鍊, 而我們的檔案什麼也沒有修改, 是以不會重新編譯。
這個時候就要使用 <code>make -B</code> 強制重新編譯了。
大概錯誤如下
stackoverflow 上找到三個類似的問題 這裡, 這裡, 還有這裡 stackoverflow3.
他們的大概結論就是配置檔案的問題。
而且他們提示指令行可以正常執行的,于是我嘗試在指令行試試,結果真的可以的。
而且 他們都是強調php有兩個配置檔案, 一個是 指令行使用的, 一個是 apache 使用的, 但是我使用 <code>whereis php</code> 找到有 php 的地方, 然後去看, 隻有 <code>/etc/php.ini</code> 這一個地方有。
于是我猜想:最大的可能就是 apache 沒有使用 <code>/etc/php.ini</code> 這個配置檔案。
但是當時我想着指令行能用,就先用指令行吧。
先讓整個用戶端能夠運作起來在說,于是我不管這個問題了。(最後還需要面對這個問題,并找到原因解決了,詳見下面)
protobuf 在 google 的官網上沒有找到 php 版本的源碼, 隻在 github 上找到兩個, 我選擇了 這個。
然後下載下傳安裝
然後指令行可以正常運作了。
由于我隻是在 php 下作為用戶端連結其他地方的服務端, 這裡隻記錄用戶端的使用方法。
看下面的代碼之前可以先看看之前我記錄的一篇 ZMQ 簡單記錄。
語言是相同的,是以了解了一個語言,其他語言很快也能上手的。
首先編寫自己的協定,比如簡單的登陸協定, 儲存為 proto 字尾的檔案,比如 test.proto .
然後使用 protoc-php.php 對我們的協定進行轉換
這個 protoc-php.php 檔案在上面我說的 github 上可以找到, ProtobufCompiler 也要下載下傳的。
執行完之後會輸出一個 php 的檔案, 裡面是用 php 封裝好的我們的協定類。
最後就是使用我們的協定類了。
最終, php 下的 zeromq 和 protobuf 都可以正常運作了, 隻不過是在指令行下運作的。
然後我無意間看到有人說配置檔案不對, 編譯庫的時候需要指定 php-config 。
于是我嘗試了一下
然後浏覽器中竟然沒有 提示找不到 <code>ZMQContext</code> 了。
但是出現了新的問題, 提示: 找不到 ProtobufMessage。
于是使用相同的方法對 protobuf 進行編譯。
good, 沒有提示找不到 ProtobufMessage 了。
但是提示 <code>undefined symbol: zend_new_interned_string in Unknown on line 0</code> .
于是我開始大量的查詢資料了。
第一個是這裡 和 這裡, 但是我這子產品不是通過 pecl 安裝的,是以無效。
但是我還是執行了 <code>php -v</code> 這個參數,提示我是 5.3.3 版本的 php.
然後我又在這裡 和 這裡, 沒有解決問題。
但是它提示我檢視 phpinfo 這個倒是需要做一下。
然後我發現我的 php 版本是 5.6 .
此時我意識到一個問題: 我的這台開發機上安裝了有兩個 php 程式。
當然,我起初搜到這裡, 這裡, 還有這裡,還有這裡,大家都說是 bug, 現在看來不是 bug 了。
既然确定是有兩個 php 版本的緣故, 那就需要先把版本保持一緻再說。
于是我采用比較暴力的方法, 把 <code>/usr/local/php/bin/</code> 裡的檔案複制一份到 <code>/etc/bin/</code> 下面。
當然,覆寫前先把原先的檔案備份一下。
這樣不需要指定路徑再重新編譯一下, 重新開機 apache, 浏覽器通路發現可以正常傳回結果了。
出現這些問題了, 先确認是不是配置檔案的問題, 不是了再确認是不是版本的原因。
《完》
申明
非源創博文中的内容均收集自網上,若有侵權之處,請及時聯絡,我會在第一時間内删除.再次說聲抱歉!!!
博文歡迎轉載,但請給出原文連接配接。