カテゴリー : PHP

SSL通信でFlashから別ドメインのPHPにPOSTする時のIE6/7/8のエラー

■環境
①https://hoge.com/index.html
・トップページにはFlashのフォームがあり、②のサーバにデータを送信する。

②https://example.com/index.php
・Flashからデータを受け取りDBに登録する。
・XMLを出力しFlashに返す。

■現象
・SafariやChrome・FireFox・IE9では正常に登録できる状態で、
IE6/7/8ではPHPへデータを送信できていない。

■その他
・https://example.com/crossdomain.xmlは設置済み

<?xml version="1.0"?>
<cross-domain-policy>
<allow-access-from domain="*" secure="false" />
</cross-domain-policy>

■解決策
いろいろ調査した結果、example.comに置いてあるPHPのCache設定がよくないらしい、、、
IEのバグらしくSSLでアクセスしたときにsession_cache_limiterがnocacheだとFlashから読み込めないんです。

SSL 経由でファイルのダウンロードを Internet Explorer キャッシュ コントロール ヘッダーが機能しません

PHPのsession_start();を行う前に

session_cache_limiter('private');

を追記。

session_cache_limiter

そして、ページを描画する前にheaderでLast-Modifiedを送信することで、
キャッシュに残っているPHPを読み込みなおしてくれます。

header("Cache-Control","public");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . "GMT");

今回はFacebookのJavascript SDKが使い物にならず、
PHPのSDKを使うことから始まりました。
そもそもFlashから直接SDKを使用すると、OAuth以外まともに動いてくれませんでした。

PHP用のFacebook SDKは優秀で、コードを殆ど書かなくても使用できるのが便利です。
TwitterのOAuthよりかなり簡単です。
しばらくは、自前のFlash用SDKを使用して、Facebookとのやりとりを行うとします。

【PHP】桁数を統一できるカウンタ。注文番号などに使う!

PHPでDBを使わずに、注文番号の管理をしたいと先方に言われたので、
カウンターを作って、ゼロ埋めして返すFunctionを作成しました。

引数には、カウンタのファイル名と桁数を入力すると、
返り値に注文番号を返します。

■実行

$order_no = $this->counter(dirname($_SERVER['DOCUMENT_ROOT']).'/approot/count.txt',6);

■関数

/*
 * @access  public
 * @param     String    $filename    カウンタファイル保存先
 * @param     Int    $sprintf    桁数を統一
*/

public function counter($filename,$sprintf = 1){
  //ファイルがなかったら作成する
  if (!file_exists($filename)) {
    touch( $filename );
    chmod( $filename, 0777 );
  }
  $fp = @fopen($filename,"r+") or die("ファイルが開けません");
  flock($fp, LOCK_EX);
  $count = fgets($fp, 64);
 
  if( (int)$count === 0 ){
    //ファイルがない場合のデフォルトは1
    $count = 1;
  }else{
    //数値が取得できたら連番をつける
    $count++;
  }
  rewind($fp);
  fputs($fp, $count);
  fclose($fp);
  return sprintf('%0'.$sprintf.'d', $count);
}

【Service】Tiny Message Xtw.me -短縮メッセージサービス-

tinymessage

tinymessage

Tiny Message Service Xtw.me -短縮メッセージサービス- をリリースしました!

このサービスはツイッターやマイクロブログで今までつぶやけなかった140文字の壁を超えるサービスです!

簡単に言うとこのツールを使うとツイッターで250文字までつぶやけちゃいます。

そんなにつぶやくことないと思うかもしれませんが、RTが多くなってくると、入りきらない分はDeleteしなければいけないですね、、、

途中から見た人はいったいどんな流れなのかよくわからなかったりします。

そんな時にこのツールを使うと長いメッセージも保存できてしまうんです!

一度お試しくださいw

今後は、モバイル対応・Oauth対応などどんどんバージョンアップしていきます!

機能改善やご要望などありましたらお問い合わせより連絡ください!

Tiny Message Service Xtw.me -短縮メッセージサービス-

【Lighttpd】WordPressやDooPHPを動かす設定

lighttpd

lighttpd

Lighttpdは.htaccessが標準で使えないです。
htscannerを入れると動くようですが、Lighttpdの設定を変更するだけでWordPressやDooPHPが動くようになります。

WordPressでパーマリンクの設定を行わなければ、問題ないかと思いますがメモとして書いておきます。

バーチャルホストの設定で、rewrite部分を追加します。

vim /etc/lighttpd/cond.d/example.com.conf

############WordPressの場合############
$HTTP["host"] == “dev.example.com”{
server.document-root = “/home/vhosts/example.com/dev/htdocs”
url.rewrite-once = (
“^/(wp-.+).*/?” => “$0″,
“^/(sitemap.xml)” => “$0″,
“^/(xmlrpc.php)” => “$0″,
“^/(.+)/?$” => “/index.php/$1″,
)
}

############DooPHPの場合############
$HTTP["host"] == “dev.example.com”{
server.document-root = “/home/vhosts/example.com/dev/htdocs”
url.rewrite-once = (
“^/(.+)/?$” => “/index.php/$1″,
)
}

サーバモジュールを有効にします。
vim /etc/lighttpd/lighttpd.conf

server.modules = (
“mod_fastcgi”,
“mod_cgi”,
“mod_rewrite”,
“mod_access”,
“mod_evhost”)

以上でWordPressなどがApacheと同じように動作します。

【DooPHP】1.3.1でPHP Fatal error: Cannot redeclare class

DooPHP - fastest MVC based PHP framework

DooPHP - fastest MVC based PHP framework

DooPHPの新しいバージョンがリリースされたので早速使用してみました。

が、、、、全く動きません、、、

エラーログを見ると、
PHP Fatal error: Cannot redeclare class
と書いてあります。

CLASS名が繰り返し使用されてます、、、
今まで普通に動いていたので新しいdooframeworkに問題があると思いきや、
deploy.phpを読み込んだ直後にエラー。

dooframeworkに付属のdemoを見てみると正常に動作しています。

しばらく悩んだ結果、index.phpに変更があったことに気づきました。

DEMOblogのindex.phpのdeploy.phpがコメントアウトされている。

//include $config['BASE_PATH'].’deployment/deploy.php’;
include $config['BASE_PATH'].’Doo.php’;
include $config['BASE_PATH'].’app/DooConfig.php’;

そして、Doo.phpとDooConfigを直接読み込みにいく形に変更。

普通はそこ変えないだろう…

まぁ動いたからいいけど。

lighttpdも入れ終わったので、
最速サーバ+最速フレームワークで最強なPHP環境を構築できた。

lighttpddoophpを入れていない方は是非お試しください。