ソフトウェア開発者の日常

こだわりなく書きたいことを書いていきます。

PHP

PHP:文字列のバイト数で処理を分ける方法(2)

PHP

より短いコードにする方法がありました。 photo credit: Elephpant needs a drink via photopin (license)以前、文字列のバイト数で処理を分ける方法として、Shift-JISに変換してから判定する方法を書きました。PHP:文字列のバイト数で処理を分ける方法 - …

PHP:文字列のバイト数で処理を分ける方法

PHP

文字コード変換をしてバイト数を判定しました。 photo credit: via photopin (license)文字列が特定のバイト数を超えた場合、処理を切り分けたくて以下のようなコードを作成しました。 $work= "12あいうえおかきくけこさしすせそたちつてと漢字混合"; $workS…

PHPExcel を使わず、Excelファイルを出力

PHPの環境なら、PHPExcelを使えば簡単にexcelファイルを出力できます。 PHPExcelを使わず、HTTPヘッダを一部変更すれば、Excelファイルを出力できると聞いたので、試してみました。 photo credit: Collin Anderson via photopin cc方法HTTPヘッダとして、 he…

SQL Server:データを挿入した後の、自動でカウントアップされた値の取得方法

以前出来ていたと記憶している方法とは違う方法で出来ました。 記憶していた方法PHPでSQL Serverのテーブルにデータを挿入して、自動でカウントアップされるカラムの、カウントアップされた値を取得する方法は、 INSERT INTO table1(column1) VALUES ('abc')…

PHP:PHP 5.3以降でMicrosoft提供のSQL Server用のドライバを利用する際の注意点

Microsoft SQL Server 2012 Native Clientが必要なことはちゃんと読めばわかる内容ですが、読まずに思い込みで設定していて悩みました。 Windwos Server 2008 R2 + SQL Server 2008 + IIS 7.5 + PHP 5.3 という環境を構築しなければならなくなりました。 PHP…

入力が消えているはずなのに消えたと判断できなかった現象

PHP

セッション変数が中途半端に残っていたら発生するのかもしれません。現象ユーザー情報登録システムで、ユーザー情報がまったくない状態で登録が完了する現象が発生しました。推定原因入力された値は、post形式で入力内容確認画面に渡され、入力内容確認画面…

再読み込みボタンを押されたときにPOSTメソッドを再処理させない方法

POSTメソッドで渡された値を使って登録処理を行う画面で、処理が終わった後にブラウザの再読み込みボタンを押されると、同一処理が繰り返されて、2重登録が発生しました。 開発中のデータベースへの反映やメール送信の動作確認をするには便利ですが、本番で…

suPHPの環境で、php_valueによるphp.iniの設定を変更ができない場合の対処

今まで使えていた方法が使えないと、解決できるのかと焦ります。今までの方法が使えない.htaccessファイルに php_value include_path '.:/usr/local/share/pear:/usr/home/www/public_html/test" と書いてWebサーバーにアップロードして動作確認したところ、…

PHP:file_get_contents()で、GETリクエストおよびレスポンスを取得

あるサイトに対して、httpのGETリクエストでIDをパラメータとして送り込むと、IDに従ってファイルが作成されるようにしてあります。 普段は他の処理と組み合わせた、一連の処理の流れの中でGETリクエストをしていますが、急遽GETリクエストだけ行わなければ…

PHP:TCPDFを使ってHTML形式のデータからPDFを生成する際に追加した機能

Webの画面から、HTMLの<sup>や<sub>などのタグを含んだ文章を入力し、タグを反映した状態でPDFにしたかったので、TCPDFを使ってHTML形式でPDFを作成しました。Webの画面上、不等式の大なりの「>」と小なりの「<」は半角を使わず、大なりは全角の「>」を使い、小なりは</sub></sup>…

年末の週番号は何番になるのが正しいの?

先日、以下のツイートをしました。今週は、2013年第53週と2014年第1週のどっちが正しい?プログラムの挙動を見ていると、2014年第1週みたい。根拠というかルールはどこかにあるのかな。— AJYA (@ajyaa) 2013, 12月 31 きっかけは、PHPのdate関数でフォーマッ…

PHP:日付の扱いを間違っていても、目的は果たしていた例

以前作られたプログラムを修正するために、期日を過ぎたので入力画面を表示しないようになっていたのを、表示するように設定しても、表示されません。 原因調査 以下のコードで期日が過ぎているか判定していました。 $endDate = date('U',strtotime('2014-01…

PHP:defineを使わず変数を使っているプログラム

何年か前に作成されたプログラムの修正をしています。 共通ファイルに変数で固定値が書かれていて、変数を使って処理しています。 $systemId = 1; 他の書き方 固定値を書くなら、defineを使う方法があります。 define("SYSTEM_ID","1"); どちらでも適切にコ…

PHP:3桁になると正常に動作しないプログラム

0埋めされた文字列を文字列型のカラムから値を取得して、連番を生成するために、以下のようなコードが書かれていました。 $sql = "SELECT max(no) FROM table "; $result = pg_query($pgsql, $sql); $no = pg_fetch_result($result,0,0); $newno = sprintf("…

ひらがなチェックでつまずいたこと

人名のふりがなとして、ひらがなが入力されているか、JavaScriptやPHPでチェックしています。 photo credit: fhisa via photopin cc 「ー(長音)」がひらがなと判定されない 正規表現でチェックしていて、PHPの場合、文字コードがECU-JPで作られたページで…

PHP:文字が化けて保存できない現象への対処

以前作られたプログラムをベースに、部分的に修正を加えて利用したら、データベースへの登録時にエンコーディングできないエラーが発生しました。 そのときに表示されたエラーメッセージです。 Query failed: ERROR: invalid byte sequence for encoding "EU…

PHP:ファイルダウンロードで予想外の動作

CSVファイルをダウンロードするために、以下の記事のようなコードを利用して、ファイルをダウンロードできるようにしました。 PHPでファイルをDLさせる際のPHPコード例:phpspot開発日誌 このコードで僕の環境で試したところ、予定通りのファイルがダウンロー…

PHP:TCPDF:画像を指定するために試したこと

PEARのImage_Barcodeを使って作成したバーコードの画像を、TCPDFで作成するPDFに挿入して、バーコード付きPDFを作成することになり、以前作ったプログラムをベースに作成しました。 画像の位置調整ができない 試してみると、バーコードが左に寄りすぎている…

PHP:PEAR:バーコード Code39の生成を試してみました

以前、PEARのImage_Barcodeを使って、バーコード JAN13生成の失敗談を書きました。 PHP:PEAR:Image_Barcodeを使ってバーコード生成で間違えていたこと - ソフトウェア開発者の日常 試すにあたり方針を決める 今回、Code39での生成を指定されたので、 Code39…

ファイルを上書きしてしまうトラブル

トラブル対応はエネルギーを余分に使います。 photo credit: Kasaa via photopin cc トラブル発生 部下からファイルが上書きされたのは、なぜなんでしょうと相談を受けて、どんな仕組みを作ったのか確認してみました。 作られていたのは、 アップロードされ…

実行環境のバージョン違いでエラーが出たので対処しました

バージョンアップで、チェックが厳しくなっていたようです。 photo credit: YanivG via photopin cc 新しい実行環境でのテスト PHP 5.4.7の環境で、以前作られたプログラムを動かしたら、2種類のメッセージ表示されました。 「Strict Standards: Redefining …

PHPの実行時間の制限を変更する方法

動的に変える方法があったんですね。 photo credit: wwarby via photopin cc タイムアウトが発生 クレジットカード決済を行うプログラムがあり、今年用に修正を行いました。 テスト環境で動作させると、タイムアウトで終了してしまいました。 テスト環境のma…

PHP:時間がずれている原因を探して、新たな知識を得る

PHP

設定があるとは、今になると納得できますが、最初は全く思っていなかったです。 photo credit: leoplus via photopin cc 明日の午前9時から本番モードに切り替えるプログラムがあります。 既に準備モードで動いているため、プログラムが動いているサーバーの…

PHP:バージョンアップした後の動作確認は重要です

PHP

バージョン間で、動作が違うので注意が必要です。 新しい環境で、以前使ったプログラムを動作させることになりました。 新しいPHPのバージョンは5.4.7で、古いPHPのバージョンは5.2.6です。 正常に動作するまでに、以下の3点を修正しました。 ショートタグを…

PHP:XAMPP最新版からPostgreSQL最新版へ接続しようとして相変わらずだと思ったこと

XAMPPバージョン 1.8.1とPostgreSQL 9.2.3でWindows 7上に環境構築しようとしたときのことです。 apache friends - xampp for windowsXAMPP新バージョン 1.8.1 ... NPO法人 日本PostgreSQLユーザ会 以前、PHP5.2.7以降に付属のDLLは、PostgreSQLに接続できな…

PHP:週数の数え方をよくよく知らなくて、予想外の動作が発生した

週送りの機能が正常に動作していませんでした。 photo credit: *Kicki* via photopin cc 予想外の動作の状況 前週/次週というボタンがあって、1週間毎に遷移する機能(=週送り機能)を作りましたが、年をまたぐと正常に動作しませんでした。 2013年1月7日(…

データベースへの接続にはコストがかかる

この場合の「コスト」とは、サーバーのCPUやメモリのことで、「コストがかかる」とは、サーバーのCPUやメモリをたくさん使っているということになります。 photo credit: ottonassar via photopin cc ことの発端 PHPのバッチプログラムでデータベースからデ…

PHP:非同期処理の方法を調べた

出来たのはいいが、わからない点もある。 photo credit: Thorbard via photopin cc ことの発端 PHPでCSVファイルを生成して、ダウンロードを行うプログラムがあるが、データの取得に時間がかかりすぎて、ブラウザが待機時間を過ぎて、タイムアウトしてしまう…

PHP:TCPDFで調べたこと

自分で試した内容だけど、バラバラで探しにくいのでまとめておく。 photo credit: Cranky Pressman via photopin cc TCPDFマニュアル(勝手訳)にはお世話になってる。 TCPDFマニュアル(勝手訳) MultiCellで文字の大きさを自動で縮小させて枠に収める$pdf-…

PHP:¥マークの判定動作ではまった

久しぶりに¥マークではまった。何年ぶりくらいだろ。 photo credit: Kaptain Kobold via photopin cc ことの発端 ¥マークが含まれているかチェックするために、 $str = "入金予定"; $pos = strpos( $str, "¥¥"); if ( $pos !== false ) { echo("a"); } とし…