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

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

PHP

PHP:ZipArchiveを利用した際に戸惑った点

PHP

サーバー上のファイルを圧縮するために、ZipArchiveを初めて利用しました。 利用した際、以下の2点に戸惑いました。 アーカイブの作成先のパーミッションが無くてもopenに成功する $zip = new ZipArchive; $res = $zip->open("/home/usr/test/zip/test.zip")…

PHP:必ずフラグがONで更新されてしまう

PHP

昨日の記事に続いて、これまでに見たことがあるバグです。 昨日の記事はこちらです。 ajya.hatenablog.jp あるシステムで、データの更新兼削除の設定ができる画面があります。 データを更新するために入力して、更新ボタンを押すと、削除が勝手に設定されて…

PHP:ロールバックしているはずがロールバックされない

PHP

これまでに見たことがあるバグです。あるシステムで、 入力内容をデータベースに登録処理 決済処理 メール送信処理 という流れで処理をしていました。決済処理でエラーが発生した場合とは、例えばクレジットカード番号が間違っていて決済できなかったときが…

PHP:header()関数で画面遷移させる場合の注意点

PHP

Webシステムのプログラムで、ログインしていない状態なのに、なぜかデータベースの参照を行っていました。 index.phpにアクセスされると、ログインしていなければlogin.phpに遷移するようになっています。 ログインしていれば、login.phpには遷移せず、index…

PHP:小数点以下の切り捨て誤差の対処

PHP

JavaScriptの計算誤差への対処を書きました。 ajya.hatenablog.jpこのとき、同時にPHPの小数点以下の切り捨て誤差の対処もしました。 JavaScriptとは異なる箇所で誤差発生 JavaScriptでは、36.3×700=25,410になるはずのところ、25,409になっていました。 PHP…

CentOS 7.4、PHP 5.6の環境でのPHPExcelのインストール手順

CentOS 7.4、PHP 5.6の環境でPHPExcelを利用したくなったので、インストールしました。 github.com photo credit: Nguyen Vu Hung (vuhung) CentOS 7 64bit 07 via photopin (license)インストール手順こちらのページを参考にして、以下の手順でインストール…

PHP:複数ファイルのアップロードへの対応方法

PHP

ファイルアップロードが複数になった場合、どのようなコードを書けばいいのかわかりづらいので、メモとして書いていきます。 photo credit: FootMassagez Coding a program - Credit to https://costculator.com/- Credit to https://costculator.com/ via p…

PHP:Webページのフォームのラジオボタンが増えた場合に、次のページのコードをなるべく変更しないで済む方法

PHP

Webページにラジオボタンがあり、初期は2個でした。 <form method="POST" action="next.php"> <input type="radio" name="radio1" value="1">Aを希望 <input type="radio" name="radio1" value="2">Bを希望 </form> 「Bを希望」を選ばれた場合だけ処理したいときは、PHPで次のフォームを作成していた場合、 if ($_POST["radio1"] === "2") { // Bの処理 } と書けば処理ができます。この状態に対して選…

PHP:Webページのフォームの複数のラジオボタンの値を、次のページで読み込む方法

PHP

以前、チェックボックスのname属性を配列のようにして、値を取得する方法を書きました。 ajya.hatenablog.jp今回はラジオボタンを配列のようにして、値を取得する方法です。 今回もうろ覚えで作成して、よくわからなくなって、上の記事を読み直していました…

文字コードがShift_JISのページをブラウザで表示すると文字化けする

過去に作られたデータベースにデータを登録するプログラムを、XAMPPをインストールして動作させました。 動作するまでに起きた現象と対処について、以下の記事で書きました。 ajya.hatenablog.jp文字化けが発生するPHPのファイルはShift_JISで作成されていて…

PHP 7.0とApahce 2.4の組み合わせのXAMPPを利用して学んだこと

データベースにデータを登録しなければならず、2年前に利用したプログラムを確認しました。 確認した結果、PHPだけあればいいと思っていところ、ApacheとPHPが動作するWebの環境が必要なことがわかりました。手っ取り早くApacheとPHPが動作する環境を構築す…

PHP:実行時間の制限を確実に回避できるのは?

PHP

PHPの実行時間の制限について書きました。 ajya.hatenablog.jpmax_execution_timeの値を長い時間をにして止まらないのを確認するのも方法ですが、1秒という極端に短い時間にして試してみました。 確かに1秒で終了したので、max_execution_timeの値で制限がで…

PHP:実行時間の制限はどうなっているの?

PHP

以前お客さんのWindows Server環境で、PHPで作ったコマンドラインから起動するプログラムを実行していました。 半年に一度ほどの作業で、時間がかかる処理というのはわかっていました。 処理の状況から1時間半くらいで終了するかと予想して待機していました…

PHP:Webページのフォームの複数のチェックボックスの値を、次のページで読み込む方法

PHP

Webページのフォームに、久しぶりに一から複数のチェックボックスを配置して、次のページで選ばれた複数のチェックボックスの値を読み込もうとしました。 なんとなく覚えていたので作成できましたが、うろ覚えなので記録として残します。 読み込み側のページ…

PHP:TCPDFを使ってHTML形式で出力すると文字がはみ出る現象への対処

先日、TCPDFでHTML形式のデータを指定してPDF出力すると「-」で折り返してしまったので対処をしたことを書きました。 ajya.hatenablog.jpこのとき、別の現象にも気がついていました。 別の現象は、文字列をtableタグのtdタグで囲んで出力すると自動で折り返…

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

2年以上前に、TCPDFを使ってHTML形式のデータからPDFを生成する際に追加した機能のことを書きました。 ajya.hatenablog.jpこの機能を使ったシステムを2年以上ぶりで使用することになりました。 動作確認のテストしていると、文章上の「-」の位置によっては、…

PHP:正規表現を少しだけ学びました

PHP

2年以上前に作成したシステムをベースに、一部修正して再利用することになりました。 ソースコードを確認すると、テストサイトで利用する場合は、テスト用のデータベースへの接続文字列を手作業で有効にしていました。 本番サイトで利用する場合は、本番用の…

PHP:POSTでデータを渡すためにcURL関数を使ってみました

PHP

入力された内容を画面遷移を行わず、POSTで渡すためにPEARになかったかなと探していたときに、cURL関数でもできることに気がつきました。 PHP: cURL 関数 - Manualインストールされただけの状態ではモジュールが組み込まれていないかもしれませんので、利用…

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…