今見てるページを書き換える
これは使えそう!と思ったけど、実際にはほとんど使い道がない気がしてきた。
なにがしたかったんだろうか。。。
今見てるページのurlをサーバに送って、サーバ側で該当する文字を置き換えてクライアントに返すというプログラム。
<?php class LoadRe { public $replacecomp; public $url; public $lines; public $loadok = false; public function seturl() { $this->url = $_GET['url']; } public function line($str) { $lines = array(); foreach($str as $line => $val){ $lines[$line] = rtrim($val); } $this->lines = $lines; } public function getline($n) { return $this->lines[$n]; } public function replacetxt($tgt,$rep) { $n = array_search($tgt,$this->lines); if($n){ $this->lines[$n] = $rep; $this->replacecomp = true; } } public function getContent() { $content = file($this->url); if($content){ $this->line($content); $this->loadok = true; } return $this->loadok; } public function tostr() { $list = array_values($this->lines); return implode("\n",$list); } }
使い方はこんな感じ。以下のように書き換えたい部分を書くと、書き換え後の文字列を返してくれる。仮にt.phpとして保存しておく。
<?php require_once './LoadRe.php'; $k = new LoadRe(); $k->seturl(); $loadok = $k->getContent(); if($loadok){ $k->replacetxt('<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0">','<meta name="viewport" content="width=device-width">'); $k->replacetxt('pon','<h1>'.$k->url.'</h1>'); $k->replacetxt('load();','');//これを忘れると永久にリクエストするので注意 $k->tostr(); }
さっきのt.phpにXMLHttpRequestオブジェクトを用意してリクエストする。リクエストを送って、返ってきた内容をdocument.writeで書き出す。
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0"> <script src="http://code.jquery.com/jquery-1.9.0.min.js"></script> </head> <body> <h1>hi</h1> pon <script> function load(){ $.get('t.php',{url:location.href},function(data){ document.open(); document.write(data); document.close(); }); } load(); </script> </body> </html>
テストも書いた!
<?php require_once 'PHPUnit/Autoload.php'; require_once './LoadRe.php'; class Unagi extends PHPUnit_Framework_TestCase { protected $lr; protected function setup() { $this->lr = new LoadRe(); } public function testUrl() { $this->lr->seturl(); $this->assertEquals('http://localhost/test/k.php',$this->lr->url); } public function testLoadurl() { $this->lr->seturl(); if($this->lr->getContent()){ $this->assertTrue(true); } } public function testExist() { $this->lr->seturl(); $this->lr->getContent(); $line = $this->lr->getline(9); $this->assertEquals('pon',$line); } public function testRep() { if($this->lr->replacecomp){ $this->assertTrue(true); } } }