2021年2月19日 星期五

解決 file_get_contents failed to open stream: Permission denied

用 file_get_contents($url) 取得遠端網站的網頁內容是非常常用的方法,它的好處就是非常簡單,它的缺點就是效能比curl要差的多。通常使用上都很順利,但是有時也會遇到

failed to open stream: Permission denied

這樣的錯誤,底下說明解決這個問題的歷程。

1.當遇到  file_get_contents 發生讀取不了資料時,先看看log是不是有哪些錯誤
log 可能是 /var/log/php/ /var/log/php-fpm /var/log/httpd /var/log/nginx 底下的任何有error的檔案

2.用phpinfo去檢查php.ini的配置,查看 allow_url_fopen 的狀態是不是 ON ,如果是OFF ,就要去php.ini (或php-fpm.ini) 修改,allow_url_fopen=0 改成 allow_url_fopen=1 然後重新啟動apapche或nginx 

3. 因為SELinux的作用,可以先把SELinux 關閉測試看看
用 setenforce 0 暫時性關閉,然後去執行原來的網頁程式,如果可以成功,就表示是SELinux的問題,但是我們不是要把 SELinux 關閉 ,所以先用 setenforce 1 將SELinux打開,然後去更改要用的值

getsebool -a 可以取得所有的值,用

getsebool -a| grep 'httpd' 可以找出和網站有關的是設定值

例如我發現  httpd_can_network_connect 是off ,那就是不能網外連結了,

所以用 setsebool -P httpd_can_network_connect on 打開就行了

 

沒有留言:

張貼留言