タグ

tipsとPHPに関するkathewのブックマーク (413)

  • CakePHP で docomo と au の RFC 非準拠メールアドレスを例外的に許可する email バリデーション

    CakePHP で docomo と au の RFC 非準拠メールアドレスを例外的に許可する email バリデーション 2011年11月28日 10:59CakePHP CakePHP の組み込みバリデーションルール email は メールアドレスの書式をチェックしてくれて便利なんだけど 特に携帯のキャリアメールに関して困ることがある。 かつて docomo と au で RFC 違反というか非準拠のアドレスが登録可能だった。 具体的に言うと .(ドット)が連続するものと @ の直前に . があるもの。 今はもうこれらは登録できないはずだけど 以前に作られたアドレスはまだ生きていて 実際に使っている人もたくさんいる。 使われてはいるけれども メールアドレスの仕様には沿っていないので これを入力すると email のバリデーションで弾かれてしまいますね。 yabmin に登録しようとした

  • Controller を TDD で開発する流れです。CakePHP 2.2.5 を使いました。

    ApisController.php ��Q7�U ��g6�U <?php App::uses('AppController', 'Controller'); class ApisController extends AppController { // どの Model も使わないようにする。 public $uses = false; public function index() { $data = array(); foreach ($_POST as $key => $value) { $data[$key] = $value + 1; } $this->set($data); } } ApisControllerTest.php `�J7�U ���6�U <?php App::uses('ApisController', 'Controller'); /** * ApisC

    Controller を TDD で開発する流れです。CakePHP 2.2.5 を使いました。
  • 【CakePHP】ファイルダウンロード - Qiita

    ファイルを作成してダウンロードする方法と、ファイルを作成せずにダウンロードする方法がある。 「ファイル作成してダウンロード」は、既に用意されているファイルをダウンロードする場合や、PDFやエクセルなどを一旦編集してダウンロードする場合に適していると思う。 「ファイルを作成せずにダウンロード」は、CSVなどテキスト系のファイルのダウンロードに適していると思う。 ※CakePHPのバージョン2.3以降 ファイルを作成してダウンロード $this->autoRender = false; $this->response->file( //ファイルパス APP.'webroot/files/foo.csv', [ //ダウンロードしたときのファイル名。省略すれば元のファイル名。 'name'=>'bar.csv', //これは必須 'download'=>true, ] ); //レイアウトを使用

    【CakePHP】ファイルダウンロード - Qiita
  • テキストから自動的にリンクを付与「autoLink」と除去「stripLinks」

    Textヘルパーには、テキスト処理に関する便利な機能があります。ユーザによる投稿などを表示する際に、URLが貼り付けられている場合に自動的にリンクを付けてくれるautoLinkや、逆に、リンクが貼られている場合にそれを除去してくれるstripLinksがあります。デモ 対象のテキスト内からURLもしくはメールアドレスを抽出してリンクを付与します。 URLのプロトコルは、https, http, ftp, nntpが対象。 自動的にエスケープされる。エスケープさせない場合は、オプションに'escape' => falseを指定。 メールアドレスのみを対象とする場合は、autoLinkEmailsを。URLのみの場合は、autoLinkUrlsを使用して下さい。 <?php $my_text = 'Contact Form http://kwski.net/contact/'; echo $t

    テキストから自動的にリンクを付与「autoLink」と除去「stripLinks」
  • 画像加工の例とその考え方

    気に入っているの写真を加工してみたので、 ソースコードを置いておきます。 そのソースコードが具体的に何をしているのかということを推測してみたので、 それも書いておきます。 画像加工やPHP言語はまるで専門ではないので、 信憑性はあまりありませんが、 基的な考え方や方向性は外していないと思います。 やってみたこと の写真を加工しました。 何年か前にN252iで撮った近所の野良です。 これを こんなふうに、 「ラフにトレースしたものをスキャナで取り込んだような感じ」 にしてみました。 当のところは輪郭線だけを取り込みたかったのですが、 まあ、これはこれで味があるからいいかと思いました。 ソースコード あまり真面目にじろじろ見なくていいです。 <?php //ヘッダ処理 header ("content-type: image/png"); //元画像読み込み $filename =

  • TrueType Fontで文字列を記述した場合の大きさを測る:Geekなぺーじ

    GDを使ってイメージに文字列を表示するにはImageTTFTextを利用します。 このとき、あらかじめ出力後の大きさがわかると非常に便利です。 ImageTTFBBoxを使うと、出力時の幅や高さ(bounding box)がわかります。 以下、ImageTTFBBoxのAPIです。 array ImageTTFBBox( float $size, float $angle, string $fontfile, string $text ) ImageTTFBoxが返すarrayには4点を表す8個の要素が含まれています。 以下、arrayの内容です。 0 : 左下角の X 座標 1 : 左下角の Y 座標 2 : 右下角の X 座標 3 : 右下角の Y 座標 4 : 右上角の X 座標 5 : 右上角の Y 座標 6 : 左上角の X 座標 7 : 左上角の Y 座標 サンプルコード 以下

  • CakePHP2を使って画像リンクをクリックしたらダウンロードダイアログを表示するようにしたい | オガリア 技術ブログ

    こんにちは。オガリア開発チームの粂です。 CakePHPのバージョン:2.4 CakePHP2.3からMediaViewが非推奨となり、代わりにCakeResponseを使うことになったのですが、意外と日語情報を探しても見つからなかったのでブログに書いておきます。 CakePHPを使って画像リンクをクリックしたらダウンロードダイアログを表示する方法についてです。 まず、HTMLのほうはこんな感じで書きます。 アプリケーション名はappだとして、Imagesコントローラーのgetアクションにfileという名前で画像ファイルを渡してあげます。 <a href="/app/images/get?file=hoge.jpg"><img src="/img/hoge.jpg"></a> 次に、Imagesコントローラーのgetアクションはこんな感じで書きます。 画像ファイルはappディレクトリの下

    kathew
    kathew 2016/05/10
    直接ヘッダーを書き出してもうまく動かなかったので、こちらを参考にしたらうまくいった。Cakeならではの部分だけどわかりやすいので良い
  • ブログ名は後で考える: GDを使った画像のリサイズ

    リサイズに限らないけど、こういうありがち処理って「画像操作用クラス」とか作ってること多いから、いざ直接GDの関数使うような機会があっても、それはもうすっかりみごとに忘れてる。 んで毎回同じような事調べるわけよ、GIF画像の透過部分が黒くなったぞー!とか。 ということでまたGDを使って画像を縮小する機会があったので、忘れないうちにメモしとく。 大前提リサイズする時の処理の流れとしては、 元画像をGDで開く新規TrueColorイメージをリサイズ後のサイズで作るimagecopyresampled()を使って1をコピー元、2をコピー先で再サンプリング2を適切な名前で保存、もしくは表示する1, 2のイメージリソースを開放こんな感じ。 imagecopyresized()じゃないのは、imagecopyresampled()を使った方が品質が良いから。 マニュアルのimagecopyresized

  • Geekなぺーじ : 画像上に文字列を表示

    ImageCreateFrom○○で読み込んだイメージリソースの上にTrueTypeフォントによる文字列を書く方法です。 サンプルコード 以下のサンプルでは、フリーの日フォントであるIPAフォント(Pゴシック)を利用しています。 「/path-to-fontfile/」の部分を必要に応じて変更して下さい。 <?php $img = ImageCreateFromJPEG('sample0.jpg'); # 必要に応じてUTF8へ変換(環境依存) $text = mb_convert_encoding('オランダシシガシラ', 'UTF-8', 'auto'); # 白い文字を書き込む $white = ImageColorAllocate($img, 0xff, 0xff, 0xff); ImageTTFText($img, 16, 0, 5, 200, $white, '/path-

  • 超便利なDebugkitを画面キャプチャ付きで解説 - cakephperの日記(CakePHP, Laravel, PHP)

    CakePHPの便利すぎるプラグインであるDebugkitが色々と機能追加されてたので、今の最新版でどうなっているか画面キャプチャをベースに解説します。thechaw.comにある最新ソースだとid:yandodさんがリクエストしてた「Viewにセットした変数とかヘルパーとか全て表示できるように」というのが、Variablesパネルに加わりました(2009/5/29のコミットで)。 基的には、下記からZIPダウンロードしてください http://github.com/cakephp/debug_kit/downloads (現在の最新版はVersion 1.1) http://thechaw.com/debug_kit/versions 追記 上記のzipはリリース版です。最新の機能を使いたい場合は下記からファイル名の日付が最も新しいZipダウンロードしてください。 http://git

    超便利なDebugkitを画面キャプチャ付きで解説 - cakephperの日記(CakePHP, Laravel, PHP)
  • いまさらAPCをインストールして、PHPの実行を高速化してみた ::ハブろぐ

    APC(Alternative PHP Cache)とは Alternative PHP Cache (APC) は、PHP の実行コードをキャッシュする仕組みで、 フリーかつオープンに使用できます。PHP の中間コードのキャッシュ・最適化を行うための、 フリーでオープンかつ堅牢なフレームワークを提供するということを目標としています。 ( PHP: 導入 - Manual ) スクリプトを起動するたびに、実行コードにコンパイルしている部分を、元のスクリプトに変更が無い限り(※)キャッシュして使い回すカタチで、PHPの全般的な実行を高速化する仕組みです。 ※スクリプトの変更の有無を確認する・しないのオプション ( apc.stat ) も別途で存在し、それを確認しないようにすると、その分さらにパフォーマンスが向上します。 今回は、さくらのVPS標準のCentOS 5.5と、「とあるさくらのV

    いまさらAPCをインストールして、PHPの実行を高速化してみた ::ハブろぐ
  • DateTimeクラスの落とし穴と対策 : PHP Advent Calendar jp 2011 Day 7 - ScriptWorks.JP

    PHP Advent Calendar jp 2011 7日目担当の @scriptwork です。 DateTimeクラス は PHP5.3 で日付や時刻の加減算を行う add / subメソッド や 差分を計算する diffメソッド などが追加され、日付と時刻を取り扱う面倒な処理をサポートしてくれるクラスです。 DateTimeクラス が実装されるまでは PHP関数 の strtotime() と date() で日付と時刻の加減算を行なっていましたが、2038年問題 への対応もあり、新しくコードを書くなら DateTimeクラス を使うのが良さそうですね。 とはいえ、現在の PHP5.3.8 と PHP5.4.0RC2 の DateTimeクラス は 日付の加減算 で strtotime() と 同じ問題 をかかえていますので、使い所を押さえておく必要があります。 DateTimeク

    kathew
    kathew 2016/04/15
    Zend_Dateクラスが良いとのこと。ふむふむ / 以前問題に直面した時は手動でごりごり対応するロジックを書いてた。非常に煩雑だった。楽したい
  • 【php】 ハートビート(セッションの維持) at softelメモ

    ブラウザから、インラインフレームなりXMLHttpReqeustなりを使って、定期的にリクエストを送信しておけば、画面を開きっぱなしで放置していても、セッション切れを防ぐことができる。 ハートビートとも呼ばれる手法。 例えばブログのように、長時間ひとつの画面にとどまって入力を続ける場合、入力中にセッションが切れていて、「登録」ボタンを押すとログアウトしてしまうなどの悲しい事件が起こる。 このような事態は防ぎたいが、単純にセッションの有効期限を延ばしたりするのは気が進まないときなどに使える。 この方法で、限られた画面ではセッションが自動的に長時間維持され、他のセッションが長くなくてよい画面では操作がないと3分で切れるとかいうことができる。

    【php】 ハートビート(セッションの維持) at softelメモ
  • CakePHPで指定したViewを呼び出す

    こう書くと、たとえばUsersControllerから実行すれば、「app/View/Users/foo.ctp」が呼び出される。 フルパスで指定すれば別のディレクトリのViewも呼び出せる。 たとえば下記のように書けば、「/View/Foo/bar.ctp」が呼び出される。

    CakePHPで指定したViewを呼び出す
  • PHP の「エラー処理ハンドラ」「シャットダウンハンドラ」「例外処理ハンドラ」の挙動

    error_reporting 関数に上記の定数を渡すことで、どのレベルのエラーをレポートすべきか PHP に指示することができます。 全てのエラーをレポートするには、E_ALL を指定します。PHP4 と PHP5 では既定では E_ALL & ~E_NOTICE が指定されます。 エラーハンドラの指定 エラーハンドラは、set_error_handler 関数で指定します。 次の例では $i = 5/0; の行で 0 除算の警告が発生しますが、その箇所でユーザー定義の エラーハンドラである my_error_handler 関数が呼ばれます。 <?php set_error_handler( 'my_error_handler', E_ALL ); $i = 5/0; function my_error_handler ( $errno, $errstr, $errfile, $err

    PHP の「エラー処理ハンドラ」「シャットダウンハンドラ」「例外処理ハンドラ」の挙動
  • set_error_handlerではfatal errorはハンドリングしてくれない - Qiita

    問題点 set_error_handlerは、phpERRORやNOTICEなどが発生した際に実行する関数を指定できるが、FATAL_ERROR(例外)の場合は関数を実行してくれない。 set_error_handler('error_handler'); throw new Exception('hoge'); function('error_handler') { echo 'ERROR!!'; }

    set_error_handlerではfatal errorはハンドリングしてくれない - Qiita
  • CakePHPのルーティングルールを変更してトップページにHello World!を表示してみた

    CakePHPのルーティングルールを変更してトップページにHello World!を表示してみた 2013年10月17日 サイト制作 CakePHP CakePHPをインストールしトップページへアクセスすると、CakePHPの設定に関するいろいろが表示がされます。 今回はこのトップページの表示を「Hello World!」と表示されるように変更する方法を紹介します。 トップページ表示の仕組み CakePHPでは/app/Config/routes.phpでトップページへアクセスがあった場合の動作が設定されています。 Router::connect('/', array('controller' => 'pages', 'action' => 'display', 'home')); 上記コードにより、トップページへアクセスがあると、PagesControllerのdisplay()アクショ

    CakePHPのルーティングルールを変更してトップページにHello World!を表示してみた
  • ログインに追加の条件を付与する「scope」

    ユーザ登録では、仮登録処理(status=1)から送付したメール内のリンクをクリックしてもらい登録(status=0)を行ってもらう実装をしました。仮登録の状態ではログインできないように実装するには、1.3では「userScope」を使用しました(記事)が、2.xでは「scope」に変更されているようです。 Authコンポーネントを呼び出す際に以下のように定義して下さい。 2.0から「Authenticate type」というものが追加されており、今回はフォームからpostされた認証に対して追加を行うため'Form'に追加しています。(参考) var $components = array( 'Auth' => array( 'authenticate' => array( 'Form' => array( // 認証されるには、「Userのstatusが0である必要がある」を追加する

    ログインに追加の条件を付与する「scope」
  • PHPのCGI方式/Module方式の違い

    あなたのサイトの PHPは,CGI方式ですか? Module方式ですか? もどる PHP-CGI の query string の処理の脆弱性が,軽く世を賑わしました.なお,PHPは,脆弱性に対する脇が甘く.時々爆弾が炸裂します.phpを利用する場合は,注意深くメンテする必要があります. PHPは,ApacheなどのWEBサーバと組み合わせて利用している場合,PHPコードを CGI方式,または,Module方式かで実行しています.この両者の違いをはっきりと述べていないサイト・が多く,酷いものです.そこで,以下に簡単にまとめておきます. Webサーバ(ほぼapacheです)におけるPHPコードの実行方式は,2つに大別される Module方式(module type) これは,apacheなどのWEBサーバに組み込まれているmodule (mod_phpなど)が,PHPコードを引き渡したPH

  • 小粋空間: PHP における「モジュール版」と「CGI 版」の比較 WordPress の利用例

    PHP のパフォーマンスを調べる中で「モジュール版」と「CGI版」という言葉をみつけまして、エントリーではそれぞれの内容、およびパフォーマンス・セキュリティ等の観点で両者を比較してみました。 併せて、PHP プログラムである WordPress を適用した場合について示しています。 Web サーバは Apache を対象にしています。内容について認識誤り等ありましたらご指摘ください。 1.用語 まず最初に「CGI版」と「モジュール版」の意味について記します。 [CGI 版] 「CGI」は「Common Gateway Interface」の略で、サーバが受信したブラウザの要求に応じてプログラムを起動するための仕組みを指します。PHP の場合、ブラウザに http://~/xxx.php を URL として指定した場合、Webサーバは xxx.php を実行ファイルと認識してプログラムを起

    小粋空間: PHP における「モジュール版」と「CGI 版」の比較 WordPress の利用例