2015-09-05 86 views
1

只是一個簡單的介紹/背景資料:FTP文件上傳successefully但沒有出現在服務器

這可以被看作是part 2 of my question from yesterday其中@弗雷德-II是非常有益的。我已成功地糾正文件路徑錯誤等

我的問題

如前所述上面,我是成功的文件上傳到服務器(或者至少得到成功消息),但是當我檢查的文件它不在那裏..?事實上,我已經很好地整理了上傳文件的整個服務器,但沒有看到上傳的文件。

所有文件都具有適當的權限,是否有任何可以導致此問題,除了文件權限?

也許我必須在php.ini中更改...但是再次我不會收到上傳成功消息..?

過去有沒有人遇到過這種情況?

$file_upload="true"; 
$file_up_size=$_FILES['file_up']['size']; 
echo $_FILES['file_up']['name']; 

if ($_FILES['file_up']['size']>250000){ 
    $msg=$msg."Your uploaded file size is more than 250KB 
so please reduce the file size and then upload.<BR>"; 
$file_upload="false"; 
} 

if (!($_FILES['file_up']['type'] =="image/jpeg" OR $_FILES['file_up']['type'] =="image/gif")) 
{ 
    $msg=$msg."Your uploaded file must be of JPG or GIF. Other file types are not allowed<BR>"; 
$file_upload="false"; 
} 

$file_name=$_FILES['file_up']['name']; 

if($file_upload=="true"){ 

$ftp_server = "xxxxxxx"; 
$ftp_conn = ftp_connect($ftp_server) or die("Could not connect to $ftp_server"); 
$ftp_username = "xxxxxx"; 
$ftp_userpass = "xxxxxx"; 
$login = ftp_login($ftp_conn, $ftp_username, $ftp_userpass); 
if($login){ 
    echo '<h1>CONNECTED TO FTP</h1>'; 
$file = $file_name; 

// upload file 
if (ftp_put($ftp_conn, $file, 'img/userPics/', FTP_BINARY)) 
    { 
    echo "Successfully uploaded $file."; 
    } 
else 
    { 
    echo "Error uploading $file."; 
    } 
}//if file upload == true 
}//if result 
// close connection 
ftp_close($ftp_conn); 
+0

[你應該怎麼做當有人回答你的問題](http:// stackoverflow。com/help/someone-answers)你可以得到積分。 – RiggsFolly

回答

1

上傳文件或多個文件時首先要做的一件事就是檢查上傳錯誤。

// Check $_FILES['file_up']['error'] value. 
$file_upload=true; 
switch ($_FILES['file_up'']['error']) { 

    case UPLOAD_ERR_INI_SIZE: 
     echo 'The uploaded file exceeds the upload_max_filesize directive in php.ini.'; 
     $file_upload=false; 
     break; 
    case UPLOAD_ERR_FORM_SIZE: 
     echo 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form.'; 
     $file_upload=false; 
     break; 
    case UPLOAD_ERR_PARTIAL 
     echo 'The uploaded file was only partially uploaded.'; 
     $file_upload=false; 
     break; 
    case UPLOAD_ERR_NO_FILE: 
     echo 'No file was uploaded.'; 
     $file_upload=false; 
     break; 
    case UPLOAD_ERR_NO_TMP_DIR: 
     echo 'Missing a temporary folder.'; 
     $file_upload=false; 
     break; 
    case UPLOAD_ERR_CANT_WRITE: 
     echo 'Failed to write file to disk.'; 
     $file_upload=false; 
     break; 
    case UPLOAD_ERR_EXTENSION: 
     echo 'A PHP extension stopped the file upload.'; 
     $file_upload=false; 
     break; 
} 

if (! $file_upload) { 
    // no file so do whatever is appropriate on upload fail 

    exit; 
} 
// then the rest of your code 

還要注意,我改變$file_upload="false";$file_upload=false;它更好的使用真正的布爾值=true=false而不是一個字符串,那麼你可以測試他們只需使用if ($file_upload)問是trueif (! $file_upload)要求是它false

希望這可以確定上傳過程中實際發生了什麼問題。

現在到您的代碼中的其他錯誤!

最明顯的是,您正在從$file_name=$_FILES['file_up']['name'];獲取用戶上傳的文件的文件名,但這只是名稱而不是上載文件實際存在的位置。

PHP上傳過程是一個2階段過程,瀏覽器發送文件並將PHP存儲在臨時文件中。然後你的代碼運行,你得到驗證和檢查大小和文件類型等等。然後,你應該將臨時文件移動到文件系統上的一個permanant文件使用move_file_upload()

現在,因爲你實際上並沒有存儲這個文件在系統上,你可以大概算了這一步,但是這意味着你FTP到其他服務器的文件shoudl從$_FILES['file_up']['tmp'];

中發送,從而改變這一行

$file_name=$_FILES['file_up']['name']; 

$file_name=$_FILES['file_up']['tmp']; 

然後至少你會通過你的FTP連接發送一個真實的文件。

+0

感謝里格斯的努力,真的很感激,我會給它一個鏡頭,讓你知道 – Marilee

+0

Riggs我實現了你的解決方案,並將「false」改爲布爾值......它只是如此令人沮喪,我沒有得到任何錯誤郵件完全上傳成功,但無法在服務器上找到...它只是很奇怪 – Marilee

+0

看到我的回答,我已經添加了一些關於其他錯誤的更多信息。此外,它看起來並不像你實施@ Fred-ii-建議中的許多 – RiggsFolly