台灣最大程式設計社群網站
線上人數
1290
 
會員總數:244873
討論主題:188880
歡迎您免費加入會員
討論區列表 >> PHP >> 在fedora 24 php 上傳檔案移動失敗(move_uploaded_file)
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
在fedora 24 php 上傳檔案移動失敗(move_uploaded_file)
價值 : 100 QP  點閱數:1416 回應數:7

樓主

nick
門外漢
0 1
44 2
發送站內信

fedora 24 php 上傳檔案移動失敗
phpinfo如下
file_uploads On
max_file_uploads 20
upload_tmp_dir /tmp

move_uploaded_file($tempfiles, iconv("utf-8", "big5", $destination))
列出暫存檔 tempfiles= /tmp/phpPbSwkz
目的 destination= /empict/eedc4427b4d4ae4eff01655cb05e7d17.jpg
權限設定
/tmp 777
/empict 77
請賜教應該要注意、修改什麼?
謝謝!




搜尋相關Tags的文章: [ PHP move_uploaded_file ] ,
本篇文章發表於2016-11-01 22:24
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
1樓
不錯的參考

淺水員
檢舉此回應
我不確定原因,要不要把
改成
看看?

linux檔案系統應該是utf8,不需要特別換成Big5
本篇文章回覆於2016-11-02 00:12
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
回應

浩瀚星空
捐贈 VP 給 浩瀚星空 檢舉此回應
正常來講~~~
檔名的移轉並不需要特別做編碼轉換,要不然你有可能因為這樣而造成錯誤。

再加上,big5碼很容易有機會碰上程式錯誤的問題。(請參閱「許功蓋過錯」)

另外其實可以利用 rename() 來處理。我是習慣使用這個函數。
雖然它的用意是更改名,但其實它也可以拿來做移動檔案。且也比較不會碰上權限上的問題。(只要有700以上的權限就可以了)

對了~~~移動失敗正常因該有錯誤訊息,你要先確定是什麼訊息。
因為移動失敗會有很多種原因。
本篇文章回覆於2016-11-02 10:03
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
不錯的參考

可樂快跑
檢舉此回應
補充一下:
如果你的目的是希望檔案在下載回來時還原成big5編碼。
你應該要做的,是弄一張資料表,把檔案名稱和中文檔名都存進去(注意,存的時候都要是utf-8)
在download時,才重新組合檔名回來,這時才把檔名轉成big5……

不過我會建議的最好做法時……上傳的檔名還是不要存成中文吧!
本篇文章回覆於2016-11-02 11:34
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
作者回應

nick
檢舉此回應
各位大大好
在windowns環境下封行都OK,但移植到fedora 24 後,就移動失敗,PHP沒有錯誤訊息,
if (!move_uploaded_file($fileInfo['tmp_name'], i $destination))
exit('檔案移動失敗')
PHP 移動檔案是否要絕對或相對位置。
其他要注意事項為何?
本篇文章回覆於2016-11-02 12:02
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
回應

淺水員
檢舉此回應
剛剛想到 move_uploaded_file 不接受字串結尾是'\0'。
所以加上trim函數看看:

本篇文章回覆於2016-11-02 13:13
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
作者回應

nick
檢舉此回應
感謝各位大大熱心指導:
經小弟多次除錯,發覺PHP檔案處理函數,無法作用如:
move_uploaded_file
mkdir
unlink

是不是Fedora、Apache、php部份權限設定問題?
本篇文章回覆於2016-11-02 16:37
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
7樓
最有價值解答

浩瀚星空
捐贈 VP 給 浩瀚星空 檢舉此回應
一般來說,你的問題有兩種

1.檔案名的問題,基本上並不建議上傳中文名檔名。其實你如果輸出tempfiles的話
你也會發現到其檔名會自動幫你英數化,而不會用原來的檔案名稱。
其原因也就是編碼方面的問題。使用英數名稱檔名,就不用擔心這個問題。你也無需再做編碼化的處理。
其實#3已經有給你很好的建議。實體檔名就直接存英數檔名。然下載的實際中文檔名就存到資料庫內。供下載時重新處理檔名。
畢竟存在資料庫內的名稱就算是中文,只要是utf8編碼,都不會有問題的。

2.目錄的權限問題。大多數來說,只要目錄權限有600以上的權限。就可以做處理。如果會發生問題
可以先查看一下錯誤的代碼為何。大多數都是有如下的可能性
a.檔案不存在,這大多數是發生於tmp目錄為指定的情況下居多。不過一般如果是租用的空間。理當會幫你設定好才對。
不過某些免費空間的,有機會會給你鎖定不讓你上傳檔案。只允許使用ftp的方式。
像這種的,你不管程式怎麼寫都沒用的。怎麼給目錄權限也沒用。
基本上你要注意的是,ftp的帳號與web server的使用帳號要相同。
要不然你如果在ftp上設定的權限,跟web server使用的帳號不同。你怎麼設定也沒用。(雖然設為777因該也是可以使用)


可以的話,無論你是用move_uploaded_file、mkdir、unlink等相關檔案函數。
如失敗的情況下,你最好先了解它的失敗錯誤訊息為何,看是無權限還是無檔案。
這樣才有辦法知道你的實際問題為何。
本篇文章回覆於2016-11-02 16:52
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.