2017-09-18 1 views
0

リモートURLからサーバーにzipファイルをコピーして別のフォルダに展開するPHPコードがあります。PHPスクリプトがZipされたプロダクトフィードをURLからダウンロードしていない - ブラウザにアクセスしたときにうまく動作します

function extract_remote_zip($new_file_loc, $tmp_file_loc, $zip_url) { 
 
    
 
    echo 'Copying Zip to local....<br>'; 
 
    
 
    //copy file to local 
 
    if (!copy($zip_url, $tmp_file_loc)) { 
 
     echo "failed to copy zip from".$zip_url."..."; 
 
    } 
 
    
 
    //unzip 
 
    $zip = new ZipArchive; 
 
    $res = $zip->open($tmp_file_loc); 
 
    
 
    if ($res === TRUE) { 
 
     echo 'Extracting Zip....<br>'; 
 
     if(! $zip->extractTo($new_file_loc)){ 
 
      echo 'Couldnt extract!<br>'; 
 
     } 
 
     $zip->close(); 
 
     echo 'Deleting local copy....<br>'; 
 
     unlink($tmp_file_loc); 
 
     return 1; 
 
     
 
     
 
    } else { 
 
     echo 'Failed to open tmp zip!<br>'; 
 
     return 0; 
 
    } 
 
}

それはAWINとダウンロードから1つのURLで完璧に動作し、正しい600キロバイトのzipファイルを抽出しますが、Webgainsから別のと、それだけでサイズが0バイトのZipファイルをダウンロードします。私はダウンロードがどこかに壊れていると思っていますか?

ブラウザでURLにアクセスすると、ジップが完全にダウンロードされます(サイズは約3MBです)。 PHPでダウンロードすることはできません。

助けてください!

答えて

1

問題のURLを提供していないため、私は確かに言えませんが、コピーを使用してファイルを読み取る際に問題が発生する可能性があります。ダイレクトカールコールを行うと、これが解決されます。

は、以下試してみてください。

function file_get_contents_curl($url) { 

    $ch = curl_init(); 

    curl_setopt($ch, CURLOPT_AUTOREFERER, TRUE); 
    curl_setopt($ch, CURLOPT_HEADER, 0); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE); 

    $data = curl_exec($ch); 
    if (curl_errno($ch) <> FALSE) { 
    echo "ERROR at line " . __LINE__ . " in file_get_contents_curl: error number: " . curl_errno($ch) . ' error : ' . curl_error($ch) . " url: $url"; 
    return FALSE; 
    } 

    curl_close($ch); 

    return $data; 

} 

function extract_remote_zip($new_file_loc, $tmp_file_loc, $zip_url) { 

    echo 'Copying Zip to local....<br>'; 

    // read the zip 
    if ($zip_str = file_get_contents_curl($zip_url)) { 

     // write the zip to local 
     if ( !file_put_contents($tmp_file_loc, $zip_str)) { 
     echo "failed to write the zip to: " . $zip_url; 
     return FALSE;   
     } 

    } else { 
     echo "failed to read the zip from: " . $zip_url; 
     return FALSE; 
    } 

    //unzip 
    $zip = new ZipArchive; 
    $res = $zip->open($tmp_file_loc); 

    if ($res === TRUE) { 
     echo 'Extracting Zip....<br>'; 
     if(! $zip->extractTo($new_file_loc)){ 
      echo 'Couldnt extract!<br>'; 
     } 
     $zip->close(); 
     echo 'Deleting local copy....<br>'; 
     unlink($tmp_file_loc); 
     return 1; 


    } else { 
     echo 'Failed to open tmp zip!<br>'; 
     return 0; 
    } 
} 
+0

それは働きました!どうもありがとうございます!私は本当にcURLを使うことを学ぶ必要があります! –

関連する問題