1. 程式人生 > 實用技巧 >遷移伺服器後 PHP上傳檔案失敗

遷移伺服器後 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裡面設定的

我把我的軟連線的目錄 加上這個授權的目錄 裡面了 就可以了