file_get_contents()エラーの対処法とは?

このQ&Aのポイント
  • mysqlで構築したデータベースに画像を格納しようとしていますが、お名前.comのレンタルサーバーではfile_get_contents()が使えないエラーが発生しています。
  • ローカル環境では問題なく動作していたため、設定の問題だと考えられます。
  • エラーを回避するためには、@を前に付ける方法もありますが、できれば対処法を教えていただきたいです。
回答を見る
  • ベストアンサー

file_get_contents()エラー

mysqlで構築したデータベースに画像を格納しようとしています。 ローカル環境では問題無く動作していたのですが、お名前.comのレンタルサーバーでやってみるとエラーがどうしてもでます。 レンタルサーバーの種類は【共用サーバーSD】です。 DB接続の部分のDB名、ユーザー名、パスワード等はきちんと変更しました。 【エラーの内容】 Warning: file_get_contents() [function.file-get-contents]: Filename cannot be empty in /********/*****/****/****touroku.php on line 24 調べてみると、レンタルサーバーではfile_get_contents()が使えない場合があり、設定を変更剃る必要があるという記事を目にしたのですがつまづいています。 file_get_contents()を使えるようにするにはどうしらいいでしょうか。 @を前に付けてエラーをでなくするということもできるとは思うのですが、できれば@を使わずに対処できればと考えています。 今回のようなケースについては、ローカルできちんと動作していたということは、レンタルサーバー側での設定の問題なのかなと考えているのですが、いかがでしょうか。 対処法、アドバイスをいただけないでしょうか。よろしくお願いします。

  • PHP
  • 回答数1
  • ありがとう数0

質問者が選んだベストアンサー

  • ベストアンサー
  • shimix
  • ベストアンサー率54% (865/1590)
回答No.1

>Filename cannot be empty というエラーメッセージなので、まずはfile_get_contents()に渡している引数(Filename)の内容を確認すべきだと思います。変数で与えているならその変数をprintして確認してください。

関連するQ&A

  • file_get_contentsについて

    file_get_contentsについて教えてください。 現在あるサイトを定期的にチェックし、特定の文字列が存在したら メールを送るというものを作っています。 そのサイトチェックの際にfile_get_contentsを使って、 サイトの中身をチェックしています。 $tmpPage = file_get_contents('~.cgi?aa=bbb'); 上記の用に記述して$tmpPage内の文字列をチェックすることで 実現できているのですが、本来このサイトは携帯向けのページのため ヘッダー情報を付加して下記のように記述しています。 $opts = array( 'http'=>array( 'method'=>'GET', 'header'=>'Host :www.XXXXX.jp' . PHP_EOL . 'User-Agent :KDDI-XXXXXXXXXXXX' . PHP_EOL . 'x-up-subno :XXXXXXXXXXXX.ezweb.ne.jp' ) ); $context = stream_context_create( $opts ); $tmpPage = file_get_contents( '~.cgi?aa=bbb', false, $context ); このように記述すると Warning: file_get_contents('~.cgi?aa=bbb') [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found とエラーが返ってきてしまいます。 アクセスするURLをYahooやGoogleにすると問題なく動いているので、 問題なのはチェックするサイトのURLが「XXX.cgi?aa=bbb」と なっているのがダメなのではないかと思っています。 アクセス先のURLが単純な「.html」ではないまたは、ヘッダー情報を 付加する場合、file_get_contentsの使い方が変わるのでしょうか。 ご存知の方がいらっしゃれば是非教えてください。 よろしくお願いします。

    • 締切済み
    • PHP
  • file_get_contentsでなにもとれない

    file_get_contentsでなにもとれない $url = 'http://xxxxxxxxxx'; $html = file_get_contents($url ); echo $html; とした時何も表示されません 他のサーバーに移植したらとれるのでインフラの問題だと思うのですが何が考えられますでしょうか。 iptablesで外部にポート80あけてもだめでした。 ちなみにうったコマンドは iptables -A OUTPUT -p tcp -m state --state NEW --dport 80 -j ACCEPT iptables -A OUTPUT -p tcp -m state --state NEW --dport 443 -j ACCEPT

    • ベストアンサー
    • PHP
  • file_get_contents 画像直URL

    file_get_contents($url);した際、画像の直URLがあったら、画像をローカルに保存して、URLを書き換えたいのですが、どうやればいいでしょうか? if(preg_match("/http:\/\//", file_get_contents($url))) { ?? } また、画像をローカルに保存って、PHPで出来るのでしょうか?

    • ベストアンサー
    • PHP
  • file_get_contents()の動きが読めません…。

    いつもお世話になっております。(環境:PHP5.2.5) file_get_contents()を外部ファイル(クラス)の中で使ってデータを取得し、 そのクラスをメインファイルで読み込み、 メインの方で、その得たデータを使おうとしています。 (仮に、メインファイルの名前をmain.phpとしておきます。) その際、クラスの中に書くコードについてですが、 下記のように、2通りの書き方が浮かびました。 (仮に、このクラスファイルの名前をclass.phpとしておきます。) //------------------------------------------------------------ $url= 'http://'.$_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF']; $html = file_get_contents($url); //------------------------------------------------------------ $url= $_SERVER['SCRIPT_FILENAME']; $html = file_get_contents($url); //------------------------------------------------------------ で、パターン2の方は、うまく行くのですが、 パターン1の方の処理だと、なぜか、 その処理を行おうとしているファイル(main.php)のダウンロードを開始しようとするのです! ブラウザに「ダウンロードウィンドウが立ち上がる…」という状況です。 パターン1では、 $url_1 = "http://example.com"; のような、「http://」で始まる書式のURLを file_get_contents()の引数に入れることになりますが、 これ自体は問題ないと思っています。 実際、クラスで読み込む方法ではなく、file_get_contents()を使う方法では、 問題なく動いたからです。 つまり、 メインファイルに、 上記の2パターンを書いて試した場合には、問題なくうまくいったのです。 言い換えれば、 メインファイルだけで完結している場合には、 どうも問題は起こらないようで、 クラスなどで引っ張ってくると、問題が起こるようなのです。 (私の勘違いの可能性もありますが…。) 以上、まとりのない文章で、申し訳ありません。 自分でも、なにがなにやら、よく分かっていないため、 多くの情報を提供することで、なんとかアドバイスを頂けないかと思い、 ひとまず、使えそうな情報を並べてみました。 チェック項目など、提示いただければ、 適宜、それに従って対応致しますので、 どうかご助言をよろしくお願い致します。

    • ベストアンサー
    • PHP
  • file_get_contents使用時のエラーについて

    file_get_contents使用時に下記のようなエラーが出ました。 ===エラーの内容=== PHP Warning: file_get_contents(<取得するURL文字列>): failed to open stream: HTTP request failed! <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> in <エラーの起きたファイル名> on line 32 ===概要=== yahooの検索apiを利用して検索結果を取得しようとしています。 別のサイトでは同様の構文で取得できているので、書き方に問題はないと思うのですが、サーバやphpの設定は多少違う部分があるかもしれません。 いろいろ探してみましたが、原因がわかりません。 取得するURLは直にたたくとちゃんと見ることができます。 心当たりがある方、補足説明が必要な方、ご回答よろしくお願いします。

    • 締切済み
    • PHP
  • 「file_get_contents」で「HTTP/1.0 504 C

    「file_get_contents」で「HTTP/1.0 504 Connection Timed Out」 ini_set('default_socket_timeout',300); ini_set('max_execution_time',300); 上記のように書いた上で、ちょっと重いAPI(XML)を file_get_contentsで取得するプログラムをcrontabで動かし、 結果(成功か失敗か、出力結果等)がメールで送られるようになっています。 毎日午前1時0分に実行されるようにしているのですが、 二日に1回くらいの頻度で午前1時3分に以下のように書かれたメールが届きます。 Warning: file_get_contents(...): failed to open stream: HTTP request failed! HTTP/1.0 504 Connection Timed Out in /home/***/***/***.php on line 36 この504エラーというのは、PHPの書き方しだいで回避できるものなのでしょうか? default_socket_timeoutは300秒(5分)になっているので、 1時3分にメールが送られてきているということは、 PHPがタイムアウトと判断する前に終了しているということでしょうか? サーバー側が504エラーという結果を返しているということですか? よろしくお願いします。

    • 締切済み
    • PHP
  • file_get_contentsで外部URLファイルの読み込みの設定

    外部URLのXMLが取得したく、file_get_contentsで取得しようと思っております。 ただ、サーバマシンからですと、falseが返ってきてしまいます。 環境は、 php 4.3.9(RedhatEL4のup2dateでインストール出来るバージョン) になります。 php.iniの allow_url_fopenはOn default_socket_timeoutも60 と十分取っております。 $content = file_get_contents('http://アドレス'); でテストしますと、 私のローカル(OSX php5.2.1) で確認しますと、正常に取得出来るのですが、 RedhatEL4 php4.3.9で行いますと、 falseが返ってきてしまい、取得出来ません。 なお、サーバマシンからwgetでは取得可能です。 allow_url_fopen以外に、何か設定が必要になりますでしょうか。 アドバイスを頂けませんでしょうか。 よろしくお願いいたします。

    • 締切済み
    • PHP
  • file(), file_get_contents(), fopen() がタイムアウトしてしまう

    パスが正しいかどうかを何度も確認しましたが、スクリプトのURLをブラウザで開こうとすると、5~6秒した後、以下のエラーが出ます。 Warning: file_get_contents(読み込むファイルのパス): failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in スクリプトのパス.php on line 16 おそらく、file_get_contentsの読み込もうとするファイルが重たすぎるのだと思います(スクリプトのファイルサイズ自体は軽いのですが処理に時間がかかってしまう)。というのも、読み込むファイルの内容を、<?php echo "hello world"; ?> とすると、エラーが出なくなり、正常に読み込んでくれます。また、読み込むファイルは php ファイルで同ドメイン上にあり、このファイルをブラウザから閲覧可能です。 他に、fopen, include, file も試しましたが、同様に上記のようなエラーがでます。これはサーバ側でスクリプトの処理の時間制限を行っているからでしょうか? ちなみに、スクリプトの冒頭に、 set_time_limit(0); 一番最後に set_time_limit(30); をおいてみましたが、結果は同様でした。 もし何か対処方法をご存知の方おられましたら、どうぞよろしくお願いいたします。

    • 締切済み
    • PHP
  • file_put_contentsで複数画像の取得

    自分のサーバー(myserver.com)上で「他サイトにある画像をダウンロードできるPHP」=【download.php】を組みました。 <?php $url = 'http://yoso.jp/qt6w8d.jpg'; $data = file_get_contents($url); file_put_contents('./image/photo_1.jpg',$data); ?> 上記では、http://yoso.jp/にある1つの画像をphoto_1.jpgとリネームして、myserver.com/image/ ディレクトリに画像ファイルとして収納できます。 **************************************************************** 次に、 1001.csv 1002.csv 1003.csv など複数のCSVファイルを作り、自分のサーバーのmyserver.com/csv_file/ ディレクトリに保管しました。 それぞれのCSVファイルの中には、yoso.jpにある画像のURLが、カンマ区切りで複数書かれています。 例【1001.csv】 中身 (yoso.jp にある 複数(今回3つ)の画像のURLが記載) http://yoso.jp/qt6w8d.jpg,http://yoso.jp/dve4k.jpg,http://yoso.jp/4m2fl3.jpg, 尚、このCSVファイルもスクレイピンクで自作しているため必要であれば ""で囲むように改良することも可能です。 "http://yoso.jp/qt6w8d.jpg","http://yoso.jp/dve4k.jpg","http://yoso.jp/4m2fl3.jpg", 上記のcsvファイルを用意した後、下記のような【get.php】を組みました。 <?php $id=$_SERVER['QUERY_STRING']; $csv_url = "http://myserver.com/csv_file/"; $csv_url .= $id ; $csv_url .= ".csv"; $file_jpg = file_get_contents( $csv_url ); echo $file_jpg; ?> この【get.php】は、http://myserver.com/get.php?id=1001 とクエリーでcsv名を指定すると、1001.csvにある画像URL(1001.csvの場合3つ)をPHP上に表示(echo)できます。 ************************************************************** やりたいこと 【download.php】と【get.php】に記載したソースと組み合わせて、csvファイルに書いてある複数の画像をすべてサーバーに取り込みたいです。 可能であればそれぞれの画像名をphoto_1.jpg photo_2.jpg photo_3.jpg のような形でリネームし保存できればと考えていますが、file_put_contentsにて、複数ファイル指定で動作させる方法がわかりません。 どのようにすればいいかご教示戴きたくお願いいたします。

    • ベストアンサー
    • PHP
  • simplexml_load_fileのエラー

    AmazonのAPIを使ったWebサイトを作っていて、simplexml_load_fileを使って外部サーバのXMLを読み込もうとしています。 ローカル・サーバ1ではうまくいきますが、サーバ2ではI/O warning : failed to load external entity となり読み込めません。 3つのサーバで使用しているプログラムは全く同じです。 PHPのバージョン、SimpleXMLのRevisionは下記の通り。 ローカル:5.2.5、1.151.2.22.2.35 サーバ1:5.2.9、1.151.2.22.2.46 サーバ2:5.2.9、1.151.2.22.2.46 調べていると、XML文字列の中に実体参照等パースエラーとなる文字が含まれているとこのようなエラーが出るとのことでしたが、該当するような文字列はありませんし、同じプログラムでも別のサーバであれば取得できるのでその可能性は考え辛いですが、この場合の対処方法として、file_get_contentsで一度文字列として受け取ってから、simplexml_load_stringでパースするとあったので、それも試しました。 しかし、simplexml_load_fileであれば数秒で取得できるものが、file_get_contentsだと4分以上かかりました。 できればsimplexml_load_fileで行いたいのですが、上記のような違いが出る可能性として考えられることは何かありますでしょうか。

    • 締切済み
    • PHP

専門家に質問してみよう