PHP関連
Fatal error: Call to undefined function ldap_connect()
Fedora11にて、OpenLDAPをインストールし、設定を終えPHPからLDAPにアクセスしようとしたら、こんなエラーを吐き出しました。
Fatal error: Call to undefined function ldap_connect()
どうやら「php-ldap」が入っていないのが原因なようなので
# yum -y install php-ldap
で「php-ldap」をインストールし、Apacheを再起動。
無事解決しました。
nandani | 2010年10月18日 | コメント(0) | トラックバック(0) | PHP関連 | サーバー関連
EOF内にて変数を使用する方法
PHP内で文字列を変数に格納するする方法として
$hoge = "文字列";
という方法と
$hoge =<<<EOF
文字列
EOF;
というものがあります。
長い文章などを利用する場合は後者の方が便利なのですが、その中でPHP処理を行えません。
しかし変数ならば{}という風に囲んで使用することができます。
$hensu = "追加文字列";
$hoge =<<<EOF
文字列
{$hensu}
EOF;
これで「$hoge」を「echo」で出力すると「文字列 追加文字列」という風に表示されます。
nandani | 2010年07月27日 | コメント(0) | トラックバック(0) | PHP関連
WordPressで記事のコメント一覧とトラックバック一覧を表示する方法
■突然ですが追記です
以下で長々と述べるコメントとトラックバックのセパレート方法ですが、「Trackping Separatorプラグイン」で何とかなるようです。
参考サイト (日々是好日さん)
コメント・トラックバックの別々表示方法パート2です。
ただしこの記事に関しては、「プラグイン検索をしてもあまりピンとこないし、時間もないからもう無理やり作ってしまえ!」という考えの元作ったため、利用価値はあまり無いかもしれません。
覚書ということで^^;
で、その無理やりな方法とは、
データベースから$wpdb->get_results使って取得する
です。
困った時のSQL作戦というわけです。
以下やり方
まずはコメント
<?php
$query = "SELECT * FROM wp_comments
WHERE comment_post_ID = '".get_the_ID()."'
AND comment_approved = '1'
AND comment_type = ''";
$get_comments = $wpdb->get_results($query, "ARRAY_A");
if(!empty($get_comments)):
foreach($get_comments as $comment_value):
?>
<div>
<p><?php echo $comment_value["comment_author"]; ?> | <a href="<?php echo $comment_value["comment_author_url"]; ?>">URL</a> | <?php echo $comment_value["comment_date"]; ?></p>
<p><?php echo $comment_value["comment_content"]; ?></p>
</div>
<?php
endforeach;
endif;
?>
データベースの構造についてはこちらをご参照ください。 参考サイト
■SQLの条件になっているフィールド名について
・comment_post_ID:記事のID。get_the_ID()で呼び出しましょう。
・comment_approved:「0」承認待ち、「1」承認済み、「spam」スパム
・comment_type:「trackback」トラックバック、「pingback」ピンバック、コメントは値なし(つまり空)
取得したデータは、「wp_comments」テーブルのフィールド名がキーとなって配列に格納されています。あとはforeachでループして、配列からデータを呼び出せば完成です。
■呼び出している配列のキーについて
・comment_author_url:コメント投稿者のURL
・comment_author:コメント投稿者名
・comment_date:コメント投稿日時
・comment_content:コメントの内容
これで
ダリ | URL | 2010-07-15 19:02:14
この記事については、ちょっと無理やりな方法でコメント取り出してます。使えなくても勘弁ね。
という風なコメント記事が一覧を表示できます。
つづいてトラックバック
<?php
$query = "SELECT * FROM wp_comments
WHERE comment_post_ID = '".get_the_ID()."'
AND comment_approved = '1'
AND comment_type = 'trackback'";
$get_comments = $wpdb->get_results($query, "ARRAY_A");
if(!empty($get_comments)):
foreach($get_comments as $comment_value):
?><div>
<p><a href="<?php echo $comment_value["comment_author_url"]; ?>"><?php echo $comment_value["comment_author"]; ?></a> | <?php echo $comment_value["comment_date"]; ?></p>
<p><?php echo $comment_value["comment_content"]; ?></p>
</div><?php
endforeach;
endif;
?>
コメントのときとほぼ同じです。
これで
ダリの雑記 | 2010-07-15 19:02:14
コメントとトラックバック...この記事については、ちょっと無理やりな方法でトラックバックを取り出してます。使えなくても勘弁ね。
という風なトラックバック記事が一覧表示がされます。
とりあえずはこちらで何とか機能しますが、たぶん調べてみればもっと便利なプラグインが存在するでしょうから、そちらをご利用になることをお勧めします。
nandani | 2010年07月18日 | コメント(1) | トラックバック(0) | CMS関連 | PHP関連
MD5を見破る?
PHPにはMD5と呼ばれるハッシュ関数があります。
md5("変数");
という風に簡単に使用できるので何かと便利なのですが、単純な文字列をハッシュ化すると見破られることがあります。
なにも解読するわけではありません。
その見破る方法とは、なんと
です。
たとえば数字の「1」。これをmd5でハッシュ化すると「c4ca4238a0b923820dcc509a6f75849b」となります。
この「c4ca4238a0b923820dcc509a6f75849b」をグーグルで検索すると、なんと40万件以上もヒットし、すぐに元の文字が「1」であることがわかります。
他にも
・admin (21232f297a57a5a743894a0e4a801fc3)
・staff (1253208465b1efa876f982d8a9e73eef)
・user (ee11cbb19052e40b07aac0ca060c23ee)
・writer (a82feee3cc1af8bcabda979e8775ef0f)
など、単純な単語は引っかかってしまうので、いろいろと文字を付け足すなどして手を加えた後ハッシュ化しましょう。
あと、全角日本語などもヒットしにくくなるようです。
参考サイト
http://d.hatena.ne.jp/shunsuk/20071122/1195704611 (「このブログは証明できない。」さん)
nandani | 2010年07月18日 | コメント(0) | トラックバック(0) | PHP関連
cakePHPでデータベースのテーブルにフィールドを追加したときに発生した問題2
前回、cakePHPでデータベースのテーブルにフィールド追加したとき、それが反映されていない問題がありました。
とりあえずは、"fields"=>"*"の追加で一応の解決を見たのですが、あとから不具合がぼろぼろ出てくるわ、こちらでは手の負えない関数で問題が発生するわで、なんとかならんかなぁと思いググってみたらありました!
http://oneday.ter.jp/php/cakephp-php/983.html (イテルの一日一問さん)
「app/tmp/cache/models」フォルダの中にたまっているキャッシュを削除すれば良いらしい。
キャッシュか~。
そんなことだろうとは思ったけど、どこにあるのかはさっぱりわからなかったので助かりました。
ここの記事でも書かれてますが、キャッシュ恐るべし・・・
nandani | 2010年07月18日 | コメント(0) | トラックバック(1) | PHP関連
cakePHPでデータベースのテーブルにフィールドを追加したときに発生した問題
システムの修正でテーブルのフィールドを追加した際、データベースにはデータが入っているのに、findでそのデータを取り出せない問題が発生しました。
ローカル(XAMPP)では正常だったのに、本番サーバ(ファーストサーバを使用)ではうまく動作してくれない・・・
わざとエラーを吐き出させて表示されたSQLを読んでみると、どうやら追加されたフィールドをfieldsで取り出してくれていない様子。とくに設定してないんだけどなぁ。
しかたなく「fields=>"*"」を追加して解決しました。
■こんな感じ
$this->Hoge->find("all", array("fields"=>"*", "conditions"=>$conditions, ));
modelとかと関係あるのかな?
nandani | 2010年07月18日 | コメント(0) | トラックバック(0) | PHP関連
fgetcsvのバグ
いまさらですが、PHP4ではまともに使用できていた「fgetcsv」関数。
PHP5になった途端不具合の嵐です。(サーバによるかもしれませんが。)
$csv = "/www/csv/test.csv";
$fl = fopen($csv, "r");
while($data = fgetcsv($fl, 10000)){
echo $data[0].":".$data[1];
}
としていると、カンマでの区切りがうまくいっていないのか、表示されなかったり、特定の文字で文字化けを起こしたりします。
こうなると、mb_convert_encodingで文字コードを調整しようとしてもうまくいきません。
ここはおとなしくfgetcsvをあきらめてfgetsとexplodeを使用しましょう。
$csv = "/www/csv/test.csv";
$fl = fopen($csv, "r");
while($data_fl = fgets($fl)){
$data_fl = rtrim($data_fl);
$data = explode(",", $data_fl);
echo $data[0].":".$data[1];
}
※rtrimは行の最後にある改行コードを取り除いてくれます。必要に応じて記述してください。自分はよく取り出したデータを条件分岐にかけることがあるので、改行コードの\r\nがあると不具合を起こすことがあります。
記述が少し長くなりますが、これで解決します。
nandani | 2010年07月18日 | コメント(0) | トラックバック(0) | PHP関連
WordPressで日付を表示する際の注意事項
WordPressで日付を表示する際、よく「the_date()」を使用しますが、この関数には問題点があります。
それはアーカイブなどで記事を表示する際、同じ日の投稿が複数あると1つめの記事だけその日付を表示して以後は表示されなくなるということです。
そういう時は、the_date()ではなく、get_the_date()を使用しましょう。
echo get_the_time('Y')."年".get_the_time('m')."月".get_the_time('d')."日";
get_the_timeを使用する場合は、echoやprintをつけるのを忘れずに。
nandani | 2010年07月18日 | コメント(0) | トラックバック(0) | CMS関連 | PHP関連