トランスビット
トランスビットの開発ノート Webサイト制作に役立つTipsやトラブルシューティングなどの備忘録 - php -

見出しタグと同じテキストをtitleタグに設定

ちょっとだけ題名を変えて、前回結論が出たやつを書いてみました。
やりたいことは↓です。

  1. headerやfooterはincludeして使いまわすため、header内のtitleタグを各ページに合わせて変化させたい。
  2. urlに対応するページタイトルを設定しておき、titleタグに書き加える。
function get_pagetitle(){

// 現在のurlを取得
$url = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
$domain = 'http://●●●●●/';
$pagetitle; // 入れ物

// 配列に、urlとページタイトルを入れておく
$pages = array (
  array ( 'href' => $domain.'cat.php', 'text' => '猫派' ),
  array ( 'href' => $domain.'dog.php', 'text' => '犬派' ),
  array ( 'href' => $domain.'bird.php', 'text' => '鳥派' )
);

// 配列の中で、現在のurlと対応するものを判別、その後、textを取得。
foreach($pages as $page){
  if($page['href'] == $url){
    $pagetitle = $page['text'];
  }
}
return $pagetitle;
}

これで、ページタイトルをゲットできるようになりました。
せっかくの配列なので、引数を設定したらfooter用のナビゲーションを書き出せるようにしてもいいかもです。

Filed under: ,

見出しタグ内のテキストをtitleタグに設定

やりたいことは至って単純なんです。

  1. headerやfooterはincludeして使いまわすため、header内のtitleタグを各ページに合わせて変化させたい。
  2. 各ページには、見出しタグh2でページタイトルがついている。
  3. だから、それを取ってきてtitleタグに自動で書き加えたら楽な気がする!

jQueryなら簡単なんですが、titleをDOMで出すのは流石に良心が痛むので(SEO的に)、phpでやることにしてググってみました。

↓↓ 辿り着いたありがたいサイトを参考にしてみました。
PHPでWEBページのタイトルを抜き出すサンプル

function get_pagetitle(){
$url = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']; //当該ページ
$html = file_get_contents($url); //HTML取得
// ↓マルチバイトencode。今回はもとからutf-8なので不要。
// $html = mb_convert_encoding($html, mb_internal_encoding(), "auto" ); 
if ( preg_match( "/<h2 class=\"page_title\">(.*?)<\/h2>/i", $html, $matches) ) {
    $pagetitle = $matches[1]; //h2を丸ごと取得
} else {
    return false;
}

return strip_tags($pagetitle); //タグを除いて、中身だけ返す
}

できたー!
できた……が、file_get_contentsを使わずに、現在のページを舐めることはできないの!?
そして、わかっていたけどpreg_matchの重さは異常!!
たった一つのタグを探し出すための仕掛けなのに……(TT

結論:ファイル名とタイトルの連想配列を作っといて、foreachするのが一番良いと思います。

Filed under: ,

JSON形式のデータを用意してPHPで配列処理

すっかり春めいてまいりました。我が家の庭では、去年植えた枝垂れ桃が無事開花。
今日、郵便受けに入ってたフリーペーパーの星占い(よく当たる気がする)では、私の運勢も開花していました。

『学問の世界に誘われ、語学習得すると吉』

ええ、ちょうどJSONとPHPにイザナわれるところでしたから……orz

ということで、いつもメールフォームで郵便番号から住所入力したりするのにお世話になっているJSON。
↓food.json。こんな感じの構造です。

[
  {"food":"肉","name":"牛","kana":"ウシ","like":"2"},
  {"food":"肉","name":"鳥","kana":"トリ","like":"5"},
  {"food":"乳製品","name":"チーズ","kana":"チーズ","like":"5"},
  {"food":"乳製品","name":"ヨーグルト","kana":"ヨーグルト","like":"4"},
  {"food":"野菜","name":"ほうれん草","kana":"ホウレンソウ","like":"3"}
]

今回はデータがExcelで用意されていたので、ソートを済ませてからマクロ使ってJSONに落としました。
上記の例だと、第一キーがfoodで、第二キーがkanaですね。
私はstabuckyさんのマクロを使わせてもらいましたが、ググッたら結構出てくるのでお好きなのを。
ExcelのテーブルをJSON形式に変換するマクロ | You Look Too Cool

出来上がったJSONがUTF-8無印で保存されているか確認してサーバにアップします。
ちなみに私はBOM付いててハマりました。元がExcelなんだから当然チェックすべきポイントですな……反省。

次はPHPでJSONを配列として扱うために、json_decode()を使います。

$url = "json/food.json";
$json = file_get_contents($url);
$food = json_decode($json,true);

echo var_dump($food); //NULLならBOM付いてるかも

ちゃんとdumpできてたら、あとはお好きなように~です!

Filed under: ,

PHPでリンククリックしてファイルをダウンロード

今日、きゅうりを一本収穫しました。つやつやです。
「あ、今日できてる!」とか「明後日には食べれるかな~」とか言ってる今が一番楽しいです。
ちなみに去年は1苗から200本近く採れてしまい、配布や消費に勤しみました。まさにきゅうり地獄。
トランスビットの外の人は、「きゅうりの食べ過ぎで体が緑色になった気がする」とか言っていましたが……おかしいな。
補色の関係にあるトマトもたくさん食べたのに。

ということで、今日はブラウザでの収穫作業の話です。

画像に貼ったリンクをクリックすると、通常ブラウザで画像が開いてしまいます。
開かずにダウンロードさせるので思いつく方法といえば、右クリックメニューから「名前をつけてリンク先を保存」とかかな。
リンククリックで直接ダウンロードさせたい場合、PHPで画像をDLさせることができます。
download.phpを下記のような内容で作っておき、ダウンロードさせたいリンクにdownload.phpを指定&URLクエリストリングで画像ファイル名とかを渡してやれば、再利用可能でラブリーというわけです。

//ファイルのパス
$fpath = $_GET["ps"];
$fpath = $fpath.'.jpg';

//ファイル名
$fname = $_GET["fn"];
$fname = $fname.'.jpg';

//IE空DL対策
$data = file_get_contents($fpath) or die('ERROR:cannot get');

//いらんかも
mb_output_handler($fpath);// 文字化け対策
mb_output_handler($fname);// 文字化け対策

header('Cache-Control: public');
header('Pragma: public');
header('Content-Type:application/octet-stream');
header('Content-Disposition: attachment; filename="'. rawurlencode($fname) .'"');// 文字化け対策
header('Content-Length: '. strlen($data));// IE空DL対策。

ob_end_clean(); // これがないとファイルが破損して悲しいことになる
readfile($fpath);

今回は、WordpressでLitebox的なプラグインを使っていたので、URLに[.jpg]が入っていると問答無用で別ウインドウが開いてしまうため、拡張子を削ったファイルのパスをURLに渡しました。ついでにファイル名用の文字列(日本語・文字化け注意)も渡してます。それがpsとfnですね。拡張子は必要だから後で両方に付け足し。

いやー……久しぶりにIEに滅多打ちにされました。一時はどうなることかと。
参考にしたサイトはこちら。いつもながら、えらい人たちに助けられてます。
PHPのファイルダウンロードでファイル破損を防ぐ方法!
PHPでダウンロードしたファイルが0kbになってしまいます

Filed under:

PHPで値に「日本語」を含むか調べる(正規表現)

前回似たような記事を書いたとき、もしかしているかもなーと思いながらスルーしていたツケが……。

if(preg_match( "/[一-龠]+|[ぁ-ん]+|[ァ-ヴー]+|[a-zA-Z0-9]+/u", $str) ){
  // 「日本語」を含む時の処理
}else{
  // 「日本語」を含まない時の処理
}

Filed under: ,