平成30/ 2018-12-10 16:40
PHP/fopen


>> wで書き込みモードで開くと、ファイルサイズが0バイトになってしまうので注意しましょ
if(
!($f = @fopen($filepath, "wb+"))
){

0バイトにしたくなければ、r+(読み込み、書き込みモード)にすること。
if(
!($f = @fopen($filepath, "rb+"))
){

ちなみに、bはバイナリモード。これを利用することで、LinuxでもWindowsでも良く動く




>> URLのファイルが読めない場合は、file_get_contents() を使えばいい。
if (
!$buffer = file_get_contents($url)
){
}
// fgets($url, 10000) を利用してたら、読み込めないケースが発生したので。



// ヘッダー( UserAgentなど )指定したいとき
$context = stream_context_create(array("http"=> array(
"method" => "GET",
"header" => "User-Agent: iTunes/9.0 (Macintosh; Intel Mac OS X 10.5.8) AppleWebKit/531.9\r\n".
            "X-Apple-Store-Front: 143462-9,12\r\n".
            "Host: ax.itunes.apple.com\r\n",
)));
if (!$handle = fopen($url, "r", false, $context)) {
    //解析失敗
     echo "fopen error\n";
    break;
}



$ranking = array();
$file   = dirname($_SERVER["DOCUMENT_ROOT"]). "/share/all.txt";
$handle = fopen($file, "rb");
if ($handle) {
    $i=0;

    while (($tmp = fgets($handle, 4096)) !== false) {
        $i++;
        if(
        $i == 1 //1行目はタイトル!
        ){
            continue;
        }
        $tmp = mb_convert_encoding($tmp, "utf8", "sjis");
        $tmp= preg_split("/\t/u", $tmp);
        $tmp2["id"]        = $tmp[0];
        $tmp2["title"]     = $tmp[1];
        $tmp2["cont_id"]   = $tmp[2];
        $tmp2["sub_title"] = $tmp[3];
        $tmp2["ct"]        = $tmp[4];
        $ranking[] = $tmp2;
    }
    fclose($handle);
}
※fopenの[ rb ]オプションつけると汎用的になるみたい。

※以下のようにすると改行ごとでなく、内容全て取得できる。
$handle = fopen(dirname($_SERVER["DOCUMENT_ROOT"]). "/share/all.txt", "rb");
$contents = '';
while (!feof($handle)) {
  $contents .= fread($handle, 8192);
}
fclose($handle);



// Thanks.
http://www.php.net/manual/ja/function.fopen.php
http://www.php.net/manual/ja/function.fgets.php

file_get_contentsでのアクセス時にUserAgentを変更する方法 ぎじゅっやさん
http://webcache.googleusercontent.com/search?q=cache:Snh5ycfGPtkJ:hain.jp/index.php/tech-j/2007/09/03/file_get_contents%E3%81%AEuseragent+php+header+user+agent&cd=3&hl=ja&ct=clnk&gl=jp

file_get_contents
http://php.net/manual/ja/function.file-get-contents.php

stream_context_create
http://php.net/manual/ja/function.stream-context-create.php