ど素人から毛を生やす。<延>

Web

array_search()やin_array()する前には、ちゃんとarray_map('trim', $array)するんだぞ!ってメモ。

Web > PHP 2019年4月23日(最終更新:2日前)

どもです。
しょーもないことでハマったので備忘。

外部から貰ったCSVを取り込むのに、その項目が何列目にあるかをarray_search()で照合しようとしたら、特定の項目でfalse食らってしまったわけですね。

array_search()でやらかし易いミスといえば、

・第三引数にtrueを設定しないことで、文字列型と数値型の比較になってしまう。
・返り値0を考慮せず、if文にて「===false」を省略する

の2種類と思われます。
これはarray_search()の関数としての特性に由来することなので、探したらすぐに事例が出ます。

が、本件はもっと下らない話。

外部業者がCSVの出力でミスって、

"項目名1","項目名2","項目名3"

なんてCSVをくれやがったことで、項目名1が「項目名1... 続きを読む »

file_get_contents()はhttpでないと持ち帰るものが変わってしまう?

Web > PHP 2019年4月11日(最終更新:14日前)

どもです。
file_get_contents()に関する備忘録。

PDFを生成し、添付したメールを送信。そのためには作成したPDFをいちど取得しなければなりません。
しかし使用しているPDF作成ライブラリの仕様として、header()を変更してechoしてしまいます。
このため、file_get_contents()を使って生成データを取得することが求められます。

PDFを作成するソース自体は同ディレクトリにあるので、

$pdf = file_get_contents('./sauce.php')

としてみたところ、$pdfの中身はsauce.phpがそのまま入ってしまいました。
また、クエリストリングをつけるとNo such file or directoryです(これは当然か)。... 続きを読む »

PHPでファイルをダウンロードさせようとしたら空の実行ファイルがダウンロードされた事案のたぶんレアケース。

Web > PHP 2019年3月26日(最終更新:30日前)

どもです。

DBからcsvをダウンロードするphpを移植したら、空の(実行ファイル名).phpがダウンロードされてしまう事象が起きました。
開発や検証中にはそのような事例は一度も無かったのですが、はて。

この原因ですが、端的に言えば何も出力できないのに出力しようとしたことによるものでした。

解説しますと、最終的に出力するための記載がこれです。

header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");... 続きを読む »

Ajaxで403エラーを食らった原因がファイル拡張子だった話。

Web > javascript 2019年3月25日(最終更新:31日前)

どもです。
AjaxでデータをPHP処理しようとしたところ、403エラーになりました。

ForbiddenYou don't have permission to access /***/****/ajax.inc
on this server.

普段からAjaxを普通にやっているサーバーなので、パーミッションエラーというのは考えにくいのだけれど。

とか思っていたら、ファイルの拡張子が原因でした。

ajax.inc ... 続きを読む »

jQueryのイベント発火順を理解して、簡単に「それ以外を押したら閉じるサイトメニュー」を実装する。

Web > javascript 2019年3月20日(最終更新:1月前)

どもです。

HTML&CSSコーダーから離れて久しい僕ですが、久しぶりにまともにスマホ用ページを作ることに。
というわけでタッチで開閉するメニューを…

と思ったのですが、スマホ用ブラウザやアプリが使い勝手良く進化しているので、4年前の記事では不足。
具体的には「タッチで開閉するメニュー」に加え、「メニュー以外をクリックしたら閉じる」ようにしてやらないと、今どきは不親切です。

... 続きを読む »

Yahoo!出荷ステータス変更APIなのに「Request Parameter Error : Pay」

Web > EC 2019年2月14日(最終更新:2月前)

※2019/02/19 内容に間違いがあったので修正して再投稿。

どもです。
Yahoo!出荷ステータス変更APIにデータを送ったのですが、

<Code>od90101</Code>
<Message>Request Parameter Error : Pay</Message>

というレスをいただいてしまいました。
が、「Pay」がパラメータエラーとか言われても、リクエストデータに「Pay」入って無いんだけどナー???

それでこれ、原因は送信先のAPIを間違えていたという凡ミス。
出荷ステータス変更API(orderShipStatusChange)に送るはずが、
入金ステータス変更API(orderPayStatusChange)に送っていた。... 続きを読む »

Yahoo!APIのエラーコードめも

Web > EC 2019年2月13日(最終更新:1月前)

Yahoo!のAPIはエラーコード検索できないのが辛いんだってば!!!!

od系(od90101とかod91801とか)

https://developer.yahoo.co.jp/webapi/shopping/orderChange.html
https://developer.yahoo.co.jp/webapi/shopping/orderStatusChange.html
このページのほぼ一番下に一覧があります。(APIの種類によって多少異なるので、これらのページが全てではありません。)

px-04102 AccessToken has been expired. This API session is

... 続きを読む »

MySQLから取り出した「日付データがあるとき」の条件分岐を、できるだけ最短の記述で行いたい。

Web > PHP 2018年12月28日(最終更新:3月前)

どもです。

PHPで日付データがあるとき、の条件分岐をしたい。

このとき、厳密な日付フォーマットチェックを行いたいのであれば、DateTimeクラスを用いるのが妥当です。
参考サイト:
[Qitta]【PHP】DateTimeクラスでcheckdate()より汎用性のある日付チェックを行う
[SOFTELメモ]【php】DateTimeクラスで日付の表示の補正をおこなう

しかし、今回はMySQLからデータを取り出して使いたい場合です。
厳密なフォーマットチェックは入力時に行うべきことであって、この場合はもっとシンプルにできるはず。

そして問題となるのはMySQLにて、DATETIMEカラムをNOT NULLにすると、
デフォルト値が「0000-00-00 00:00:00」になるということです。

さて、どうすれば最短かつ明瞭な条件分岐になるか。

strtotime()を利用

if(strtotime($date) ... 続きを読む »

[MySQL]複数行のUPDATEを1回のSQL実行で済ませたい。

Web > Other 2018年12月14日(最終更新:4月前)

どもです。

MySQLで複数の行を更新したい場合、多くの場合は

などの方法で、UPDATEを複数回実行することになると思います。

が、当たり前ですが、これだと都度MySQLにアクセスすることになるため、大量の更新を行いたい場合だとDBへの負担とか所要時間とかが大変なことになります。

こういったとき、できるだけDBの負担を軽くしたい。
できれば1回のSQL実行で事を収めたい。

この1回の実行で複数行を更新することを、bulk(バルク) updateというそうです。

bulk insert

このバルク(大量・一括の意)処理は、INSERTの場合はまさにそのもののやり方がサポートされています。

しかし、UPDATEの場合はクリティカルなサポートがありません。

参考サイト:... 続きを読む »

MySQLをPHPでSELECTしたとき、resource型で保持して使用するときにwhileするのと一度配列にぶち込んでforeachするのとで、どれくらい負荷と速度に差があるのか調べてみた。

Web > PHP 2018年12月7日(最終更新:4月前)

どもです。

つい昨日、こんなことを呟きました。

膨大な行のMySQLをPHPでSELECTしたとき、resource型で保持して使用するときにwhileするのと一度配列にぶち込んでforeachするのとで、どれくらい負荷と速度に差があるのか知りたい。
いや前者の方が良いのはわかるんだけど!可能なら後者でいきたいんだ!

ということで、調べます。
PHPバージョンは5.4.15、Linuxサーバーです。

材料:
1万行×11カラムのテスト用テーブル

結果
1. Max Memory Usage : 5.978 ... 続きを読む »

1 2 3 4 5 6 21