特にPHPファイルをいじることもなくテンプレートの記述だけでいけた。 例として$menu['sub']に7つ配列データが入っているとすると、下記のように記述することで()内に7と表示される。 {{foreach from=$menu item=menu}} {{assign var=”subCount” value=$menu.sub|@count}} {{$menu.title}}({{$subCount}}) {{/foreach}}
下記のようなエラーが起こった。 特に動作には問題なかったが、気になるので調べたところセッションの使い方が悪いとこうなるらしい。 もしくはセッションの設定がOFFの状態でセッションを使おうとすると出るみたい。 Warning: Unknown(): Your script possibly relies on a session side-effect which existed until PHP 4.2.3. Please be advised that the session extension does not consider global variables as a source of data, unless register_globals is enabled. You can disable this functionality and this warning by setting session.bug_compat_42 or session.bug_compat_warn to off, respectively. [...]
■機種依存文字の例 「①」「㈱」「Ⅱ」「㌔」「℡」 文字コードをUTF-8へ変換しようとすると、「?」(クエスチョンマーク)に化けてしまう。 これを回避するには一度sjis-winからUTF-8に変換するとよいみたい。 たとえばEUC-JP⇒SJIS-win⇒UTF-8のような感じ。 ホント文字コードってめんどいね。
空メールでの自動入会プログラムを作っていて、Softbankのみ文字化けを起こした。 軽く調べた結果、Softbankは文字コードをJISにしないとだめらしい。 ということで下記のように送信手前でエンコードをJISに変換したら直った。 $headers = array(); $headers['From'] = $new_from; $headers['To'] = $recipients; $headers['Subject'] = $subject; $headers['Sender'] = $new_from; // 文字コード指定(JISに変換) mb_convert_variables( “JIS”, “auto”, $headers ); $body = mb_convert_encoding($body, “JIS”, “auto”); $mail = Mail::factory(‘sendmail’); $result = $mail->send($recipients, $headers, $body);
PHP×携帯サイトデベロッパーズバイブルを読んで、空メール送信をテストしてみたが、結構悩んだ部分が多かったのでメモ。 尚、テストはカゴヤサーバにて行なった。 稼働率99.999% レンタルサーバー顧客満足度No1 ■空メールを受け取るメールアドレスを準備する。 1. 新しいメールアカウントを作成 例)アカウント名.regist 2. アカウント名@収容サーバー名 に自動転送するように設定。転送後はメールサーバにメールを残さないように設定する。メールを残す設定にしてしまうと、メールBOXがいっぱいになった時に転送自体が停止されてしまい、送信者にエラーが届くことになる。 ※収容サーバー名はコントロールパネルから、システム > Webサイトを開き、基本情報に記載されている。 アカウント名はコントロールパネルにログインする時のアカウント名そのもの。 3. アカウント名.regist@kagoya.netへメールを送信して、まずはきちんとメールが届いているかテストする。 ■.forwardファイルを作成する。 1. 「.forward」と名前をつけたファイルを作成する。 2. 「”|IFS=’ ‘ && exec /usr/bin/procmail -f- || exit 75″」と記述して保存。 これで届いたメールを.procmailrcファイルへ渡せるようになる。 3. ルートディレクトリ直下(public_htmlフォルダと同階層)にPUTする。 ■.procmailrcファイルを作成する。 1. 「.procmailrc」と名前をつけたファイルを作成する。 2. 下記を記述して保存。 SHELL=/usr/bin/sh PATH=/usr/bin:/usr/local/bin:$home/bin MAILDIR=$home/Maildir/ VERBOSE=YES LOGFILE=$MAILDIR/procmail`date +%Y-%m`.log :0 * ^To:.*アカウント名.regist@kagoya.net | /home/アカウント名/public_html/mailtest/empty_mail.php 3. ルートディレクトリ直下(public_htmlフォルダと同階層)にPUTする。 [注意] .forwordや.procmailrcなどのサーバーに置く設定ファイルは改行コードにLFを使う。CRLFを使うと動作しない場合がある。 HIDEMARUのように改行コードを指定して保存できるようなテキストエディタで作成するのがよい。 これでempty_mail.phpにメールを渡す準備が完了。 ■PEARライブラリのインストール 必要なのは下記2点。 1. PEAR::Mailライブラリ 2. PEAR::Mail_mimeライブラリ ※PEARライブラリのインストールは省略。もちろんサーバにインストール済みであればそれを利用すればよし。 ■empty_mail.phpの作成 1. 下記を記述して保存。 PHP×携帯サイトデベロッパーズバイブルに記載されているempty_mail.phpを保存して/home/アカウント名/public_html/mail/へアップロード。 [注意] 1. 「#!/usr/local/bin/php」を先頭に記述して保存しないと動作しなかった。サーバによっては「#!/usr/bin/php」となる場合もあり。 2. PEARライブラリをインクルードする際は、フルパスで記述しないと動作しなかった。これは自身で.htaccessによるPEARインクルードパスを設定していたからだと思う。 [...]
■Cronの指定方法 分 時 日 月 週 PHPの実行パス スクリプトのパス ・実行例1(5分毎にsend.phpを実行) */5 * * * * /usr/local/bin/php /home/ユーザID/public_html/merumaga/send.php ・実行例2(毎週日曜日の10:00にsend.phpを実行) 0 10 * * * 0 /usr/local/bin/php /home/ユーザID/public_html/merumaga/send.php 通常のPHPパス /usr/local/bin/php または /usr/bin/php 上記でエラーが発生する場合はPHP5で実行する /usr/local/bin/php5
現在のファイル名を取得する場合 basename($_SERVER['SCRIPT_NAME']); 現在のファイル名(拡張子除く)を取得する場合 //拡張子が.phpの場合 basename($_SERVER['SCRIPT_NAME'],”.php”);
htaccessで文字エンコード指定が出来ない場合、PHPで設定する方法 ——————————————- //内部文字エンコーディング設定 /* PHPファイル自体のエンコード */ define(INTERNAL_ENC ,”UTF-8″); /* 出力時のエンコード */ //define(OUTPUT_ENC ,”UTF-8″); //define(OUTPUT_ENC ,”EUC-JP”); define(OUTPUT_ENC ,”Shift_JIS”); mb_http_output(OUTPUT_ENC); ob_start(“mb_output_handler”); mb_internal_encoding(INTERNAL_ENC); mb_http_output(OUTPUT_ENC); ——————————————-
現在ほとんどの場合、携帯サイトはShift_JISでサイトを作りますが、場合によっては文字化けで苦労させられます。 下記のようにob_start();でまとめて変換すると以外と楽に解消できたりすることもあります。 header(‘Content-Type: text/html; charset=Shift_JIS’); ob_start(); ?> ここにShift-JISで出力したい内容をUTF-8で記述。 $output = ob_get_contents(); ob_end_clean(); echo mb_convert_encoding($output, “SJIS”, “UTF-8″); ?>
