2011-07-18 8 views
4

リモートサーバからイメージを取得してHTML5 canvas APIを使用して操作できるPHPスクリプトがあります。file_get_contentsはプロダクションサーバでは動作しません。ローカルでは細かい

<?php 
if ((isset($_GET['url']))) { 
    $url = $_GET['url']; 
    $file_format = pathinfo($url, PATHINFO_EXTENSION); 
    try 
    { 
     header("Content-Type: image/$file_format"); 
     header("Content-disposition: filename=image.$file_format"); 
     $img = file_get_contents($url); 
     echo $img; 
    } 

    catch(Exception $e) 
    { 
     echo $e->getMessage(); 
    } 
} 

else die('Unknown request'); 
?> 

典型的な要求は次のようになります。

fetch_image.php?url=http://example.com/images/image.png 

すべては私のローカルサーバー上で正常に動作しますが、運用サーバは、私は、このエラーを与える:

NetworkError: 500 Internal Server Error.

エラーログレジスタにこれをメッセージ:

PHP Warning: Cannot modify header information - headers already sent.

私は提案のいくつかを試してみましたが、そのは動作していない:

allow_url_fopen = 1 
+0

完全なスクリプト( '<?php'タグを含む)を貼り付けてください。 – Dogbert

+0

は、間違ったパスのように聞こえます –

+0

エラーは何行目にありますか?正確なエラーメッセージも投稿してください。 – Dogbert

答えて

11

サーバがファイル機能を持​​つリモートURLを開くことができることを確認します(php.ini "allow_url_fopen"設定は "true"にする必要があります)。

1

は、スクリプトの終了時に初めに

ob_start() 

ob_end_flush() 

を試してみてください。また、<?phpの前にスクリプトに文字が含まれていないことを確認してください。

0

コンテンツの出力を開始すると、ヘッダーが送信されます。したがって、上記のコードの前のどこかで、コンテンツがエコーアウトされます(PHPまたはプレーンHTMLまたはjavascriptから)。あなたはどこでそれが起こるかを探し出す必要があります。

1

セキュリティ上の理由から、ホスティングプロバイダがリモートURL取得を無効にしていないことを確認する必要があります。設定はallow_url_fopenで、phpinfo()で現在の設定を調べることができます。そのような場合、file_get_contents()FALSEを返すので、===演算子を使用して$imgをfalseとテストする必要があります。

0
  1. それはスクリプトを実行する前に、あなたのファイルは、他のデータを印刷しない場合は、UTF8は、ヘッダー
  2. チェックが解除されますようにファイルのエンコーディングをチェックする必要があります。
1

manual

から

<?php 
if ((isset($_GET['url']))) { 
    $url = $_GET['url']; 
    $file_format = pathinfo($url, PATHINFO_EXTENSION); 
    try 
    { 
     ob_clean(); 
     ob_start(); 

     header("Content-Type: image/$file_format"); 
     header("Content-disposition: filename=image.$file_format"); 
     $img = file_get_contents(urlencode($url)); 
     // as per manual "If you're opening a URI with special characters, such as spaces, you need to encode the URI with urlencode(). " 
     echo $img; 
     echo ob_get_clean(); 
     exit(); 
    } 

    catch(Exception $e) 
    { 
     echo $e->getMessage(); 
    } 
} 

else die('Unknown request'); 
?> 

1以上ソリューション時にはあなたは、HTTP URLを開いて、エラーを取得する可能性がありますこの方法を試してみてください。 "allow_url_fopen = On"をphp.iniに設定していても、

私には "user_agent"を何かに設定していました。

関連する問題