遷移伺服器後 PHP上傳檔案失敗
公司的原來的伺服器到期了,然後換到了新的伺服器上,程式執行發現上傳檔案失敗。初步判斷不是程式碼的問題,因為程式碼是複製過來的
然後 我自己 查詢這個地方的上傳圖片的路徑
自己寫測試程式碼 測試是否可以在這個資料夾下面 建立資料夾
$dir = iconv("UTF-8", "GBK", "Public/testFiles/sunsijia189");
if (!file_exists($dir)){
try {
$res = mkdir ($dir,0777,true);
} catch(ErrorException $ex) {
echo "Error: " . $ex->getMessage();
dump($res);
echo '建立資料夾成功';
} else {
echo '需建立的資料夾已經存在';
}
這個testFiles是軟連線
連結到了專案外面 如果實在public下面 建立資料夾 是可以的
連結到外面就不行了
然後 命令列 執行是可以的 瀏覽器訪問這個方法 就不行
然後 就是判斷 看看執行使用者的差別
命令列是root執行的 瀏覽器訪問 是www執行的
然後檢視專案路徑
最後 百度到了 open_basedir php授權目錄設定
然後 我到我的php.ini裡面 檢視 發現我這裡是沒有啟用的
然後在交流群裡面 諮詢
孫思佳:
@暖冬 我這個是因為 執行檔案的使用者 不一致 導致的 吧
暖冬:
現在不確定了。可以先把public改成777,看看能否建立
深圳-PHP-藍風:
我個人覺得這個就是兩方面的問題,首先是使用者許可權問題,其次是fpm模式下可操作目錄範圍的問題
深圳-PHP-藍風:
你用fpm模式做專案的時候,只需要始終牢記,php程序的使用者許可權就是/path/to/php/etc/php-fpm.d/www.conf中user和group這兩個配置項規定的就可以了
深圳-PHP-藍風:
至於命令列操作,在沒有主動切換使用者的情況,使用者許可權就是當前執行命令的使用者所有的許可權
孫思佳:
其次是fpm模式下可操作目錄範圍的問題 我覺得是這個問題
孫思佳:
我現在是在public 專案下面 建立資料夾 就可以
孫思佳:
但是現在是 軟連結到了 專案外
孫思佳:
就建立不了了
暖冬:
open_basedir 檢查一下有沒有設定這個
暖冬:
var_dump(ini_get('open_basedir'))
孫思佳:
[圖片]
暖冬:
你設定了這個,所以寫不了
孫思佳:
我看這個了呀 我的php.ini 裡面沒有設定呀
孫思佳:
我感覺也是這個的問題了、
暖冬:
腳本里面設定了吧
孫思佳:
我擦 這個是在哪裡設定的呀 我找找
暖冬:
或者是 php-fpm.d/www.conf php_admin_value[open]
暖冬:
你先 ini_set 為空測試一下
深圳-PHP-藍風:
這個配置一般是在nginx上設定的
孫思佳:
我去找找
暖冬:
All symbolic links are resolved, so it's not possible to avoid this restriction with a symlink.
暖冬:
符號連線會被處理為真實路徑,不再 open 範圍內就完蛋
暖冬:
我都不設定這個的
孫思佳:
[圖片]
孫思佳:
這個吧
孫思佳:
我給遮蔽了 還不行呢
暖冬:
重啟了?
深圳-PHP-藍風:
額,遮蔽了做毛線啊?
孫思佳:
額 不是遮蔽嗎
深圳-PHP-藍風:
不能遮蔽,遮蔽就會用預設值,你應該是把你要操作的那個目錄加進去
孫思佳:
哦
然後發現 這個是在nginx裡面設定的
我把我的軟連線的目錄 加上這個授權的目錄 裡面了 就可以了