2011-10-20 45 views
0

我遇到了PHP的一些奇怪問題。我有一個PHP腳本,執行文件上傳到我的服務器和他們,將其傳輸到遠程服務器。代碼是正確的,因爲它的工作原理。問題是它並不總是工作。大多數時候,它只是返回一個內部服務器錯誤。我的錯誤日誌只是說它發生了404錯誤,但我沒有做任何「Header」命令。它只是將一些HTML和Javascript與Iframe相呼應。當發生錯誤時,文件在遠程服務器中被切斷,所以我真的不知道錯誤發生在哪裏。我想這是我的服務器上的一些配置錯誤,因爲我已經嘗試了MAMP中的相同腳本,並且它的工作完美無缺。任何人都可以幫助我至少,以獲得它拋出的錯誤,以便我知道從哪裏開始?使用PHP將文件傳輸到另一臺返回「內部服務器錯誤」的服務器

我知道這有點簡單,但我對PHP沒有多少經驗,因爲我和其他語言一樣。

這裏是我的代碼:

<?php 

//Uploads a file 

$target_path = "uploadedMp3/"; 

$target_path = $target_path . basename($_FILES['uploadedfile']['name']); 

$returnMessage = ''; 

if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path)) 
{ 
    //FTP the file to VM Link 

    $ftp_ip   = MY_IP; 
    $ftp_username = MY_USER_NAME; 
    $ftp_password = MY_PASSWORD; 

    if($ftp=ftp_connect($ftp_ip,21,3600)) 
    { 
     if(ftp_login($ftp,$ftp_username,$ftp_password)) 
     { 

      // Set to PASV mode 

      ftp_pasv($ftp, 1); 


      ftp_chdir($ftp,"/mp3/"); 


      // Send the file 

      //set_time_limit(-1);  // PHP won't timeout 
      //ignore_user_abort(true); 
      ini_set('upload_max_filesize', '50M'); 
      ini_set('post_max_size', '50M'); 

      $upload = ftp_put($ftp, $_FILES['uploadedfile']['name'],$target_path , FTP_BINARY); 


      $returnMessage .= "0##The file has been uploaded"; 

     } 
     else 
     { 
      $returnMessage .= "-1##Ocorreu um erro de conexão com o servidor remoto. Entre em contato com a Mobilevel para mais informações.(1)"; 
     } 
     ftp_close($ftp); 

    } 
    else 
    { 
     $returnMessage .= "-1##Ocorreu um erro na conexão com o servidor remoto. Entre em contato com a Mobilevel para mais informações.(2)"; 
    } 
} 
else 
{ 
    $returnMessage .= "-1##Ocorreu um erro no Upload, tente novamente. Se o problema persistir entre em contato com a Mobilevel."; 
} 

unlink($target_path); 
echo "<html><head>"; 
echo "<scr"; 
echo "ipt type=\"text/javascript\">parent.uploadCallback('" . $returnMessage . "');</scr"; 
echo "ipt>"; 
echo "</head><body>"; 
echo "</body></html>"; 
/* 
echo "<scr"; 
echo "ipt type=\"text/javascript\">parent.uploadCallback('" . $returnMessage . "');</scr"; 
echo "ipt></html>"; 
*/ 

?> 

回答

0

500內部錯誤記錄到日誌服務器的錯誤日誌。去那裏看看爆炸的細節。

但是請注意,

 ini_set('upload_max_filesize', '50M'); 
     ini_set('post_max_size', '50M'); 

在文件上傳處理腳本是無用的。這些指令所在的腳本在上傳完成(或失敗)之後纔會被執行。當PHP實際將控制交給腳本時,上傳已經完成或失敗。

這些覆蓋必須在.htaccess/httpd.conf級別通過php_value指令完成,或在php.ini中完成。

你還沒有檢查上傳是否成功。如果由於某種原因失敗,您move_uploaded_file()命令是要失敗的,因爲沒有文件移動

在最低限度,你的腳本應該以這樣開始:

if ($_FILES['uploadedfile']['error'] !== UPLOAD_ERR_OK) { 
    die("Upload failed with error code " . $_FILES['uploadedfile']['error']); 
} 

錯誤代碼都記錄here。 請注意,您的代碼也未檢查是否存在任何文件衝突 - 它將默默覆蓋任何現有文件與上傳的文件。

+0

這只是一個404被記錄,表明Apache無法找到它被告知在'ErrorDocument 500'指令中使用的文件。 –

+0

我添加了上面提到的檢查文件上傳成功的行。但主要問題似乎是在ftp文件傳輸過程中。我也添加了碰撞檢查。返回錯誤或不錯,文件至少部分被轉移到遠程服務器。這並不是超時,因爲我已經測量過,並且錯誤發生在不同的經過時間,但是當它成功時,大約需要2分鐘來傳輸文件。 –

相關問題