Archive for web作成メモ

PHPでPDFファイルを作れるTCPDF

PHPを利用してPDFファイルが作れるTCPDFを使ってみました。
他にもFPDFという無料のライブラリがあるそうですが、TCPDFはそれをさらに発展させた無料のライブラリです。
現在のバージョンは、4.0.030 です。特徴は、

  • PHP4とPHP5に対応
  • 日本語が使える(但し、エンコードUTF-8でファイル保存する必要有り)
  • HTMLのタグが使用可能(但し、制限有り、また< br /><img src=”" />のようにタグの終わりの区切りが必要)
  • テーブルタグは使用可能だが文字数が多いとタイムエラーになる。またボーダーの色は指定できないようです)
  • マルチセル関数を使ってタイトル、本文を自由に配置できる
  • イメージ関数を使って、イメージ画像を自由に配置できる
  • 配置の位置決めはミリ単位でできる。(tcpdf_config.phpでpt,mm,cmをいづれか指定できる)
  • ライン関数を使って縦横斜めに線が色と太さと形状を変えて指定できる
  • グラフィック関数もあるので、角丸の長方形をマルチセルにかぶせて体裁を整えることが出来る
  • 文字の大きさ、色はマルチセル単位で変更できる
  • などですが、CSVのようなデータファイルを元に動的にPDFを作成することが可能です。

    日本語での情報は、チーターエンジニア(TCPDFドキュメント)が最新情報に適応しています。

    チータ-エンジニアさんに感謝いたします。

    CGIでセットしたクッキーがPHPで読める?

    CGIで作られた会員用プログラムはクッキーがセットしてあるのですが、そのクッキーを利用してPHPで追加のプログラムを作ってみようかと思いました。

    そこで、クッキーを学んだことのない私には、CGIでセットしたクッキーがPHPで読める?ということがなかなか分からず苦労しました。

    原因は、クッキーが作成されたディレクトリの配下でしか読めないという基本的なことに気づくのが遅れたためです。

    Aというディレクトリで作成されたCGIのクッキー(名前を仮にcokkiename)をPHPのテストプログラムで上位のルートから読み込もうと無駄なことをしていました。Aディレクトリにテスト用のPHPのプログラム「echo $_COKKIE['cokkiename'];」をおいて実行。

    結論は、CGIでセットしたクッキーがPHPで読めました。でももう少し基礎から勉強しておけばすぐ分かったことですね。

    includeとパス <メモとして>

    PHPでプログラムを書く時、includeでファイルを読み込むことは欠かせません。しかし、相対パスで記入していると、あるカレントディレクトリのデータファイルを読み込んで処理するプログラムをそのカレントディレクターに作った場合、それを上位のディレクトリで実行すると、ファイルがありませんというPHPエラーとなります。

    それを解消するには、データファイルをフルパスで読み込む必要があります。しかし、通常、ローカルの環境で試行してサーバーにアップするので、ローカルの場合は、「http://localhost/・・・」、サーバーの場合は「http://www.ドメイン名/・・・」というふうに切り替えなければなりません。

    いちいちローカルで試した後、書き換えてアップしてもいいのですがこういう作業はミスを招きます。

    そこで、PHPでは、実行するファイルの絶対パスを表示してくれる関数がありますのでそれを利用することにします。

    使うのは、dirname()と__FILE__という関数と定数で、dirname(__FILE__)とすれば、現在のファイルの絶対パスが得られます。例えば、aaa.phpというファイルに、print dirname(__FILE__);という行を加えると、”var/HTML/abcdefg.com/web/aaa.phpのように絶対パスが表示されます。この文字のうち、ローカルのディレクトリ名に使っていない文字を抜き出してくる関数を使用します。strstrという関数は指定した部分文字があれば、その文字以降を抜き出しますが、なければFALSEを返します。したがって、if文でFALSEでなければ「http://www.abcdefg.com/ 」を、FALSEなら、「http://localhost/ 」をカレントデレクトリ/データファイルに加えれば

    いいということになります。

    ドメイン名:abcdefg.com
    データファイル名:data.csv
    データファイルのカレントディレクトリ:data
    実行するファイル:ルートディレクトリのtest.php

    と仮定。

    test.phpに以下の記述を加えます。

     
    $urlpath = dirname(__FILE__);
    if(strstr($urlpath,"abcdefg")){
    $root="http://www.abcdefg/";
    }else{
    $root="http://localhost/";
    }
    $Data=file($root.'data/data.csv');
    //略
    ?>

    他にもやり方はありそうですがとりあえず覚えとして。

    Yomi-Search(PHP) modifiedへの移行完了

    岡山WEBネットの検索エンジンがCGI版のYomi-SearchからPHP版に移行しました。

    動作確認にはもう少し時間がかかりそうなので、旧来のCGI版も今のところ残してあります。

    但しCGI版からは新規登録はできません。

    動作の最終確認後、ご登録してくださった方にお知らせしようかと思っております。

     

    Yomi-Search(PHP)modifiedのインストールで得られたもの

    PHPを勉強しているのだから岡山WEBサーチのYomi-SearchもCGI版からPHPに変えようかと思いつき、インストールを試行。
    実は、以前もPHP版に一時的に移行したことがあったのだけれど、バックアップが文字化けとなり断念したことがあったのです。今度は、それから年数もたっていることだし進化したに違いないと思い、テスト的にインストール。
    しかし、不思議なことにインストールしたら英数字以外がすべて??という文字に。データベースの照会順序ががlaten1_swedish_ci になり、yomisearchの管理画面から見ても文字は????のまま。新規登録した文字も英数字以外の日本語は????に変換。おかしいと思いながら、インターネットで検索していると
    XAMPP+Yomi-Search(PHP)modified で 文字化け(PHP+MySQL の文字化け) (masha.webTechLog)というところで
    「データベースとテーブルの文字コード設定が原因 データベースの文字コード(MySQL 接続照会順序)が初期状態「latin1」のままだったことが直接の原因。phpMyAdmin 上で「ALTER DATABASE `DB名` DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci」を実行し文字コードを utf8 へと変更。そして Yomi-Search(PHP)modified を再セットアップすると文字化けは解消した。(以上引用)」
    を発見。
    そして、phpMyAdminを見て見ると、「操作」という画面でテーブルごとに文字の照会順序が変更できることにやっと気がつきました。yomi_categoryのテーブルをlaten1_swedish_ci から utf8_unicode_ci に変更すると既に入っているデータは??のままですが新規に入力したり、データベースに修正でカタカナや漢字ををいれると文字化けも無くなりました。
    私が借りているサーバーの問題と思いますが、自分としては、やっと解決したのでほっとしています。
    つぎにインストールした後でいちいちテーブルごとに照会順序を変えたのでは面倒なので、データベースを作成した時に照会順序をutf8にしたらどうなるかと思い、Yomi-Search用にデータベースを作成し、phpMyAdminでそのデータベース名を確認し、操作ボタンで見ると、照会順序が laten1_swedish_ci になっているので をそれを utf8_unicode_ci 変更。そしてセットアップを実行するとすべてのテーブルがutf8_unicode_ciに。文字化けも無くセットアップ完了しました。

    後は、既存データの移動とバックアップがうまくいけばPHP版に移行しようかと思います。

    岡山WEBブログのバージョンアップに関して

    岡山WEBブログは、wordpressを使用しています。
    これまでのヴァージョンはME2.2でした。
    ME2.2からは、データのバックアップがやりやすくなっています。データはMYSQLというデータベースに保存されるようになっていますが、このMYSQLがなかなか難解です。それは日本語という文字データの受け渡しです。レンタルサーバーの場合はなおさらやっかいです。それは、MYSQLの設定、それを読み出す時に利用するPHPの設定が自由にはいかないことです。このブログをおいてあるレンタルサーバーでは、通常MYSQLのデータを見るためのPHPMyAdminを使います。それを使ってエクスポートすると、文字化けという現象がおきました。それは以前のバージョンの時は、バージョンアップするために記事を、ひとつひとつコピペという手作業で移し変えたりもしていました。その時はデータ数も多くなかったのでそれでも良かったのです。
    2.2MEからは、それが改善され、WORDPRESSの管理画面からデータのバックアップがXML形式でできるようになっています。そのデータは文字化けはしていません。
    しかし、2.2MEでも、PHPmyadminでみると文字化けしています。なぜかデータベース照合手順がlaten1_swedish_ciになっていて英数字以外は文字化けして見えるのです。WEB上のブログでは文字化けはしていませんが、MYSQLをみるためのツールでみると文字化けしてしいたのです。
    そして、今回、2.5.1にバージョンアップした結果、PHPMyAdminでみてみると、照合手順がutf_general_c1となっていて内容もすべて確認できました。文字化けは解消しています。
    感想として、日本語対応がスムーズになって安心して使えます。WORDPRESSの日本語化に携わった方々の努力に感謝したいと思います。

    岡山イベント情報の更新

    岡山イベント情報を更新しました。
    このイベント情報は、岡山県観光物産課の情報を元にしています。以前、岡山県庁に用事があって行ったときに、岡山県のホームページにでているイベント情報を使わせてくださいとお願いしたら、ぜひ使ってくださいという返事を頂きました。
    表形式の岡山イベント情報を、CSV形式のファイルにして、確定情報だけをfeedcreator.class.php
    を使って、RSS2.0に変換し、それを、PEARのUnserializer.phpを使って、HTMLで表示させました。

    feedcreatorは、RSSフィード生成用のライブラリですが、ウノウラボさんの紹介情報などが参考になりました。

    EC-CUBEのインストール

    このサイトを設置しているサーバーに、EC-CUBEをインストールしようと1週間くらいまえから四苦八苦していました。EC-CUBEはPHPで書かれたECオープンソースのショッピングシステムです。
    説明を見ると、「株式会社ロックオンが2000年の創業以来、手がけてきたECサイト構築により培ったノウハウ(モジュール群)をオープンソースとして提供したECサイト構築パッケージです。」ということでインターネットショッピングのホームページを構築するすべてがこのプログラムで無料でできるということです。
    とうことで、インストールにチャレンジしました。
    要件としたら、PHPが4.1以上、MySQL4.1以上などが必須ですが、一応満たしているようなので、早速インストールしてみました。
    しかし、インストールが成功して、管理画面に移りますいうところで、画面が真っ白に。
    この原因が分かるまでに2~3日はかかりました。インストールは成功しているようなのですが、FFFTPでサーバーにアップロードしている以外にインストール作業を通じて作成されているホルダーとファイルが出来ています。その所有者をFFFTPで見てみると、本来の所有者ではない「apache」という名前になっていました。特にSmarty/template_cの中に生成されています。それを一度、ローカルにダウンロードし、サーバーに生成していたファイルとホルダーを削除して、ローカルからアップロードして属性を書き込み可に変え・・というようなことをすると真っ白な画面がログイン画面に。

    つぎに苦労するのは、クレジットシステムの導入です。最初から本体についていればいいのですが、クレジット決済については、後付でモデュールとして取り付けるようになっているようです。おそらくバージョンが変わっていくと、最初からマニュアルで付くようになると思います。
    決済システムは、EC-CUBEの置いてあるロックオンから無料で購入する形をとるので、ECCUBE2.0を設置したURLとメールアドレスが必要です。そしてメールアドレスに届いたKEYを管理画面に入力設定してダウンロードしてインストールします。この作業が管理画面からの自動作業なので、分かりにくい。マニュアルならダウンロードしたファイルをどこにアップロードしてどういう処置をして、設定できるということがわかるのですが。
    このようなエラーがでて設定失敗です。

    /var/www/vhosts/ドメイン名/httpdocs/data/downloads/backup/update_1205473883/
    詳細 バックアップディレクトリの作成に失敗しました

    そこでEC-CUBE開発コミュニティというユーザー交流サイトで同様なエラーを調べると、どうもPHPのSAFTYMODEが原因になっているようでした。
    PHPのSAFTYMODEがONになっているとプログラム書き込みの所有者と本来のプログラムの所有者が異なっていた場合に処理を続行してくれないようになっているようです。
    EC-CUBEは本来の所有者名でないapacheという所有者でファイルができるようなのでそこに原因はあるようです。
    これはもうどうしようもないとあきらめかけていたのですが、safemodeで検索をかけて調べていたら、このサーバーは仮想専用サーバーで、pleskで管理しています。pleskのドメインの管理画面からphPのsafemodeが選べるようになっていることが分かりました。
    そこでsafemodeのチェックを外してトライアルするとZEUSの設置は一応できました。
    とりあえずこれでEC-CUBE2.0のインストールはできた。ということです。疲れました。

    APIで悩みました

    今、アフリエイトサービスにAPIを利用できるところができています。なんとかAPIをPHPを使って利用できるようになってきたので、LINKSHAREのクロスオーバーサーチ(リンクシェア・Webサービス)を申し込み、アクセス許可のトークンをいただきました。
    そして、いつものようにPEARのXML/Unserializer.phpというユーティりティを使ってみたのだけれど文字化けするのです。今まで、アマゾンでも、リクルートのWEBサービスでも利用できたのに・・・。XMLのソースをみると日本語がUNICODEという記号になっています。いままでこんなことはなかったのに、ということで、半日悩みました。
     それで、他にリンクシェアのクロスオーバーサーチを活用しているところがないかと検索したら、「LinkShare Technical 」を見つけました。こちらはPHPのソースも公開しておられるのでダウンロードしてみました。よく出来たプログラムで、私のような初心者には大変勉強になります。PEARのXML/XML_Tree_Ex.phpを利用していましたが、基本は一緒なので、よくみると、URLからXMLを読み込んで出力する時に「UTF-8」というオプションコードを加えていました。
    今まで、PEARのXML/Unserializer.phpでは別に加えなくても支障なく配列に出力してくれていましたが、試しに
    $parser = new XML_Unserializer(array('parseAttributes' => true,'targetEncoding' => 'utf-8'));
    と書いて見ました。結果は文字化け解消です。
    自分の記憶に残るよう、書いておきます。LinkShare Technical さんありがとうございました。

    JSONについて

    無料のAPIサービスを調べていたら、星占いに関するものが見つかった。

    Web ad Fortune 無料API

    というサービスです。
    占いデータを http://api.jugemkey.jp/api/horoscope/free に GET リクエストを送ると、データを JSON フォーマットで取得できるというものです。フリー百科事典『ウィキペディア(Wikipedia)』によると、

    「JSON(ジェイソン、JavaScript Object Notation)は、JavaScriptにおけるオブジェクトの表記法をベースとした軽量なデータ記述言語である。

    JavaScript言語以外でのほとんどの言語において、JSONは単純な処理で書き出しや読み込むことができる。 

    とあるので、今まで、APIをXMLで受け取っていたのと同様に利用できるようでした。では、PHP4で利用できる、JSONを処理するためのツールがあるのではと思い、検索したところ「Jsphon」というPHPで書かれたJSONライブラリが見つかりました。日本語との相性もいいようなので、早速、PEARコマンドでインストール。デコード処理を、試したところ、きちんと配列で返してくれました。ここまでくれば、後は、配列をHTMLに配置するだけです。「Jsphon」の作者の方に感謝します。とりあえず、今日の星占い1に載せてみました。

    « Previous entries Project-Id-Version: WordPress 2.5 ja 1.0 Report-Msgid-Bugs-To: wp-polyglots@lists.automattic.com POT-Creation-Date: 2008-04-25 15:51+0000 PO-Revision-Date: 2008-04-26 21:17+0900 Last-Translator: tai Language-Team: wp-ja MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Poedit-Language: Japanese X-Poedit-Country: JAPAN Plural-Forms: nplurals=1; plural=0; X-Poedit-SourceCharset: utf-8 X-Poedit-KeywordsList: __;_e;__ngettext:1,2;_c X-Poedit-Basepath: /Applications/MAMP/htdocs X-Poedit-SearchPath-0: wp-trunk Project-Id-Version: WordPress 2.5 ja 1.0 Report-Msgid-Bugs-To: wp-polyglots@lists.automattic.com POT-Creation-Date: 2008-04-25 15:51+0000 PO-Revision-Date: 2008-04-26 21:17+0900 Last-Translator: tai Language-Team: wp-ja MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Poedit-Language: Japanese X-Poedit-Country: JAPAN Plural-Forms: nplurals=1; plural=0; X-Poedit-SourceCharset: utf-8 X-Poedit-KeywordsList: __;_e;__ngettext:1,2;_c X-Poedit-Basepath: /Applications/MAMP/htdocs X-Poedit-SearchPath-0: wp-trunk