3流プログラマのメモ書き

元開発職→社内SE→派遣で営業支援の三流プログラマのIT技術メモ書き。 このメモが忘れっぽい自分とググってきた技術者の役に立ってくれれば幸いです。(jehupc.exblog.jpから移転中)

PHP開発

(PHP)require,includeで相対パスのファイルを指定する場合

今更な話ですが、require , require_once , include , include_once で別ファイルを読み込む時に相対パスを使う時の注意点です。 PHPには、実行したファイルのあるディレクトリがカレントディレクトリになるというルールがあるようです。また、ファイルイン…

(PHP,IE)インラインフレームで別ドメインのPHP読み込むとセッションが効かない

インラインフレームを使ったWEBサイトを作っています。 このサイトは www.hoge.jp とします。 フレーム内のコンテンツは、www.piyo.com の PHP ファイルです。 この時、フレーム内のPHPでセッション管理しようとしてもできません。 www.piyo.com/login_input…

(PHP)mb_send_mailでCCを指定したい

mb_send_mail関数でメールを送る方法を(PHP)日本語メール送信で書きましたが、CCやBCCを指定したい時は、第四引数のヘッダ指定部分に以下のように指定してやればいいようです。 //mb系関数を使うための前処理 mb_language("Japanese"); /* 内部文字エンコー…

(PHP)Smartyを使っているがShift-JISで出力したい

Shift-JISで作られているCGIのサイトをPHP(テンプレートエンジンとしてSmarty使用)に移行してるんですが、やはり移行後もわけあってShift-JISでないとダメなようです。 で、SmartyのテンプレートファイルをShift-JISで作るとエラーが。。。 どうやら「必須」…

PukiWikiのページをGUIで編集できるようにするguieditプラグイン

PukiWikiで情報共有サイトを作っても、エンドユーザには独特のWiki記法がネックになってしまうケースが多々あります。 ということで、WYSIWYG でページを編集できるものがないか探したところ、guieditというプラグインがありました。 (こちらのデモサイトで…

(PHP)MVCモデルを使ったPHPアプリケーション(リクエスト部分)

(PHP)MVCモデルを使ったPHPアプリケーションのリクエスト部分のソースです。 GET,POSTで送られてくるリクエストをオブジェクトとして扱えるようクラス化します。 参考先まるままですが、こんな感じ。 Request.php コントローラからはこのクラスを呼び出し、…

(Ajax,PHP)Ajaxを使って入力フォームに戻ったときに値を再セットする

(PHP)セッションを使ってて入力フォームページに戻ると入力内容がクリアされるや(PHP)Smarty利用時に入力チェックエラー時に入力画面に戻し入力データを再表示する方法と関係のある話になります。 今回、(PHP,Ajax)SmartyでAjaxを使用するで書いたように、ペ…

(PHP,Ajax)SmartyでAjaxを使用する

Smartyを利用しながらページ遷移をAjaxでシームレスに行ってみることにしました。 参考にしたのはAjax と Smarty: 第 1 回 Smarty を使って Ajax アプリケーションを開発するです。 若干ややこしかったので、自分なりに簡易にしてみました。 具体例として、…

(HTTP,PHP)httpsからhttpへのリファラは送信されない!?

PHPで Referer を取得しようとするんですが、https のサイトからリンクすると、"Notice: Undefined index: HTTP_REFERER "エラーになってしまいます。 で、調べた結果 https から http へアクセスした場合、Referer は送信されないんですね。 知りませんでし…

(PHP)Qdmailを使い添付ファイル付きメールを送る

(cakePHP)Qdmailを使った日本語メール送信 で cakePHP から Qdmail を使う方法を書きました。 今回はフレームワークを使わない環境で、添付ファイル付きのメールを送る場合の例です。 こんな感じでOKなようです。 require_once('qdmail.php'); //メール送信 …

(PHP)画像のリサイズ、回転を行う

PHPで画像のリサイズ、回転を行いたいわけですが、GDライブラリを使うと簡単にできます。 アップロードされた画像をファイルをリサイズする場合、下記のような感じです。 $imginfo = getimagesize( $_FILES['image']['tmp_name'] ); if ( $imginfo[2] == IMA…

(PHP)AjaxUploadで画像が表示されない原因は、、、BOMだった..

(PHP,HTML)AjaxUpload 画像選択時にアップロードしサムネイルを表示を実装していたんですが、なぜかサムネイルが表示されない現象が発生しました。 Ajaxで返すPHP側を絶対パスで返すようにIE8で画像のプロパティを表示すると、 http://hoge.local/http://hog…

(PHP,HTML)AjaxUpload 画像選択時にアップロードしサムネイルを表示

HTML5になるとローカルファイルをブラウザにドラッグしてアップロードできるで書いたように、HTML5対応でないブラウザを考慮すると、従来通りファイル選択ダイアログから画像を選ばしてアップロードするというアプローチになります。 しかし、通常はアップロ…

Smartyのincludeの話

Smartyを使っててテンプレート側の共通部分を上手くまとめられないかと思いました。 例えば下記のようなテンプレートファイルがあるとします。 ●hoge1.tpl http-equiv="content-type" content="text/html; charset=utf-8"> {$title} action="./check.php" me…

(PHP)include_pathを本番環境、開発環境で切り替える

PHPで共通に使う外部ファイルを読み込ませたい時、絶対パス指定で require_once をする時が多いと思います。 (ディレクトリ階層が異なる場合や、インクルード先からさらに別ファイルをインクルードしている場合には絶対パスの方が無用なトラブルを避けれるの…

(PHP)セッション削除の話

(PHP)セッションと認証の仕掛けで、ログイン部分のセッション管理を書きました。 これは主にセッション開始部分の話ですが、今回はログアウト時によるセッション終了の話です。 一般ユーザは自分でログアウト処理を行わない可能性もあるので、タイムアウトの…

(PHP)Smartyで1次元目が連想配列をループするには{foreach}を使う

PHP側で当初下記のように2次元配列を作成していました。 array_pushを使って連想配列を、親の配列に追加しています。 $aryInput = array(); array_push($aryInput , array( "item"=>"hoge1" , "value"=> "aaa" )); array_push($aryInput , array( "item"=>"h…

(PHP)セッションを使ってて入力フォームページに戻ると入力内容がクリアされる

PHPでセッションを使って入力フォームページから、入力内容確認ページに飛ばしているのですが、入力内容確認ページで戻るボタンを押下すると、入力した内容が消えています。 セッションを使わないと入力フォームページに戻っても、入力内容は消えません。 確…

PHPで携帯電話でもセッションが使えるようにする

(CakePHP)携帯電話でもセッションを使えるようにするでも書いたように、携帯電話向の場合、セッションIDの扱いに気を使う必要があります。 (まぁドコモがcookie使えないのが諸悪の根源なんですが。。。) 【PHPで作る】初めての携帯サイト構築:第5回 携帯サ…

(PHP)数値を0埋めで表示したい

sprintf 関数で書式指定すればできるようです。 例えば 1 を 001 とするには、下記のようにします。 基本的にはCのsprintf関数と同じような感じですね。 $num = 1; echo sprintf("%03d" , $num ); 参考: なぁばすぶれぃくだぅん:[php]数字の0埋め

(PHP)PDO使用時はPDOStatementをした方がよい

PDOを使って、選択クエリ発効後、挿入クエリをするスクリプトを書いています。 選択クエリは、fetch メソッドで先頭行のみ取得しており、挿入クエリでは、トランザクションを使っています。 しかし、挿入クエリの、beginTransaction() で下記のようなエラー…

(PHP)曜日を取得する

年月日それぞれの値を渡して、日本語の曜日を取得する方法です。 date関数で、第一引数に、w を指定すると 。0 (日曜)から 6 (土曜) というように、曜日を数値で返してくれます。 PHPでは日時は mktime 関数を使うと生成できるようなので、これで生成した値…

(PHP)Smarty利用時に入力チェックエラー時に入力画面に戻し入力データを再表示する方法

フォームの入力でチェックをした後どうするかについて、 エラー画面に遷移しエラー表示→入力画面に戻す(戻るボタンで戻ってもらう) という方法と、 入力画面に戻しエラー表示 という2パターンがあると思います。 (まぁAjax使ってたりすると、JavaScript内で…

(PHP)フォームからPOSTで受け取ったデータが文字化けする

レンタルサーバでPHPの内部エンコーディング(mb_internal_encoding)が、作成しているPHPのエンコーディングと異なっていると文字化けになってしまいます。 特に厄介なのが、フォームのデータをPOSTで受け取るときです。 今回レンタルサーバ側のPHPは EUC-JP …

(PHP)Smartyでサイニタイズ(サニタイジング)する

WEBアプリケーションでは、XSSとSQLインジェクション対策等のセキュリティリスクを軽減するためにサイニタイズが必須です。 (PHPでの一般的なサニタイズ方法は、(PHP)XSSとSQLインジェクション対策を参照) さて、テンプレートエンジンに Smarty を使ってて、…

(PHP)Smartyで配列の中に要素があるかや配列かどうか、変数が存在するか調べる

Smartyのテンプレート内で、配列の中に指定した値があるかどうかや、そもそも配列かどうか、そして該当の変数が存在するかどうかを判定する方法です。 テンプレート内に下記のようにすることで判定できます。 {* 変数が存在するかどうか *} {if isset($value…

(PHP)Smartyで改行文字を\nを<br>タグに置換する

Smartyで、改行コードを含む文字列を表示するときに、改行コード(\n)をHTMLの改行タグ()に置換する方法です。 下記のようなSmartyの書式で、それが可能なようです。 {$変数名|nl2br} 使用例です。 ○PHP側 //Smarty読み込み(ドキュメントルート外のSmartyクラ…

(PHP)フォームのチェックボックスの値を受け取りたいとき

HTMLのFORMで、チェックボックスを用い複数選択した値をPHP側で受け取る方法です。 input タグで、name の末尾に [] を付けると、配列で受け取れるようです。 こんな感じです。 ○HTML側 method="post" action="test.php"> type="checkbox" name="person[]" v…

(PHP)HTMLのFORMでSubmitボタンを複数配置したい場合

今回、HTMLでForm内に複数のSubmitボタンを配置して、ボタン毎に処理を分けたいと思ってます。 その場合、ボタンの name 属性に値を設定し、PHP側で $_POST['name属性の値'] があるかどうかを判定することで、どのボタンが押されたか判定できるようです。 下…

(PHP)PDOでforeachを使ってbindParamでパラメータを設定してた時の注意点

PDO経由でSQliteを使おうと思ってます。 Insert文で使う予定なんですが、汎用性を出すために、列名、値それぞれを配列に格納し、名前無ププレースホルダのSQLを生成して、それにbindParamメソッドでパラメータをセットしていきます。 それで当初下記のように…