6.Webページの処理他
  WEBページをGETしよう!

PHPではファイルを扱う多くの関数において、httpやftp アドレスを使用することができます。
以下の方法でWEBページを表示できます。
注意 Windows上では、リモート(外部)ファイルに include() および require() 文を使用することはできません。つまり1の方法は使えません。またレンタルサーバによっては禁止している場合があります。

1. includerequire関数で読みコム
include("http://www.yahoo.co.jp/index.html");
require("http://www.yahoo.co.jp/index.html");
・違いは?
include - 読み込めなくてもスルー
require - 読み込めないと中止

2. readfile関数で出力する
$byte = @readfile("http://www.yahoo.co.jp/index.html");
$byteにバイト数が入ります。関数のあたまに「@」をつけるとエラーメッセージを抑止できますよ。

3. ファイル読み込み的に1024バイト or 改行ずつ取得する
$fp = fopen("http://www.yahoo.co.jp/index.html", "r");
while (!feof($fp)) {
  echo fgets($fp, 1024);
}
fclose($fp);
4. file関数で一気に配列に読み込む
$arr = file("http://php.s3.to/i.php");
// print_r($arr);
foreach ($arr as $line) {
  echo $line;
}
配列の1要素は、改行までとなってます。foreachで配列を分解しています。

5. file_get_contents関数で一気に変数に読み込む
$val = file_get_contents("http://blog.livedoor.com/");
echo $val;
PHP4.3.0以降から使える関数で、いまヤン具に人気の方法です。
file関数は配列に読み込みますが、file_get_contents関数は変数に読み込みます。臨機応変で
PHP5からは、file_put_contents関数ってのも使えます

6. fsockopen関数で、ネットワーク的に取得する
$fp = @fsockopen("www.2ch.net", 80);
if($fp){
fputs($fp, "GET /test/dat/2.dat HTTP/1.0\r\n");
fputs($fp, "User-Agent: Monazilla/1.0+kage/1.0\r\n\r\n");
while (!feof($fp) && $o != "\r\n")
   $o = fgets($fp, 512);
while (!feof($fp))
   echo fgets($fp, 4096);
fclose($fp);
}

80番ポートを叩くとかいうヤツですね。ブラウザ名をアレコレしたり、クッキー送信や、ベーシック認証も出来ますよ。 TOMOさんのサイトが詳しいです。

7. PEARのHTTP_Requestでサクッと取得する
// 自フォルダの場合 require_once('Request.php');
require_once "HTTP/Request.php";

$req =& new HTTP_Request("http://www.yahoo.com/");
if (!PEAR::isError($req->sendRequest())) {
    echo $req->getResponseBody();
}

コマンドラインから「pear install HTTP_Request」でインストール可能です。
応用次第でいろいろなことに使えるので、マニュアルを見てみて下さい。

  取得ページから特定の部分をGETしよう!

Yahoo株価情報の取得と並び替え   実行例

ソースの一部分
if (mb_ereg("始値([0-9,]+)高値([0-9,]+)安値([0-9,]+)", $l, $v)) {
  $out[$i][open] = $v[1];
  $out[$i][high] = $v[2];
  $out[$i][low] = $v[3];
}

  クッキーを操ろう!

ログイン情報をクッキーで保存するサイトから、クッキーを取得し、送信しよう

PEARのHTTP_Requestを使ったmixiログインの例   ソース

  画像を他サーバに移そう!

画像の保存場所が異なる場合、FTPを使って書き込んでみましょう。この場合、相手サーバにはFTPのアクセス許可が必要になります。
$body = "画像データ";

$fp = fopen("ftp://homepage:FTPパス@192.168.ホスト名/public_html/g/$fname", "w");
fputs($fp,$body);
fclose($fp);
  リンク切れをチェックしよう!

まずはHTMLファイル(or URL)の中からリンクを抜き出す方法を考えましょう。要はページの中の<a href="http://〜の部分を見つければいいですね。
以下がソースですが、正規表現の部分はあまり深く考えないでいいです。意味は文中のhref="http://????"からhttp://????を抜き出すものです。
<?php
// ターゲットのファイル名(URLでも可)
$filename = "tt6.php";
// ファイルを開き配列に格納して、一行ずつ展開
$page = file($filename);
foreach ($page as $line) {
  if (preg_match("/\bhref\s*=\s*[\"']?(http:\/\/[^\s\"'>]*)/i",$line,$reg)) {
    echo "$reg[1]<br>";
  }
}
?>
サンプル

  ファイルのあっぷろーど

マニュアルのまんまですが、、、アップロードフォームのHTML

<form enctype="multipart/form-data" action="up.php" method="POST">
    <input type="hidden" name="MAX_FILE_SIZE" value="30000" />
    <input name="upfile" type="file" />
    <input type="submit" value="送信する" />
</form>
「name="MAX_FILE_SIZE" value="30000" 」の部分はファイルサイズ制限バイト数です。<input type="file"の前に置いてください。
制限バイト数はフォーム上での制限なので、厳密には$_FILES['upfile']['size']でチェックするとよろしいかと思います。

投稿処理の部分
// 保存ディレクトリの設定(書き込み権限を与える)
$up_dir = './img-box/';

// 保存場所を決定する(元のファイル名部分を使用)
$up_name = basename($_FILES['upfile']['name']);
$up_file = $up_dir . $up_name;

// アップファイルは一旦/tmp/dh32hfdjhなどに保存されるので、
// move_uploaded_file関数で保存ディレクトリに安全に移動させる。
if (!move_uploaded_file($_FILES['upfile']['tmp_name'], $up_file)) {
  die ("アップロード攻撃!かも?!");
}
// 保存に成功したら、ログなどの書き込み処理〜〜〜
// $dat = "$id|$up_name|\n";
アップロード関係のphp.iniの項目
PHPのデフォルトでは、2メガまでしかアップロードできない仕様ですので大きなファイルをアップロードするときには、php.iniの設定の変更が必要となります。 <? phpinfo() ?>を表示させて確認してください。

関係ありそうな項目

10メガとか大きなファイルをアップロードできるようにする為には、「 post_max_size > upload_max_filesize」となるようにして下さい。設定変更後はhttpdを再起動してphpinfo()で変更を確認しましょう。

  ディレクトリ一覧の表示

<?php
$target = dirname($_SERVER["SCRIPT_FILENAME"]);
if ($dh = opendir($target)) {
  while (($filename = readdir($dh)) !== false) {
    if ($filename != "." && $filename != "..") {
      echo "$filename<br>";
      //$day = date("Y-m-d H:i", filemtime($filename));
      //$size = filesize($filename) / 1024;
      //printf("% -24s %-s %1.1fK\n<br>", $filename, $day, $size);
    }
  }
  closedir($dh);
}
?>
サンプル  ソース

  まだまだあった!便利な関数

PHPは関数が多すぎて、目的までたどり着く前に迷子になってしまいますよね。 ここでは埋もれた関数の中から「こんなんあったの?!」ってなモノを気まぐれに紹介していくコーナーです。

disk_free_space - ディレクトリの空き容量が分かる!
glob - パターンマッチでファイル検索が出来る!*.txtとか

「これ知ってるゥ?」とか「こんなの無いかな?」を募集中!!    下↓に書いてくださいませ


<<Prev  Next>>


LastModified