1 月 22
ブログでレベルアップが時々画面真っ白になって何も表示されないことがあったんだけど、理由はこれかもしれない。一応.htaccessに書いてみたけど、どうなんだろ。確認しにくいな。
可能性として、運用されているPHPスクリプトと、サーバー側でのPHP高速化・キャッシュモジュールとの相性の問題が発生していることがあります。その場合は、下記コマンドを「.htaccess」に記載してください。
php_flag apc.cache_by_default off
(PHPでのエラー対策について - CORESERVER.JP:コアサーバーより)
それと、これはどういう意味だ?外部からうちのドメインのファイルはリモートで読めないようになってるってことなんかな。なるほどね。
標準で、include()/require()によるURLの取得ができなくなっております。おすすめいたしませんが、ご利用いただくには、下記コマンドを「.htaccess」に記載してください。
php_flag allow_url_fopen on
php_flag allow_url_include on
Tags: PHP, メモ
1 月 04
PHP Hacks―プロが教えるWebプログラミングテクニック

PHPソース内にHTMLタグを書く場合(例えば<form>や<table>)、HTMLタグをechoさせるか、PHPソースを一旦閉じてしまってからPHPソース外にHTMLタグを書かないといけない。当たり前だけどこれが意外とかったるいイメージがあって、フォームやテーブルを使いたくなくなることがある(特にテーブル)。んで、お年玉で買ったこの本にね、面白い書き方がしてあってちょっと感動した。
例えば、PHPソース内に<form>タグを書きたい場合、form.php(名前適宜)にフォームだけを表示するよう以下のように記述;
<?php
function show_form(){
?>
<form>フォーム内容</form>
<?php
}
?>
次に、以下のindex.php(名前適宜)のフォームを表示させたい場所にshow_form()を呼び出す;
<html>
<head>
<?php include('./form.php'); ?>
</head>
<body>
<?php
/* PHPソース色々 */
/* PHPソース色々 */
show_form(); //ここに上記フォーム内容が表示される
/* PHPソース色々 */
/* PHPソース色々 */
?>
</body>
</html>
こういう風に書く利点は
- PHPソース内に関数を呼ぶだけでフォーム(やテーブル)が書ける(index.php)。
- PHPとHTMLが入り乱れるような煩雑なソースにならない(index.php)。
- Dreamweaverで作業する時にフォーム部分が色分けされていてわかりやすい(form.php)。
ミソはform.phpの書き方かな。ちなみにこれはHACKSでもなんでもない部分なんだけど、煩雑になる部分を外部ファイルにするとか思いつかなかったな。フォームの主要要素(actionやinput内容)を引数に持つ関数やテーブルのレイアウトに関する情報を引数に持つ関数を作ったら汎用性がありそう。
Tags: PHP
12 月 17
FLASHのload関数で直接読み込めないファイル(異なるドメインのXMLファイル等)は、PHP等のサーバー側スクリプト言語を利用することでFLASHに読み込ませることができる。PHPを使う場合の手順は以下の通り(具体的なソース等はこちらを参照)。
- FLASHからPHPへ。SendAndLoad関数等を用いてPHPへ読み込みたいファイルのURLを送信する。
- PHP内部処理。PHPのreadfile関数等で指定されたファイルを読み込む。
- PHPからFLASHへ。読み込んだファイル内容(標準出力)をFLASHのSendAndLoad関数の返り値に送り返す。
- FLASH内部。SendAndLoad関数の返り値を受け取って続きの処理へ。
しかし、FLASHの日本語文字コードはShift-JISとUTF-8にしか対応していないので(FLASH ActionScript辞典より。ちなみにクソ本)、EUC-JPで記述されたブログ(FC2等)のXMLファイルをPHPでそのまま読み込んでFLASHに送り返すと文字化けしてしまう。そこでPHPで読み込んだファイル内容を文字コードを変換してからFLASHに送り返す必要がある。以下はPHPからFLASHへUTF-8にエンコーディングしてから送るためのPHP内部の処理。
<?php
//readfile関数の内容を標準出力せずに内部バッファに保存させる
ob_start();
//FLASHから送信されたURL先のファイル内容を読み込む(標準出力されない)
readfile($_POST['url_from_flash']);
//内部バッファに保存された内容を変数に格納する
$str = ob_get_contents();
//内部バッファの開放
ob_end_clean();
//上記で変数に格納された内容がEUC-JP, Shift-JIS, UTF-8の場合、UTF-8に再エンコーディング
echo mb_convert_encoding($str,'UTF-8', 'EUC-JP,Shift_JIS,UTF-8');
//UTF-8にエンコーディングされた内容を標準出力(出力内容がFLASHへ送信される)
echo $str;
?>
追記(2007/12/17): なんかコードがダメ出しされてる。ただ肝心な部分のフィードバックがないので何がダメなのかわからず終い。
追記(2007/12/19): 先方で詳細コメント・解説をもらえた。単独では知り得なかった現在の状況が把握できたので有益なTB。
Tags: FLASH, PHP, メモ
10 月 04
概要
MovableTypeの各記事の人気ランキングを表示する方法。MTのランキング集計についてはJeff Borlikという方が作成したT-MostVisitedというMT用プラグインが有名みたいだけど、各記事のファイル名を日付で生成している場合(例えば17174937.htmlとか)やアクセスログがgzip圧縮されていたりするとそのままでは使えない。今回はOpen MagicVox.netさんが配布しているPHPスクリプトを用いてログ解析から集計結果の表示までを行った。Open MagicVox.netさんのところにランキング表示までの一般的なインストラクションが記述されているが、カスタマイズ設定はどこかにメモしておかないと忘れると思ったのでここにメモ。なお著者の使用するサーバーはハッスルサーバー。ロリポップやSAKURA Internetの設定方法は探せばネット上にゴロゴロあると思います。
(ソースコード配布とありますが、気にせず続きは以下へ)
Continue reading »
Tags: PHP, メモ
8 月 18
JavaScriptのソースコードのみで任意のドメイン上に設置できる外部RSSリーダー(FLASH)作成に関するメモ。このRSSリーダーによりドメインA上に、ドメインB上のFLASHファイルを用いて、ドメインC上のRSSフィード情報を表示することができる。FLSHは「FLASHファイルのあるドメイン」と異なるドメイン上のXMLファイルを普通読むことができないので、FLASHファイルのあるドメイン上に 外部XMLファイルを擬似的に生成してFLASHファイルにロードしてやる必要がある。以下はそのクロスドメインの問題に関する、JavaScript - PHP - FLASHの連携について自分がつまずいたところを強調して解説してある。
ユーザー側JavaScriptソースコード。”http://boreal-kiss.com/js/url_request_rss20.js”にて定義された関数url_request()の引数に取得したいRSSフィードURL(例えば “http://blog.borel-kiss.com/index.xml”)を記述。これによりこのソースコードを記述した地点にFLASHファイル(”http://boreal-kiss.com/flash/rss/rss_reader_20_load_php.swf”)が表示され取得情報を表示する。
<script type="text/javascript" src="http://boreal-kiss.com/js/url_request_rss20.js"></script>
<script type="text/javascript" language="JavaScript">
url_request("http://blog.borel-kiss.com/index.xml");
</script>
関数url_request()の中身。FlashVars属性を用いてJavaScriptからFLASHファイル内で定義された変数に値を渡しFLASHファイルを表示。ここではJavaScript内の変数urlの中身をFLASH内の変数url_xmlに渡している。
function url_request(url){
var flash_obj = ‘<object classid=”clsid:d27cdb6e-ae6d-11cf-96b8-444553540000″ codebase=”http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0″ width=”176″ height=”60″ id=”rss_reader_20_load_php” align=”middle”>’
+ ‘<param name=”allowScriptAccess” value=”always” /”>’
+ ‘<param name=”movie” value=”http://boreal-kiss.com/flash/rss/rss_reader_20_load_php.swf” /”>’
+ ‘<param name=”quality” value=”high” /”>’
+ ‘<param name=”wmode” value=”opaque” /”>’
+ ‘<param name=”FlashVars” value=”url_xml=’+url+’” /”>’
+ ‘<embed src=”http://boreal-kiss.com/flash/rss/rss_reader_20_load_php.swf” quality=”high” wmode=”opaque” bgcolor=”#333333″ width=”176″ height=”60″ name=”rss_reader_20_load_php” align=”middle” allowScriptAccess=”always” type=”application/x-shockwave-flash” pluginspage=”http://www.macromedia.com/go/getflashplayer” FlashVars=”url_xml=’+url+’” /”>’
+ ‘</object”>’;
document.write(flash_obj);
}
FLASH内ActionScriptのソースコード(抜粋)。JavaScriptから受け取った値をurl_xmlに格納、そして同じ内容をLoadVarsクラス内オブジェクトmyData.url_inに格納しなおす(起動時にmyData.url_inに格納しようとしたらうまくいかなかった)。sendAndLoadメソッドでmyDataの情報(ここではmyData.url_in)をPHPファイルに送信し処理後のPHPファイルの内容をXMLクラスnewsXMLに格納する。格納後内容の解析をスタート。ここでPHPファイルは絶対パスで指定する必要がある。異なるドメイン間で通信する場合、相対パスで表記したファイルをFLASHが認識できなかった。
//XMLクラス
var newsXML:XML = new XML();
//ファイル読み込み時に空白を無視(今回は必要ないかも?)
newsXML.ignoreWhite = true;
//FLASHファイル起動時にJavaScriptから値を受け取っている。
var url_xml:String;
//LoadVarsクラス内のオブジェクトmyData.url_inにurl_xmlを格納。
var myData:LoadVars = new LoadVars();
myData.url_in = url_xml;
//PHPファイル(”load.php”)にmyDataの中身を送り、
//PHPファイルで処理後の内容をnewsXMLに格納する。
//PHPファイルは絶対パスで指定。
myData.sendAndLoad(”http://boreal-kiss.com/flash/rss/load.php”, newsXML);
newsXML.onLoad = function(result:Boolean){
(newsXMLロード後の処理)
}
サーバー側PHPソースコード(”load.php”<body>タグ内の内容)。FLASHから変数url_in(RSSフィードURL。例えば “http://blog.borel-kiss.com/index.xml”)を受け取り、その内容をその場に表示。このPHPファイル自体がFLASHファイルの置かれている同一ドメインに生成された疑似XMLファイルの役割を果たす。PHPのソースコードはHTMLファイル内に表記されているため、この疑似XMLファイルには取得したいXMLファイルの内容の他に<html>や<body>タグ等も含まれる。FLASHでこの疑似XMLファイルの中身を解析する際に注意が必要。
<?php
$url = $_POST["url_in“];
readfile($url);
?>
追記(2007/12/17):上記内容の場合、読み込んだXMLファイルのエンコーディング(EUC-JPなど)によっては文字化けしてFLASHに格納される。文字化けを回避する具体的な方法についてはこちらを参照。
Tags: FLASH, JavaScript, PHP