読者です 読者をやめる 読者になる 読者になる

php

php5.2 mb_send_mailを使うと半角カナが文字化けする

php

mb_send_mailって便利だけどその辺注意する事

php5.3.3 centos6.8 composerインストール手順

インストール curl -sS https://getcomposer.org/installer | phpcomposer.pharが出来るので移動 mv composer.phar /usr/local/bin/composercomposer.jsonを作成する cd /usr/local/bin vi composer.json内容 { "require": { "monolog/monolog": ">=1.0.0" }…

php csrf対策

php

参考サイト PHPでクロスサイトリクエストフォージェリ(CSRF)対策するときのメモ - Qiitaphp

php sqlのIN句をarray_fillでキレイにまとめる

以下のようにすれば一行で$idの数だけ?を記述するin句が作れる i.id in ('. implode(',', array_fill(0, count($id), '?')). ')str_repeatを使う方法もあるようだけどこっちの方がキレイ

php 例外時のデバッグは__toStringが便利

php

__toString実行しておけばエラーの呼び元とか行数とか出してくれるので便利サンプル log($e->__toString()); }

php fatalエラーの補足方法

バッチがメモリ不足等で落ちた場合にFatalエラーが発生するけど通常fatalエラーはtry-catchはおろか、set_error_handlerでも補足できない。 そのためregister_shutdown_functionを使う必要がある。

mysql5.6が突然起動しなくなった件の原因と対策

昨日まで動いてたmysqlが突然起動できなくなった。以下、ログ周りのオプションを変更してみた時のエラーログまとめ # error1 /usr/sbin/mysqld: File './mysql-bin.000023' not found (Errcode: 28 - No space left on device) 2016-09-14 08:52:37 23762 [E…

メールの符号化について

受信したメールをprocmail経由でphpに渡してゴニョゴニョする時に失敗した件のまとめ。まずメール送信の仕組みから分かっていなかった。初期のメールではASCIIの7bitデータのみが想定されていたため、現在でも添付のバイナリやマルチバイトである日本語は7bi…

php5.1 と php5.2 のstrtotimeの違いについて

php

php Call to undefined method PEAR_Error::xxx() エラーについて

php

addWorksheet(mb_convert_encoding($sheet_name, 'sjis-win', 'utf8')); $worksheet->write(0, 0, mb_convert_encoding('test', 'sjis-win', 'utf8')); Spreadsheet_Excel_Writerで上記を実行したところ、以下のエラーが発生。 Fatal error: Call to undefin…

php pear Spreadsheet_Excel_Writerのエラーの対処方法

php

エクセルのバージョンは2013。使う前から想定はしていたけど案の定Spreadsheet_Excel_Writerでエラーが発生。 しかも通常は問題無いんだけど、ある一定以上のデータを出力しようとすると「一部の内容に問題が見つかりました」云々のエラーが出る。以下のサイ…

php 連想配列の先頭にデータを追加したい

php

[ PHP ] 配列の先頭に要素を追加 ( array_unshift, array_merge, + ) – 行け!偏差値40プログラマーこちらのサイトが参考になる。キーを保持したい場合は、基本array_mergeを使うことになると思うけど、それでもうまくいかない場合は、array_reverseを使えば…

php 同一nameのフォームをpostした場合、後に書いたものが優先される

php

ケース1 <form method="post" action="/test.php"> <input type="hidden" value="hidden" name="col1" /> <input type="text" value="" name="col1" /> <input type="submit" value="send" /> </form> テキストボックスに「text」と入力してpostした時のprint_rの結果、テキストボックスが優先される Array ( [col1] => text )ケース2(textbox…

centos5.11 php5.2 vim7.4 xdebug2.2.7 debugger.vimインストール手順

phpのデバッグ環境作りたくて最初vdebugを入れようとしたんだけど自分の環境だとどーにもpythonのバージョンの関係で動かなかったため結局debugger.vimをインストールした。(もしかするとpython2.6がデフォルトのcentos6以降じゃないとダメなのかもしんない)…

サブドメインでのセッションの共有方法

php

http://www1.test.com/test1.php http://www2.test.com/test2.php というサブドメインが異なる二つのページ間でセッションを共有したい場合、以下のようにsession_startする前にsession.cookie_domainを設定する必要がある。

php php.iniの設定はhttpd.confやhtaccessでも設定可能

php

はまってしまったのでメモ。 php.iniのinclude_pathはデフォルトのままなのに何故か別フォルダのファイルをincludeしていたからなぜだろうと思ったら、htaccessにinclude_pathが設定されていた。 php_value include_path ".:/var/lib/sample:"htaccessを使う…

php definedで配列を定義したい

php

php7だとdefinedに配列を指定できるようになったらしいがphp5.2ではできないので以下のようにすればよい。(もちろん区切り文字がデータに含まれないことが前提)

php array_multisortが優秀だった件

php

cakephp使ってて、以下のような多次元配列をNumber.numberでソートしたい [User] => Array ( [0] => Array ( [id] => 36 [Number] => Array ( [id] => 1044 [number] => 0300019992 ) ) [1] => Array ( [id] => 15 [Number] => Array ( [id] => 1041 [number…

php セッションの有効期限を2038年以上にするとセッションクッキーになってしまう件

cakephp1.2でSecurity.level=lowにした上でsession_startすると、本来であれば有効期限が25年先となるはずが、有効期限がセットされずにセッションクッキーになってしまうという問題にぶち当たった。しかもphp5.1だと発生し、php5.2だと発生しない。色々試し…

php 1つのformにsubmitボタンを複数設置する方法

php

わざわざjavascriptを使ってあほなことをやっていた。 submitのデータは押したものしか送信されない。(PHP)HTMLのFORMでSubmitボタンを複数配置したい場合 : 3流プログラマのメモ書き formに複数ボタンのサンプル(同じname属性値)

phpからcurlを使う

php

wgetを使っていたらファイルが破損するケース(と思ったら勘違いだったぽい)があったため、今後はcurlを使うようにすること。以下、ファイルダウンロードのメモ。 /dev/null 2>&1"; passthru($cmd, $ret); オプション -o ダウンロード時のファイルを指定 -k …

php FPDFのPGOTHICとGOTHICの横幅の違いについて

php

PGOTHICは半角の文字によって横幅が異なるっぽい。 例えば「1」と「W」では「W」の幅の方が広い。 GOTHICだとどちらも同じっぽいので、バイト長で折り返しする際は、GOTHICを使うこと。

php 日本語に対してstrlenを使う際は必ずsjisに変換して2バイトにしてから使うこと

php

utf8だと3バイトだったり2バイトだったりするので気をつける 変換については↓ utf8の日本語を2バイトにしたければshift_jisに変換すればよい - 技術ブログ

php 名前空間について

php

jQuery File Upload Pluginを実行したらこんなワーニングが出た。 PHP Warning: Unexpected character in input: '\\' (ASCII=92) state=1どうやら以下の行でエラーになっていたらしい。

phpizeを使ってphpの再コンパイルをすることなくmysqliを追加する

php

mysqliを使ったソースをサーバー上で動かそうとしたときに以下のエラーが出た Fatal error: Class 'mysqli' not found in /var/www/login.php on line 101 mysqliが使えるかどうかはphp -mで確認する。 php -mmysqliを使う場合、本来phpをコンパイルする際に…

cakephp1.2 php5.3 Deprecatedエラーを消したい

php.iniに以下のようにすれば通常はdeprecatedエラーは非表示となる error_reporting = E_ALL & ~E_DEPRECATEDしかしcakephp1.2では個別にerror_reportingが設定されている箇所が何か所かあるようで、↑の設定をしてもdeprecatedエラーが表示されてしまうため…

php メールのタイトルが途中で切れてしまう件

php

変更前

php file_put_contensが便利だった件

php

open~closeまで全部やってくれる関数。 ファイルにさっとログ吐きたい時とかいっつもこの手順を忘れるんだけど、file_put_contentsで一発でできるぽかった。参考サイト 【PHP】超絶便利関数、file_put_contents()の動作を理解する。追記はFILE_APPENDをつけ…

phpからwgetを使う

php

phpで音声ファイルをダウンロードしたかったのでそのメモphpだとfile_get_contentsやらcurlやらHttpRequestやらあるけど、認証不要で結果をゴニョゴニュしないのであればwgetを使うべきだと思う。O で保存先指定 wget -O /home/user/20150609/file2.mp3 http…

php5.1.6だと15桁以上の数値が指数表記になる件

php

いまどきphp5.1.6を使っている時点でおかしいんだけど、以下メモ。 echo 1881330971012748; // 1.8813309710127E+15 echo (float)1881330971012748; // 1.8813309710127E+15元のまま表示したい場合は以下のようにする echo sprintf("%.0f",1881330971012748)…

全角と半角が混在した文字列を切り取る場合はmb_strimwidth()が便利

php

例えば半角5文字分切り取りたい場合、「あいう」だと半角6文字分になってしまうので、その場合は「あい」のみ切り取る、という処理をするんだけど、それがめんどくてどうしようと思っていたらmb_strimwidth()で解決できることが分かった。この関数を使うと、…

phpのthrowについてメモ

php

throwはmainの中に書く必要なし。 関数の中でthrowしてgetTrace使えばどの呼び元でエラーが起きたかも分かる。

phpでhttpリクエストをする時の手段まとめ

php

お手軽にやるなら、phpの file_get_contents しっかりやるなら、pearの HTTP_Request phpに依存しないやり方なら、コマンドの curl(またはphpのcurlモジュールを利用)file_get_contentsは簡単に使えるけど、実は色々できて、basic認証はもちろん、ヘッダー付…

ExceptionクラスのgetTrace()を使うとエラーの呼び元が分かる

php

_aaa(); } catch(Exception $e) { print_r($e->getTrace()); } function _aaa() { throw new Exception(); } 結果 Array ( [0] => Array ( [file] => /home/test.php [line] => 48 [function] => _aaa [class] => Test [type] => -> [args] => Array ( ) ) […

phpでキーを保持しながら配列をカットする(切り出す)方法

php

array_sliceはデフォルトのままだとキーを振り直す。 最後にtrueを指定することでキーを保持することが出来る。 2,4=>3),0,1,true)); 結果 Array ( [5] => 2 )

psによる重複チェック

php

ファイル書き込み時はrewindを忘れないこと

php

eclipseでphpの環境を構築する手順

下記のサイトからeclipse4.3(kepler)をダウンロード ※Full Edition の PHP を選択のこと Eclipse 日本語化 | MergeDoc ProjectPDTやSVNのプラグインもセットでダウンロードされる。CakePHPで、ControllerのModelがクラスとして認識されず、F3のジャンプが出…

phpからsshでコマンドを実行する方法

php

例えばweb上でapacheのユーザーから別のユーザーにスイッチして作業したいケースで、phpからsshを使う方法。まずshで問題ないことを確認する(StrictHostKeyChecking no → 確認メッセージを表示しない)。何も考えず以下を実行してみる。 ssh -l user -p 10022…

phpでジョブキューを行う

php

ジョブキューについて http://gihyo.jp/dev/serial/01/perl-hackers-hub/001001 VOYAGE GROUP エンジニアブログ : 重たい処理を華麗にスルーして、アプリケーションの体感速度をぐっと向上させる方法phpだとGearman(ギアマン)が便利らしい。 クライアントか…

細かい処理は全部関数化すること

php

コントローラーの処理は機能単位で細かく関数化すること。そうすればコントローラーのメイン部分の処理はもちろん、関数内でもエラーの時点でreturn falseできるため、ソースが圧倒的に綺麗で見やすくなる。returnができるということは、その時点で処理を抜…

キャッシュという考えが抜けていた

php

APIで正常なアクセスの場合、わざわざ毎回DBに接続しているけど、アクセス時間をキャッシュ(メモリorファイル)して制限時間内かどうかそのキャッシュを見るようにすればよかった。どんなときでも「キャッシュが使えないか」という考えを忘れないようにしよう…

fputcsvで標準出力に出力する

php

csv形式で出力する、っていったらどんなケースであれ、以下の3点がパッと思いつくようにしたい。1 $handle = fopen('php://output', 'w'); 2 $a = array(); $a[] = mb_convert_encoding($str1, 'sjis-win', 'utf8'); $a[] = mb_convert_encoding($str2, 'sji…

str_replaceまとめ

php

直ぐに使い方を忘れるのでメモ 'val1', 'key2' => 'val2', ); str_replace(array_keys($arr), array_values($arr), $str); // 複数の文字を削除したい場合 str_replace(array(" ", "ー", "―", "-", "-"), "", $str);

phpでfloat型の値を比較したい場合はstring型にするとよい

php

ビット演算でステータス管理

php

ビット演算の良いサンプルをみつけた さんぷるクリプト: PHPでビット演算、シフト演算上記サイトの丸コピーです。 各桁のフラグが立っているかどうかで、ステータス管理を行う。 sprintfでビット表示する場合、「b」を使う 1, 'blue'=>2, 'green'=>3, 'white…

htaccessについて

参考サイト [Q&A] htaccess設定値を、PHPから動的に読み込み 【OKWave】 [Q&A] ブラウザ上で.htaccessファイルを更新するには? 【OKWave】 .htaccessの一括管理方法について 現在IPアドレス制限を.htacces.. - 人力検索はてなphpでhtaccessを更新したい場合…

REQUEST_URIを分解する

php

phpだと$_SERVER['REQUEST_URI']でリクエストされたURIを取得できる。このREQUEST_URIは相対パスが入るかと思っていたけど、絶対パス(http://~)が入る場合もあるらしい。で、phpでURLを分解する関数にparse_urlが用意されているけど、この関数は原則絶対パ…

json_decodeを行う時の注意事項

php

jsonデータをphp付属(v5.2以上)のjson_decodeでデコードする際の注意事項まとめ。・object型で返却される {'data'}のようにアローでアクセスする。・オブジェクト型だと何かと不便なので連想配列に変換する

全角半角スペースを削除する方法

php