2011-10-20 14 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

これは、Apacheが「ErrorDocument 500」ディレクティブで使用するように指示されたファイルを見つけることができないことを示すために記録された404です。 –

+0

上記の行を追加して、ファイルアップロードの成功を確認しました。しかし、主要な問題は、ftpファイル転送中のようです。私は衝突チェックを追加しました。エラーを返すかどうかに関わらず、ファイルは少なくとも部分的にリモートサーバーに転送されます。私はどちらかを測定し、異なる経過時間にエラーが発生するため、タイムアウトではありませんが、成功すると、ファイルを転送するのに約2分かかります。 –

関連する問題