• ベストアンサー

fgets()でURLを読み込むとエラーになる

-----url.txt----- http://www.google.co.jp http://www.goo.ne.jp/ ----------------- -----test.php------ $urltxt = fopen("url.txt", "r"); $url = fgets($urltxt); $html = fopen($url, "r"); -------------------- のように、各行にURLが書いてあるテキストファイルを一行ずつ読み込んで、それを引数にしてfopen()したところ、 全てfailed to open stream: HTTP request failed! HTTP/1.0 404 Not Foundとなってしまいます。 print($url)では正しくURLが出力されますし、$urlへの代入を直接$url = "http://www.goo.ne.jp/"としてやれば正常に動作するので、何が原因か分かりません。 テキストファイルは全て半角英数のアドレスのみで、シフトJISで保存しています。 どなたか原因が分かる方、ご教授ください。

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

  • ベストアンサー
  • lafu
  • ベストアンサー率50% (1/2)
回答No.2

最後に改行が含まれているからだと思います。 $url = chop($url); を加えて、改行を取り除いてあげてください。 例: -----test.php------ $urltxt = fopen("url.txt", "r"); $url = fgets($urltxt); $url = chop($url); $html = fopen($url, "r"); --------------------

L1L
質問者

お礼

ありがとうございます、解決しました。 わざわざeregi_replace("\n", $url)とかしたんですが、chopなんて関数があったんですね。 勉強になります。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • ultraCS
  • ベストアンサー率44% (3956/8947)
回答No.1

テスト環境がすぐに用意できないので、推測かつ、参考意見ですが DOSのテキストファイルからfgetsで読み込んだ場合、文字列の一番後ろ(ASCIIZの0x00の前)にLF(0x0A)かCR(0x0D)がくっついている(どっちだったか忘れた)と思います。これを取り除かないととうまくいかないような気がしますが

L1L
質問者

お礼

回答ありがとうございます。おっしゃる通りLFが付いていたようです。 大変助かりました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • fgetsの処理を詳しく説明してください、お願いします。

    char line[100]; (stream = fopen( "test.c", "r" )) == NULL; while( ( fgets( line, 100, stream ) != NULL)){ printf( "%s", line); } fclose( stream ); 上記のコードでファイルが一行ずつ表示されるのですがなんとなくでfgetsを使っていたのでwhile文中のfgetsの動きがよく分かりません。 初めに改行文字までの一行を読み込むのはわかるのですが、何故繰り返すときlineに2行目、3行目、・・・ と取り込むのかがわかりません。 よろしくお願いします。

  • fgetsでエラー

     C言語を勉強しているものです。 fgetsやfscanfで第一引数にダブルポインタ変数を用いるとエラーが出ます。 なぜそうなるんでしょうか? ダブルポインタだと不可能なんでしょうか? char **moji; FILE *fp; moji = (char**)malloc(sizeof(char*) * 128 * 256); fp = fopen("test.txt","r+"); fgets(moji[0], 26, fp); //ここでエラー mojiを[0]で指定してあげてもエラーなんでしょうか? fgetsだけでなくfscanfでもそうです。 どうしてそうなんるんでしょう?

  • fgetsの使い方

    C言語を今日から始めたじいさんです。 宜しくお願い致します。 メモ帳を使って3行ほどの文字列を入力して、text.txtファイルに保存します。 この文字列を読み込んで、1行ずつ印刷しようとしていますが fgetsでtxtファイルの終了条件がわかりません。 while(fgets(row , sizeof( row ) , fp) != NULL){ printf("%s\n , row); } fclose( fp ); return 0; のようにしているのですが、3行印字処理をして異常終了してしまいます。 本に出ている例をそのまま実行しているのですが、うまくいきません。 txtファイルをダンプしてみると各行の後ろに0d 0aたぶんCR,LFが入っていてNULL=00(?)はありません。テキストファイルの作り方に問題があるのでしょうか? それともfgetsの使い方に誤りがあるのでしょうか?

  • fopenでURL内容の取得のエラー

    fopen(<URLを指定>,'r'); としたときにエラーが発生してしまいます。 この現象は環境によって出る場合と出ない場合があります。 以下はいずれもphpinfo()で取得したPHPとApacheのバージョンです。 <エラーが出ない環境> PHP Version 4.2.3 Apache/1.3.27 <エラーが出る環境> PHP Version 4.3.9 Apache/1.3.31 (Win32) PHP/4.3.9 エラーメッセージは以下のようなものです。 Warning: fopen(<ここにアクセスしたURLが表示>): failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in <エラーが出ているプログラムと、fopen()の行が表示> よろしくお願い致します。

    • 締切済み
    • PHP
  • fgetsで2行目から文字化け

    fgetsでファイルを一行ずつ読み込みたいのですが、二行目以降が文字化けしてしまいます。 ******* ソース ******* #include <windows.h> #include <stdio.h> FILE *fp; if ((fp = fopen("textlist.txt", "r")) == NULL){ MessageBox(NULL, TEXT("ファイルを開けません"), NULL, NULL); exit (1); } while (1) { TCHAR buf[128] = {0}; if (fgets(buf, sizeof(buf), fp) == NULL) break; MessageBox(NULL,buf,NULL,NULL); } fclose(fp); ***** textlist.txt ***** あいうえお かきくけこ さしすせそ メッセージボックスの一回目は正しく"あいうえお"と表示されますが、二回目・三回目は文字化けしています。 最終的に一行ずつ分けて配列に入れたいので、fgetsで出来たらと思っています。 よろしくお願いします。

  • fgetsのエラー

    C言語でテキストファイルをfgetsで読み込み、for文でfgetsを繰り返しているのですが、テキストファイルの15003行目でfgetsのエラーが出てしまい、止まってしまいます。 20000行まで読み込みたいのですが出来ません。 繰り返しが悪いのかと思い、for文を(i=0;i<10000;i++)と(i=10000;i<20000;i++)で分けても読み込んでも同じ結果でした。 テキストファイルが13880行までの場合はうまくいきました。 ↓Cプログラム↓ FILE *fpo; char line[4096]; for (i=0; i<20000; i++) { if (fgets(line, sizeof(line), fpo) == NULL) return(0); sscanf(line, "%d %lf %lf %lf %lf %lf %lf", &typep[i], &x[0][i], &x[1][i], &v[0][i], &v[1][i],&p[i], &n[i]);    //lineのデータを1つ1つ読み込む } ↓エラー文↓ Debug Assertion Failed! File: f:\dd\vctools\crt_bld\self_x86\crt\src\fgets.c Line:57 Expression:(str!=NULL) なにが原因なのか分かりません。 よろしくお願いします。

  • クロールしたときのエラー対処について

    これまで同じプログラムで稼動していたのに、つい最近動かしたら下記エラーが出てしまいました、、 Warning: fopen(http://www.AAA.jp/ここはパラメータが入ってます。) [function.fopen]: failed to open stream: HTTP request failed! HTTP/1.1 500 Internal Server Error in C:\xampp\htdocs\phpget\get2.php on line 4 line 4 に記述されているもの ↓ function getURL( $pURL ) { $_data = null; if( $_http = fopen( $pURL, "r" ) ) {   ←ここが4行目 while( !feof( $_http ) ) { $_data .= fgets( $_http, 1024 ); } fclose( $_http ); } return( $_data ); } これは、クロール先のサーバ側が何らかの設定変更によるものでしょうか? こちらで対処できる方法があれば教えていただきたく よろしくお願いします。

    • 締切済み
    • PHP
  • 初心者です。WINAPIでの文字列の取り込みについて

    今 if((stream=fopen("words.txt","r"))==NULL){ return 1; } while((fgets(line,256,stream))!=NULL){ ・ wsprintf(mon, "表示:\"%s\"", line); ・ のようにしてファイルから一行ずつ取り込んでいるのですが, TextOut(hdc, 0, 0, mon, (int)mon()); 表示されるのが 表示:"see↑"(最後に半角の↑見たいな物が入ってるのですがなんなのでしょうか? また"see"だけなどを格納するにはどうすればいいのでしょうか教えて下さい。

  • fgetsの読み込みは無制限?

    $aaTX = @fopen("aa.txt", "r+" ); $aa = fgets( $aaTX); として、fgetsの第2引数を指定しない場合、読み込む文字数は無制限になるのでしょうか? それとも何文字までという制限がある? 無制限に読み込ませたい場合は、file_get_contentsで読み込んだ方が良いでしょうか?

    • ベストアンサー
    • PHP
  • fgetsの使い方について

    こんばんわ。phpでラジオボタンを使用して投票フォームを作っています。 投票した値をログファイルに書き込んで4項目をカウントできるように格納したいのですが、エラーも出ずにスルーして原因がわからず困っています。 イメージでは ログファイル↓ 24 もちろん 11 するかも 5  わからない 12 ない 問題のソースは以下の通りです。 $write = "$radiobutton"."\n"; $fp = fopen("../php/test1.txt","a+"); $line1=fgets($fp); $line2=fgets($fp); $line3=fgets($fp); $line4=fgets($fp); fputs($fp,$write); fclose($fp); print "fgets1回目=".$line1."<br>\n"; print "fgets2回目=".$line2."<br><br>\n"; print "fgets3回目=".$line3."<br><br><br>\n"; print "fgets4回目=".$line4."<br><br><br><br>\n"; わかる方いましたらご教授お願いします。

    • ベストアンサー
    • PHP