PHP関連

fopenをURLで設定可能にするためのhtaccess記述方法

サーバによって、fopenはURLで開けなくなっています。

そのような場合は、htaccessに

php_flag allow_url_fopen on

と記述してみましょう。

すべてのサーバでうまくいくとは限りませんが、少なくともファーストサーバではうまくいきました。

アクセス解析プラグイン「StatPress Reloaded」【WordPress】

WordPressのアクセス解析用プラグイン「Stat Press Reloaded」を入れてみました。

インストール方法はいつものように

  1. ダウンロードサイトからデータを入手
    http://wordpress.org/extend/plugins/statpress-reloaded/
  2. 解凍する。(解凍すると「statpress-reloaded」フォルダができます。)
  3. 「wp-content/plugins/」フォルダに、解凍したフォルダごとアップロードする。
  4. WordPressの管理画面に入り、「プラグイン」画面にて「StatPress Reloaded」を有効にする。

以上です。

日本語化する場合は、こちらのサイトからダウンロードしてください。

【WordPress】「StatPress Reloaded」の日本語化ファイル公開 | ECWorks Blog

解凍すると、StatPress Reloadedの時と同様に「statpress-reloaded」フォルダができますので、そのまんま「wp-content/plugins/」フォルダにアップロードしてください。

これで日本語化されますが、場合によってはファイル名を変更しなくてはならない場合もあります。

「wp-content/plugins/statpress-reloaded/locale/」フォルダの中にある

  • statpress-ja_JP.mo
  • statpress-ja_JP.po

をそれぞれ、_JPを取って

  • statpress-ja.mo
  • statpress-ja.po

に変更してください。

これで日本語化も完了です。

見た目はこんな感じ↓

リアルタイムで更新されるし、見た目もわかりやすいし、かなりいい感じです♪

注意点として、アクセスログはデータベースに蓄積されるため、設定をうっかり忘れると膨大な量のログが永遠にたまっていくことになります。

プラグインを入れたら、すぐにWordPress管理画面左下にある、「StatPress>オプション」にてログの削除期間を設定してください。

 

【追記】

注意点2。

デフォルトだとOS集計のグラフで「Windows7」が「Windows NT 4」の方に集計されてしまうバグがあります。

解決方法はこちらのサイトをご覧ください。

StatPress-ReloadedでWindows7がNT4と表示されて困る | ハルカゼオンライン

nandani | 2011年01月28日 | コメント(0) | トラックバック(6) | CMS関連 | PHP関連

cakePHPの初期設定【オールグリーンにする方法】

久しぶりにCakePHPを導入したらすっかり設定方法を忘れていたのでメモ。

CakePHPを設置して、未設定のままアクセスすると必ずイエローで表示されてしまう部分があります。

1つは「app/config/core.php」の設定、もう1つは「app/config/database.php」の設定を変更する必要があります。

 

app/config/core.php

まずは「app/config/core.php」から。このファイルをテキストエディタで開き、以下の2か所の設定を変更します。

  • Security.salt
  • Security.cipherSeed

「Security.salt」は適当な英数字の文字列、「Security.cipherSeed」は適当な数字の文字列を設定してください。

両方なんでもかまいません。

適当にキーボードを叩いてください。

 

app/config/database.php

次に「detabase.php」。「app/config/」フォルダの中にある「database.php.default」ファイルの名前を「database.php」に変更してください。

「database.php」をテキストファイルで開き、「class DATABASE_CONFIG」の「$default」部分を、使用するデータベースの設定に変更してください。

例)ローカルホストの場合

 var $default = array(
  'driver' => 'mysql',
  'persistent' => false,
  'host' => 'localhost',
  'login' => 'root',
  'password' => '',
  'database' => db_name',
  'prefix' => '',
 );

これですべてオールグリーンとなります。

nandani | 2011年01月27日 | コメント(0) | トラックバック(0) | PHP関連

SWFUploadをとりあえず動かす!

Flashとjavascriptを利用して、複数のファイルを一気にアップロードすることができる「SWFUpload」

とりあえず動けばいいとの考えのもと、設置方法の手順を記述します。

 

SWFUploadをダウンロードする。

SWFUploadサイトからファイルをダウンロードしてください。

(ダウンロードページはこちらになります。)

ダウンロードページにはいろいろとファイルがリストされていますが、
SWFUpload v××× Samples.zip
をダウンロードしてください。(×××はバージョンナンバーです。ちなみに自分がダウンロードしたファイルはv2.2.0.1でした。)

 

サーバに設置する。

ダウンロードしたファイルを解凍してください。「SWFUpload v××× Samples」というフォルダができます。このままでは長いので適当にフォルダ名を変えてください。ここでは「swfupload」と名前を変えたことにします。

これをフォルダごと、サーバにアップロードしてください。

 

デモを実行する。

ブラウザにて、「http://○○○/swfupload/demos」にアクセスしてください。(○○○はドメイン名です。)デモ一覧が表示されます。

ここでは一番シンプルな「Simple Upload Demo」を変更していきます。

「Simple Upload Demo」を開くと以下のような画面になります。

この画面で「Hello」ボタンを押すと、アップロードするファイルを選択するウィンドウが開きます。このウィンドウで複数ファイルを選択できるので、ファイルを選択してください。

選択後、「開く」ボタンを押すと、すぐにアップロードが始まります。

アップロードの進行状況は「Upload Quere」のところで確認できます。

すべてCompleateになったらアップロード完了です。

が!

どこ探してもアップロードされたはずの画像が見つからない!

それもそのはず。

デモではあくまで動作が見れるだけあって、実際にアップロードされているわけではないからです。

ではアップロードするためにはどうすればよいのか。

 

「upload.php」を修正する。

「swfupload/demos/simpledemo」フォルダの中にある「upload.php」をテキストエディタで開いてください。

現時点では「upload.php」とは名ばかりのプログラムです。

このプログラムに以下の記述を追加してください。

exit(0);の前に

$upload_path = "アップロード先のパス";

// Handle the upload
if (!move_uploaded_file($_FILES["Filedata"]["tmp_name"],
    $upload_path . $_FILES["Filedata"]["name"])) {
    header("HTTP/1.0 500 Internal Server Error");
}

なお、このプログラムは「cronos feed 2.0::SWFUploadを使ってみる」からいただきました。

$upload_path = "アップロード先のパス"; はアップロード先のフォルダを設定しています。ここで記述したパスと同じ場所にアップロードフォルダを作成してください。(パーミッションに注意)

これで無事複数アップロードするようになりました。

Javascriptで日付の比較

javascriptで日付の比較をするとき、以下のように記述するとします。

if("2010/12/31" > "2010/12/15"){

~処理~

}

このような比較方法でも、多くのブラウザでは正常に動作してくれます。

しかし、予想通りというかIE6以下では動作せずエラーを吐いてくれます。

この腐ったブラウザIE6で対応させるには、一度time(※)にする必要があります。

PHPでは「strtotime」という非常に便利な関数があるのですが、javascriptでは残念ながらそれに該当する関数は無いようです。

しかし、Googleで調べていたら、やはりそのような関数を作ってくださっている方がいました。

Javascript strtotime (php.jsさんのサイト)

これで

strtotime("2010/12/31");

という風に使用すればtimeで出力してくれます。

※Unix エポック(1970 年 1 月 1 日 00:00:00 GMT)からの通算秒

PHPで今現在開いているページのURLを取得する

いつも忘れるのでメモ。

$_SERVER['REQUEST_URI']

でルートからのパスは取得できます。(例:"/web_all/php/")

httpからほしい場合は

'http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];

としてください。

nandani | 2010年12月14日 | コメント(0) | トラックバック(0) | PHP関連

YoutubeのコードをW3Cバリデーションチェックでもエラーが出ないコードに変換するプログラム

Youtubeの埋め込みコードをそのまま張り付けると、embedタグが含まれるためW3Cバリデーションチェックで多大なエラーを吐いてくれます。

はっきり言ってembedタグなくても、マルチブラウザで対応できる記述方法はある!

たとえば「はやぶさ」の動画の埋め込みコード

<object width="640" height="385"><param name="movie" value="http://www.youtube.com/v/waJdDeYlidQ?fs=1&amp;hl=ja_JP"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/waJdDeYlidQ?fs=1&amp;hl=ja_JP" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="385"></embed></object>

これはこのように変換できます。

<object data="http://www.youtube.com/v/waJdDeYlidQ?fs=1&amp;hl=ja_JP" type="application/x-shockwave-flash" width="640" height="385"><param name="movie" value="http://www.youtube.com/v/waJdDeYlidQ?fs=1&amp;hl=ja_JP" /><param name="wmode" value="transparent" /></object>

用は

<object data="動画のURL" type="application/x-shockwave-flash" width="動画の幅" height="動画の高さ"><param name="movie" value="動画のURL" /><param name="wmode" value="transparent" /></object>

となればよいわけです。

が、自分で張り付けるならこれくらいの作業は行うんですが、お客さんにもやってもらうというわけにはなかなかいきません。

バリデーションチェックなんてWEB屋か詳しい人でもない限りあまり気にしないでしょうからね。

というわけでPHPにて自動的に変換する関数を作りました。

※Youtubeコードだけの場合、変換することが可能なプログラムです。
記事中に含まれるコードを変換させるのはこの関数では無理です。
カスタムフィールドなどを使ってYoutubeコードを投稿できる仕様にしている場合のみご利用ください。

function youtubeCodeW3C($movie_code, $movie_title=NULL, $width=NULL, $height=NULL){

    //URL取得
    if (eregi("(https?|ftp|news)(://[[:alnum:]\S\+\$\?\.%,!#~*/:@&=_-]+)", $movie_code)) {
        $movie_url_code = eregi_replace("(https?|ftp|news)(://[[:alnum:]\S\+\$\?\.%,!#~*/:;@&=_-]+)", "<>\\1\\2<>", $movie_code);
        $movie_url_code_split = explode("<>", $movie_url_code);
        $movie_url = $movie_url_code_split[1];
    }
   
    //width取得
    if($width != NULL){
        $width_value = 'width="'.$width.'"';
    }elseif (eregi('(width=?)("[0-9]+")', $movie_code)) {
        $width_code = eregi_replace('(width=?)("[0-9]+")', "<>\\1\\2<>", $movie_code);
        $width_code_split = explode("<>", $width_code);
        $width_value = $width_code_split[1];
       
    }
   
    //height取得
    if($height != NULL){
        $height_value = 'height="'.$height.'"';
    }elseif (eregi('(height=?)("[0-9]+")', $movie_code)) {
        $height_code = eregi_replace('(height=?)("[0-9]+")', "<>\\1\\2<>", $movie_code);
        $height_code_split = explode("<>", $height_code);
        $height_value = $height_code_split[1];
    }
   
    $w3c_code = '<object data="'.$movie_url.'" type="application/x-shockwave-flash" '.$width_value.' '.$height_value.'><param name="movie" value="'.$movie_url.'" /><param name="wmode" value="transparent" />'.$movie_title.'</object>';

    return $w3c_code;
}

youtubeCodeW3C関数の引数はそれぞれ以下の通りです。

  • $movie_code:Youtubeから取得した埋め込みコード
  • $movie_title:動画のタイトル(NULLでも可)
  • $width:動画の幅(NULLでも可)
  • $height:動画の高さ(NULLでも可)

サンプル

nandani | 2010年12月14日 | コメント(2) | トラックバック(0) | PHP関連

Google Map へのリンク

トラックバックを下さった方のページで、超簡単に地図を表示する方法が書いてあったので、じゃあ今度はマップへのリンクを簡単に取得する方法はないかな~と思い、少し調べてみました。

特定の住所を示したGoogle Mapへのリンクは本来なら、Google Mapページで「地図を検索」し、その結果の「リンク」を取得してaタグで張り付ける、という手順になります。

が、そんなことをわざわざしなくても、PHPでものすごく簡単にリンクURLを取得することができました。

サンプル[新しいウィンドウで開く]

ソース

<?php
    $address = "和歌山県和歌山市一番丁3"; //住所
   $address_encode = urlencode($address);
   $zoom = 15;  //ズームレベル
 
   $gmap_url = "http://maps.google.co.jp/maps?q=".$address_encode."&z=".$zoom;
?>

<p><a href="<?=$gmap_url;?>">和歌山城の地図</a></p>

  • $address:住所
  • $zoom:地図のズーム値

URLエンコーディングさえできればいいので、perlでもjavascriptでも可能なんですけどね。

GoogleMapのページからリンクURLを取得すると

http://maps.google.co.jp/maps?q=%E5%92%8C%E6%AD%8C%E5%B1%B1%E7%9C%8C%E5%92%8C%E6%AD%8C%E5%B1%B1%E5%B8%82%E4%B8%80%E7%95%AA%E4%B8%81%EF%BC%93&ie=UTF8&hq=&hnear=%E5%92%8C%E6%AD%8C%E5%B1%B1%E7%9C%8C%E5%92%8C%E6%AD%8C%E5%B1%B1%E5%B8%82%E4%B8%80%E7%95%AA%E4%B8%81%EF%BC%93&ll=34.226529,135.174966&spn=0.025583,0.046821&z=15&brcurrent=3,0x6000b2c10241e76d:0x7f27c18451970b13,0

というものすごく長いURLになりますが、実際は「q=」(住所)「z=」(ズーム値)の値を渡すだけでもちゃんと表示するようです。(もっと言えば「z=」すらいらないんですけどね。)

各パラメータについてはこちらのサイトにまとめられてます。

Google Maps のパラメータ

nandani | 2010年11月01日 | コメント(4) | トラックバック(4) | API関連 | PHP関連

PHPでLDAPに接続する

LDAPサーバがようやくできたので、PHPで接続してみました。

以下プログラム例です。

※「設定」の部分はLDAPサーバの設定に合わせる必要があります。

<?php

//設定
$ldap_host = "localhost"; //LDAPサーバのホスト
$ldap_port = 389; //ポート
$ldap_dc = "dc=ldap-server,dc=com";
$ldap_cn = "Dari"; //cn
$ldap_ou = "Unit"; //ou
$ldap_pass = "password"; // パスワード

//接続開始
$ldap_DN = "cn=".$ldap_cn.",ou=".$ldap_ou.",".$ldap_dc;
$ldap_conn = ldap_connect($ldap_host, $ldap_port);

if($ldap_conn){
    echo "<p>接続成功</p>";

    $ldap_bind  = @ldap_bind($ldap_conn, $ldap_DN,$ldap_pass);
   
    if($ldap_bind){
        echo "<p>バインド成功</p>";
       
        $ldap_search = ldap_search($ldap_conn, $ldap_DN,"cn=*");
        $get_entries = ldap_get_entries($ldap_conn,$ldap_search);
       
        //エントリ情報出力
        print_r($get_entries);   
    }else{
        echo "<p>バインド失敗</p>";
    }
    ldap_close($ldap_conn);
}else{
    echo "<p>接続失敗</p>";
}

?>

※上記のプログラムを実行するには、PHPを実行させるサーバに「php-ldap」モジュールが入っていること、そしてLDAPサーバがあることが前提です。

うまくバインドできればエントリ情報が出力されるかと思います。

バインドできたかどうかの判断をさせれば、ユーザ認証にも使用できますね。

Fedora11でLDAPサーバ構築

以下は超Linux初心者のメモ書き的なものです。

テスト用にLDAPサーバを構築するため、事務所のLINUXサーバを取り出してきて、Fedora13をインストールしたのが先週。

しかしOpenLDAPをインストールしようとしてもうまくいかない。というのも、どうやってもなぜか「slapd.conf」が見当たらないんです。

こちらのサイトに「openldap-servers」がないからでは?という回答を見つけたので「rpm -qa | grep openldap」を実行してみるもちゃんとインストールされてある。

困ったなぁ、なんて悩んでいると、同僚が一言。

「Fedoraのバージョン下げたら?」

うむ、確かにFedora11では正常にOpenLDAPが動作している様子(Server Worldさんサイト参考

さっそくYamagata Univのサイトからバージョン11をダウンロードします。

今回はCDにして6枚組。多いなぁ・・・

ダウンロード→CDに焼く→インストール→初期設定方法についてはFedora13の時とほぼ同じです。

続いてServer WorldさんのサイトFedoraで自宅サーバ構築さんのサイトを参考にOpenLDAPのインストールと設定を行います。

LDIFファイルの作成と登録方法についてはこちらのサイトを参考にさせてもらいました。参考サイト:UNIX Lifeさんのサイト

ウェブサーバと別にする場合は、

# /usr/bin/system-config-firewall

でファイヤーウォールを立ち上げて、ポート389を開放してください。

これでLDAPサーバの完成です。

はっきり言って、Linuxサーバ構築も初心者だしLDAPについてもそもそもLDAPって何?から始めましたがやっているうちになんとなく分かってくるものですね~。

ついでに

PHPからLDAPに接続する場合はphp-ldapモジュールが入っていないと使用できません。(phpinfoを見るか「# rpm -qa | grep openldap」を実行するとわかります。)

入っていない場合は「#yum -y install php-ldap」を実行しましょう。

 

■追記

よく使用するコマンド

SLAPD データベースからの LDIF の生成する

/usr/sbin/slapcat

ldifファイルよりエントリを登録(以下例:taro.ldifファイルから登録する場合)

ldapadd -f taro.ldif -x -D "cn=Manager,dc=localhost,dc=com" -W

エントリを削除(以下例:cn=taro,ou=Unit,dc=localhost,dc=comでバインドしているエントリを削除する場合)

ldapdelete -x -D "cn=Manager,dc=localhost,dc=com" -W "cn=taro,ou=Unit,dc=localhost,dc=com"

 

スキーマについての参考サイト

 

エラーについての参考サイト

Copyright(c) 2010 - 2024 ダリの雑記