iT邦幫忙

0

PHP 檔案上傳問題

我有寫一個 ftp 上傳檔案的功能
程式碼如下

<?php
function ftp_upload($dict,$file)
{
	$fp = fopen($file, 'r');
	 
	### 連接的 FTP 伺服器是 localhost
	$conn_id = ftp_connect('127.0.0.1');
	 
	### 登入 FTP, 帳號是 USERNAME, 密碼是 PASSWORD
	$login_result = ftp_login($conn_id, 'user', 'pass');
	//進到 upload 目錄
	ftp_chdir($conn_id,$dict);
	//上傳
	if (ftp_fput($conn_id, $file, $fp, FTP_ASCII)) {
		echo "成功上傳 $file\n";
	} else {
		echo "上傳檔案 $file 失敗\n";
	}
	 
	ftp_close($conn_id);
	fclose($fp);
}
$file_data = 'zero/1.txt';
if(file_exists($file_data))
{
	echo '檔案存在';
}
else
{
	echo '檔案不存在';
}
echo '<hr>';
ftp_upload('/httpd-2.4.23-win64/Apache24/htdocs/cqm/test',$file_data);
?>

執行結果為

檔案存在
( ! ) Warning: ftp_fput() [function.ftp-fput]: Filename invalid in C:\wamp\www\cqm\ftp_upload.php on line 15
上傳檔案 zero/1.txt 失敗

請問這是什麼問題呢
如果我把 1.txt 放在和 ftp_upload.php 同目錄
就可以上傳成功

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

2
老鷹(eagle)
iT邦高手 1 級 ‧ 2017-01-26 10:20:11
//不要使用帶有目錄的路徑
ftp_fput()

建議先把檔案移到該目錄裡面,做兩次工!

ftp_fput()

mode

The transfer mode. Must be either FTP_ASCII or FTP_BINARY.

使用FTP_BINARY

以上感謝小雨大提供

看更多先前的回應...收起先前的回應...

看程式 $file_data 是 'zero/1.txt'
然後又說「如果我把 1.txt 放在和 ftp_upload.php 同目錄 就可以上傳成功」
那我判斷自己應該不知道正確答案
還是去準備過年好了
/images/emoticon/emoticon66.gif

/images/emoticon/emoticon28.gif

andyto202 iT邦研究生 4 級 ‧ 2017-01-26 12:07:35 檢舉

回海綿寶寶
目前的
ftp_upload.php
和要上傳 ftp 的檔案(1.txt)
都是在
cqm底下
差別在
1.txt又放在下一個目錄(cqm/zero)
結果就是無法上傳 ftp
我的意思是如果我把
1.txt 搬到跟
ftp_upload.php 一樣
都是放在cqm
這樣子就可以成功上傳 ftp 了

SO 多寫一隻程式來做搬移吧~~!

2
James
iT邦大師 6 級 ‧ 2017-01-26 12:25:49

看參數
ftp_fput ( resource $ftp_stream , string $remote_file , resource $handle , int $mode [, int $startpos = 0 ] )

所以你填$file參數的位置是$remote_file,而你的ftp server應該沒有zero目錄所以不能上傳。

我要發表回答

立即登入回答