發表文章

目前顯示的是 八月, 2013的文章

解決 mongodb 無法啟動的問題

某天起床後 mongo 忽然活不回來了
查了一下錯誤訊息的 log:

Docs: https://docs.mongodb.org/manual
  Process: 120107 ExecStart=/usr/bin/mongod $OPTIONS (code=exited, status=1/FAILURE)
  Process: 120104 ExecStartPre=/usr/bin/chmod 0755 /var/run/mongodb (code=exited, status=0/SUCCESS)
  Process: 120101 ExecStartPre=/usr/bin/chown mongod:mongod /var/run/mongodb (code=exited, status=0/SUCCESS)
  Process: 120099 ExecStartPre=/usr/bin/mkdir -p /var/run/mongodb (code=exited, status=0/SUCCESS)

 1月 15 04:01:26 foso-test systemd[1]: Starting MongoDB Database Server...
 1月 15 04:01:29 foso-test mongod[120107]: about to fork child process, waiting until server is ready for connections.
 1月 15 04:01:29 foso-test mongod[120107]: forked process: 120112
 1月 15 04:01:29 foso-test systemd[1]: mongod.service: control process exited, code=exited status=1
 1月 15 04:01:29 foso-test systemd[1]: Failed to start MongoDB Database Server.



看起來應該是權限的問題: 發現很多人都遇到相同的狀況,主要有兩個資料夾勢必要擁有 mongod 這個權限擁有才可以。 所以大部分的解決說明都是這樣作:
chown -R mongod:mongod …

讓 PHP 接收 post 的 json 資料

我們在串接API的時候會用到 CURL 函式 POST 資料給 JSON 接收,雖然我們是使用 POST 傳出資料。但是我們在接收的 SERVER 端使用 $_POST 卻抓不到任何資料。

原來 PHP 默認只支援 application/x-www.form-urlencoded 來把資料塞入到  $_POST  所以即便你用 POST 傳值過來,也不能用 $_POST 來取值。
這時候我們就要用 $GLOBALS['HTTP_RAW_POST_DATA'] 來取得資料了。因為其實SERVER端是有拿到資料的,所以用這個參數就可以拿到"完整"資料。


後記:
後來又出現了一個問題,$GLOBALS['HTTP_RAW_POST_DATA'] 如果要可以正確取得資料,需要去把 php.ini 中的功能打開,這對很多專案中客戶是採用虛擬主機的是一個很大的問題。好險有另一個方式也可以取得原始的 post 資料:


echo $data = file_get_contents("php://input");