• ベストアンサー

print出力での文字制限について

HttpのGetリクエストを使って、他のプログラムからデータを取得する プログラムを作っています。 http://localhost/get_data.php?file=abc.dat (abc.datはテキストやバイナリーデータ) -----(概略リスト)-------------------------------- $filename = $_GET['file']; $fsize=filesize($filename); $fp = fopen($filename, "rb"); $read_data=base64_encode(fread($fp,$fsize)); fclose($fp); $len=3997; // 3997+4=4001:OK print "max length=".$len."<br>\n"; print substr($read_data,0,$len)."#end<br>\n"; ------------------------------------------------ このような、処理をした時に print分の最後の「#end」が 表示されていれば、問題なく出力されていると言う方法で行っています。 その結果、3997+4=4001までは問題なく出力されますが それを越しますと、文字が途切れます。 例: $len=3997 >> ~~abcedefg12345#end $len=3998 >> ~~abcedefg123456#en どこで制限が掛かっているのでしょうか? (値は変えれるのでしょうか) それとも何かやり方などでおかしい所があるのでしょうか? php.ini や apache の httpd.conf など確認してみましたが それに該当するようなものは見当たりません。 尚、環境は以下のような内容です。 サーバーOS:WindowsXP pro. apache:2.0 PHP:version 5.0 ご存知の方がいらっしゃいましたら、よろしくご教授お願いします。

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

  • ベストアンサー
回答No.3

こんばんわぁ、Blackwinglsです。 すみません、勘違いしていたようで・・・・(^^; えっと同じコードを書いて試してみたら、 $len=5000; でもOKでした。 とはいえ、私の環境では $len=3996; で、文字表示が背景と同じ色になってしまって表示されていないような感じになってしまいましたが・・・・・。 一応、ソースで確認するぶんでは出力されているようです。 IEの仕様ではないでしょうか? ではでは~☆ミ

moo9999
質問者

お礼

Blackwingls様、何度もありがとうございます。 IEの仕様では?..と言うことで、念のために netscape で やってみましたら、ご推察の通り、ブラウザの仕様のようで $len=5000 や 9000 でも問題なくいけました。 ん~、これは予想外ですね。 逆に、どうしていいか分からなくなりました。(笑) ただ現状では、IEのシェアが格段に大きいので IEに合わすしか ありませんので、何か手立てを考えてみます。 ありがとうございました。

その他の回答 (2)

  • hrm_mmm
  • ベストアンサー率63% (292/459)
回答No.2

fread()は一回に読み込む最大値は8192 バイトまでのようですが、サイズ的にはここではなさそうですね。 あと、php.iniのoutput_bufferingのdefaultが4096のようだけど、ここはどうなってますか? たぶん、もうちょっと小刻みに読んでは出力するようにプログラムした方がよいように思います。

moo9999
質問者

お礼

ご回答ありがとうございます。 > fread()は一回に読み込む最大値は8192 バイトまでのようですが ..なるほど、こう言った制限もあるのですね。   ただ、念のためにこちらのPGでfread後のlengthを見てみましたら   ファイルサイズ相当の10KB以上ありましたので、どこかでそのような設定に   なってしまっているのでしょうか。   もしご存知でしたら、その設定場所も教えて頂けると助かります。 後、ご指摘の  > php.iniのoutput_bufferingのdefaultが4096.. につきましては、output_buffering = off となっていました。 念のために、output_buffering = 4096 や 10000 など変えて サーバー再起動して試してみましたが、変わりませんでした。 他にもいろいろと検索してみてますが、今のところ打つ手無しです。 制限の個所や制限内容がわかれば、4000バイトなどで細かく処理してもいいのでしょうが 環境によって変わると、4000と言った数値にも意味がなくなりますので このままではどうしようもないですね。 何か他にヒントでもありましたら、よろしくお願いします。

回答No.1

こんにちはぁ、Blackwinglsです。 GETは文字数に制限があったような・・・・ POSTではダメなんですか? ではでは~☆ミ

moo9999
質問者

お礼

ご回答ありがとうございます。 今回は、Get/Postの問題と言うより、Print文での文字出力の制限の疑問なのでPostに変えても一緒のような気がしますが、 何か変わる要素がありますでしょうか。 よろしくお願いします。

関連するQ&A