PHPでリンク先が存在するかどうかを調べるのは非常に簡単です。
<?php
$url = "http://www.yahoo.co.jp";
if($fp = fopen($url, "r")){
while ($tmp = fgets($fp)) {
print $tmp;
}
}else{
print "リンク切れです";
}
?>
これを応用すれば別のサーバのデータを取得できたりもするので便利ですね。
PHPでリンク先が存在するかどうかを調べるのは非常に簡単です。
<?php
$url = "http://www.yahoo.co.jp";
if($fp = fopen($url, "r")){
while ($tmp = fgets($fp)) {
print $tmp;
}
}else{
print "リンク切れです";
}
?>
これを応用すれば別のサーバのデータを取得できたりもするので便利ですね。
<?php
$path = dirname(__FILE__);
print $path;
?>
OpenPNEを携帯で見るとURLはリンクされないままURLが表示されてしまいます。これはPC用サイトの場合携帯では見れないことが多いから仕方なくリンクできないようにしているのではないでしょうか。
そこでGoogleのモバイル用最適化(コンバータ?)を使って携帯からも見れるようにしてみました。
/webapp/lib/smarty_plugins/modifier.t_url2a_ktai.php の30行目あたりの
if (!$openpne_url) {
return $raw_url;
}
を if (!$openpne_url) {
return sprintf('<a href="%sjump.php?u=%s">%s</a>', OPENPNE_URL, urlencode($raw_url), $raw_url);
}
に入れ替えてください。
次にジャンプ用ページを作成します。(リファラ等セキュリティ強化のため)
public_html の直下(つまりindex.phpと同じディレクトリです)にこのファイル(jump.php)を解凍して置いてください。
一応jump.phpのソースです。これをコピペしても結構です。(必ずSJISで保存すること)
これで設定完了です。
これは結構使える機能だと思います。
もし使ったかたはご一報いただけると嬉しいです。
mb_internal_encoding("UTF-8");
実はこんなことで1時間もハマってしまいました(TT)
InkTypeはPHPで作られたCMSです。すでに日本語化もされています。
興味をもったきっかけはフレームワークにCodeIgniterを使っていることがきっかけです。
インストール方法です。
①公式サイトからファイルをダウンロード
http://www.inktype.org/
②解凍する
③データベースの作成
MySQLでデータベースを作成(データベース名は任意。僕は「inktype」にしました)
④PhpMyAdminなどを使って解答されたフォルダの直下にあるinktype_uranus_1_install.sqlを使ってテーブル等を作成する
⑤/system/application/config/config.phpをテキストエディタで開く
14行目あたりの
$config['base_url'] = "";に絶対URLを入れる(必ずhttp://から入れてください。例: http://hogehoge.jp/inktype/)
69行目あたりの
$config['language'] = "english";を
$config['language'] = "japanese";に変更(日本語化されます)
⑥/system/application/config/database.phpをテキストエディタで開く
40行目あたりの
$db['default']['hostname'] = "";
$db['default']['username'] = "";
$db['default']['password'] = "";
$db['default']['database'] = "";
$db['default']['dbdriver'] = "mysql";
にデータベース情報を追加
例
$db['default']['hostname'] = "localhost";
$db['default']['username'] = "user";
$db['default']['password'] = "pass";
$db['default']['database'] = "inktype";
$db['default']['dbdriver'] = "mysql";
⑦/system/application/viewes/templates/default/header.phpをテキストエディタで開く
7行目あたりの
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />を
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />に変更
⑧ファイルをFTPなどでアップロード
アップロードしたフォルダ名をinktypeと仮定します。
⑨ブラウザでアクセスしてみる
例 http://hogehoge.jp/inktype/
とりあえずページが見ることができるようになります。
⑩管理画面にアクセス
例 http://hogehoge.jp/inktype/index.php/admin/admin/
最初はメールアドレスとパスワードを入力してユーザー登録して管理画面に入ります。
⑪あとは記事を書いたりして色々ためしてみよう!!
最近知ったPHPフレームワークのCodeIgniterですが、これが非常に使いやすい。
簡単で最低限必要な機能は揃っています。
Symphonyもいいけど手ごろさでいえばやっぱりCodeigniterかも。
特にレンタルサーバーでコマンドライン操作ができない時には非常に便利です。
ぜひ使ってみてください。
私はオープンソースを眺めるのが好きです。なんといっても実力者のソースを見ることで自分のスキルもアップすることができるからです。
例えばOpenPNE非常に巨大なシステムですが、よく整頓されておりソースを理解することで自然とPHPのスキルを高めることができます。
ではPHPで学べるスキルをあげてみます。
・クラスの基礎知識(オーバーライドなど)
・デザインパターン(特にシングルトン、テンプレート、ファクトリー、アダプターなど)
・フレームワークの効果(便利さ)
・セキュリティ対策
・Pear
など挙げるときりがありません。
例えばPerlだったらMovableTypeを眺めてみるとかもいいでしょうね。
OpenPNEのセッション情報はデフォルトでは公開フォルダ内のみで有効です(当然ですね)
でも上位のディレクトリとかでもこのセッション情報を利用したいことってありますよね。例えばヤフーのトップページみたいに通常サイトの右側にログイン情報(○通のメッセージがあります~とかね)の枠とかを作るとか。
こういうときは以下を変更すれば可能です。
/webapp/init.inc の105行目あたり
ini_set('session.cookie_path', $url['path']);ini_set('session.cookie_path', "/"');次に/webapp/init.inc の
//144行目あたりの
setcookie(session_name(), session_id(), $expire, $this->cookie_path);//182行目あたりの
setcookie(session_name(), session_id(), $expire, $this->cookie_path);
を
//144行目あたり
setcookie(session_name(), session_id(), $expire, "/");//182行目あたり
setcookie(session_name(), session_id(), $expire, "/");
に変更すればサイト全体でセッション情報を活用できるようになります。
しかし!!
この場合はクッキーの有効範囲がサイト全体で有効になるため、そのサイト内で別にクッキーを使っている場合は競合する恐れがあります。もしも同じサイト内でOpenPNEを2つ以上構築している場合でもセッション情報が失われてログイン画面に戻ってしまいます。
セッションとクッキーの知識を装備して、うまく使い分けてください。
1日前などを算出する関数です。さすがPHPです。便利な関数ありますねえ。Perlだとこれよりちょっとだけ複雑な作業がいるんですよ。
print date("Ymd",strtotime("-1 day")); //1日前
print date("Ymd",strtotime("-1 week")); //1週間前
print date("Ymd",strtotime("-1 month")); //1月前
print date("Ymd",strtotime("-1 year")); //1年前
//
print date("Ymd",strtotime("1 day")); //1日後
print date("Ymd",strtotime("1 week")); //1週間後
print date("Ymd",strtotime("1 month")); //1月後
print date("Ymd",strtotime("1 year")); //1年後
結構便利です。
これをPerlで実現してみると
$days = 1; //○日前を指定
($sec, $min, $hour, $day, $month, $year, $wdy, $yday, $isdst)
= localtime(time-24*60*60*$days);
$year += 1900;
$month++;
print sprintf("%04d%02d%02d",$year,$month,$day);
って感じでしょうか。もっと簡単な方法あると思いますが・・・。