1

こんにちは仲間のstakoverflowers、

PHP/Apacheに問題があります。管理者が100Mbのファイルをアップロードできるようにするアプリケーションがあります。アップロードはうまくいきますが、ダウンロードに問題があります。

小さいファイル(50Mbファイルでテスト済み)では完全に機能しますが、何らかの理由で100Mbファイルを取得できません。

これが私のphpコードです

$extension = 'zip'; //for testing

switch ($extension) {
  case "dwg": $contentType="image/vnd.dwg"; break;
  case "dxf": $contentType="image/vnd.dxf"; break;
  case "pdf": $contentType="application/pdf"; break;
  case "zip": $contentType="application/zip"; break; 
  case "png": $contentType="image/png"; break; 
  case "jpeg": $contentType="image/jpeg"; break; 
  case "jpg": $contentType="image/jpg"; break; 
  case "gif": $contentType="image/gif"; break; 
  default: 
    $contentType = '';
}

@header("Content-type: " . $contentType);
@header("Content-Disposition: attachment; filename=$filename");
@header("Cache-Control: no-cache, must-revalidate");
@header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // passed date

echo file_get_contents($url);

SOで見つけた他のソリューションも試しました。

header('Content-Description: File Transfer');
header('Content-Transfer-Encoding: binary');
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: public");
header("Content-type: " . $contentType);
header("Content-Disposition: attachment; filename=\"".$filename."\"");
header("Content-Length: ".filesize($url));

echo self::url_get_contents(URL_PUBLIC . $url);

...

private function url_get_contents ($url) {
    if (!function_exists('curl_init')){ 
        die('CURL is not installed!');
    }
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        $output = curl_exec($ch);
    curl_close($ch);
        echo $output;
    return $output;
}

または

$file_contents = fopen($url, "r");
echo $file_contents;
fclose($file_contents);

すべてのソリューションは同じものを返します。ファイルサイズは0Kbです。私が言ったように、小さいサイズのファイルは機能します。

また、ローカルでテストすると、100 Mbサイズのファイルが正しくダウンロードされるため、問題はサーバーにあると推測されます。php.iniを次のように変更しました

register_globals = Off
magic_quotes_gpc = Off
post_max_size = 128M
memory_limit = 256M
upload_max_filesize = 128M
max_execution_time = 120
expose_php = off
session.save_path = /tmp
mysqli.default_socket = /tmp/mysql5.sock
mysql.default_socket = /tmp/mysql5.sock

おそらくメモリ制限の問題ですが、確かではありません。

4

1 に答える 1

1

私は以前に同様の問題を抱えていました。私の問題はホスティングプロバイダーであることが判明しました。スクリプトの実行に時間がかかりすぎると、ホスティングプロバイダーは通常スクリプトをシャットダウンします。phpMyAdminを介して大きなSQLスクリプトをアップロードしようとしたときに、同じ問題が発生しました。

于 2012-12-05T16:24:23.387 に答える