PHP 2024年09月19日 16:06   編集
new!
用語集を作成するためのPHPプログラムです。
  • インデックスを新着順、索引、カテゴリー別に切り替えられます。
  • 記事内に他の記事のタイトルがあれば自動的にリンクを張り、記事の内容を一部ポップアップ表示します。
  • 記事にカテゴリーを設定することができます。カテゴリーによる絞り込み、分類表示が可能です。一つの記事に複数のカテゴリーを指定することができます。
  • 同じタイトルで内容が違う記事を複数作成することができます。
  • 管理者設定で「管理者のみ投稿可」、「誰でも投稿可」を指定できます。
  • pluginディレクトリにphpファイルを入れると、プラグインとして機能させることができます。
続きを読む
counter:24,865
PHP 2024年08月06日 15:30   編集
掲示板PHPスクリプトです。
利用者に負担をかけずにスパム対策するというのがコンセプトで、以下の対策をとっています。
続きを読む
counter:19,022
PHP 2024年07月30日 02:02   編集
PHP/用語集作成 PHP/掲示板PHPにブルートフォース攻撃対策処理を追加しましたが、他にも使えるかもしれないと思ったので、対策処理部分をモジュールにしました。
login_ver.1.06.zip (13Download)
総当たり攻撃はユーザーIDを固定して複数のパスワードでの認証を試みるブルートフォースアタックと、逆にパスワードを固定して複数のユーザーIDでの認証を試みるリバースブルートフォースアタックというのがあるということなので、このモジュールでは同じIDあるいは同じパスワードで10分間にに3回ログインに失敗したら60分間ログインをロックします。
続きを読む
counter:36,014
PHP 2023年04月15日 17:19   編集
XamppをアップデートしたらPHPが8.2.4になった。

文字列中の変数展開

文字列中で変数展開するとき、ほかの文字列と干渉するのを避けるため変数名を{}で囲う場合があるが、囲い方が悪いと
Using ${var} in strings is deprecated, use {$var} instead in
と警告が出るようになった。$も含んで囲わないとだめということだ。
結構あちこちで${var}と書いているので、サクラエディタの置換機能を使って一気に置換することにする。
正規表現を有効にして置換前は
\${(.+?)}
置換後は
{\$$1}
とすれば効率的に置換できる。
counter:12,342
CGI 2023年02月26日 14:54   編集

お知らせ

ver.1.974までのスクリプトにセキュリティの上の問題があることがわかったので、必ず対策を施したver.1.975以降にバージョンアップしてください。
続きを読む
counter:29,238
PHP 2022年10月03日 20:20   編集
姉妹ページ?で紹介しているサブネット計算PHPのアクセスが結構多いらしいのですが、「ページがモバイル フレンドリーではありません。」などと表示されていたので、レスポンシブ対応に書き換えてみました。せっかくなので公開します。
counter:24,099
CGI 2022年06月27日 16:41   編集
CPANで公開されているモジュールを使いたいときのメモ
  1. CPANのサイトの検索フォームで探したいモジュールを検索する
  2. Scalar::Utilモジュールを探しているなら、「Scalar::Util」と入力して探す。
    検索結果からそれらしい「Scalar::Util」をクリックする。
counter:25,140
PHP 2022年03月22日 20:03   編集
CGIの詳細予定表と長期予定表を合わせたようなPHPプログラムです。
1.png
2022/03/22 ver.0.053
PHP8でエラーが出るのを修正しました。
  • スケジュールの時間をグラフ表示します。1日に複数の予定を登録した場合、時間が重ならない限り同じライン上に表示されます。
  • スケジュールの登録は1分単位で可能(設定による)ですが、グラフの表示はそこまで正確ではありません(^^;
  • スケジュールにはカテゴリー、タイトル、コメントを保存することができ、カテゴリーごとに違う色で表示されます。
  • 2日間に渡る予定には対応していません。終了時間が24時を越える予定の場合は25:30のように設定することもできますが、表示は24時で切れます(設定で終了時間を24時以降にすることも可能です)。
  • 定期的なスケジュールを一括入力、一括変更することができます。一括入力されたスケジュールも個別に編集することができます。
counter:27,514
PHP 2022年03月18日 19:34   編集
XamppをアップデートしたらPHPも8.1.2になった。
いくつか推奨されなくなる機能がある。ウチのPHP関係では

暗黙の float から int への変換

intを使わなくてはいけない時にfloatを使っていた場合、アラートが出るようになった。
$width = 92.5;
$height = 50.1;
$canvas = imagecreatetruecolor($width, $height);
これまでは黙ってintに変換して適用していたが、元のfloatの値と変わってしまうのでアラートを出すことにしたらしい。単にintで指定すべきところをfloatで指定したからというわけではなく、
$width = 92.0;
のように小数点以下が0の場合はintに変換しても値が変わらないのでアラートは出ない。
counter:27,687
2021年09月09日 13:09   編集
改行コードってあまり気にしていなかったが、あまり無頓着だとトラブルになるようだ。
Linuxサーバー上での動作をチェックするために久しぶりにCGIファイルをWebサーバーにアップロードしてみたのだが、
500エラーで動作しないという問題が発生した。パーミッションをいじっても動くようにならず、なんでだと思っていたら
CGIファイルの改行コードがCRLFになっていたのが原因だった。

以前はCRLFでもエラーは出ていなかったはずと思ったが、どうも以前はFTPソフトでテキストモードでアップロードしていたので、自動的に改行コードがサーバーにあったものに変換されていたようだ。最近はテキストモードではなくバイナリモードでアップロードしているので、CRLFのファイルはCRLFのままアップされる。

整理しておくと改行コードはLF、CR、CRLFとあって、OSによって使う改行コードが違う。
LinuxなどUNIX系はLF、MacはCR、WindowsはCRLFを使う。プログラムでは、LFは"\n" CRは"\r" CRLFは"\r\n"と記述する。

でWeb上のサーバーはLinux系が多いので、そこで使用するCGIファイルはLFを使わなければならないということなのだろうが、不思議なことにPHPはCRLFのままでも問題なく動いている。
それとWindowsにインストールしたXamppでは、WindowsなのでCRLFで動くのは当然として、LFでも問題なく動く。

Webサーバー上のCGIファイルの改行コードは、OSで使用する改行コードを使うことが望ましいが、使わないと絶対ダメというほどではないということか。いずれにしても、WebプログラムのファイルはLFで統一しておくのが無難かもしれない。
ちなみにWindows標準のテキストエディタ「メモ帳」は、以前はLF改行コードでは改行されなかったが、最近のはちゃんと改行されるようだ。
counter:25,274
PHP Perl 2021年08月18日 19:52   編集
PerlからPHPへ書き換えからの続きです。

qq()を""へ置換して内部の"をエスケープするのがエディタの正規表現置換ではうまくいかないということで、PHPを使ってその書き換えをすることにしましたが、どうせならついでにほかの置換部分、ダブった変数の書き換えもやれるようにしたのが、perl2php.phpです。
ver.1.0	2014/11/28	機能制限モード追加
ver.1.1 2021/08/18 PHP8でうまく動かないのを修正
久しぶりに更新しました。PHPの仕様変更への対策だけですが。Xampp8.0.3参照
webに置いて使用するようなものではないので、ローカルでのみ実行可能ですが、機能制限版をアップしました。
xamppなどを入れてローカルでPHPを動かせる環境を持ち、自分でperlやPHPを書いている人対象ということになります。使用する場合はあくまでも自己責任でお願いします。
続きを読む
counter:28,520
Xampp 2021年08月05日 03:50   編集
メインのブラウザとして使っていたKinzaの開発が終了したらしい。Google APIにアクセスできなくなってGoogleアカウントと同期できなくなったためということだ。ウチではGoogleアカウントの同期とか使っていなかったので、使えなくても構わないのだが。いずれにしても開発終了してしまったなら、セキュリティの問題もあるので別のブラウザに乗り換えざるを得ない。
普通はChromeということになるのだろうが、ブックマークを新規タブで開けないのがめんどくさい。右クリックメニューや真ん中ボタンを使えばいいのだが、頻繁に使う機能なので、余計な1アクション増えてしまうのは抵抗がある。

Chromeを試してみたらローカル環境でもひっかかった。Xamppを使ったローカル環境でhttpsアクセスすると、やたらセキュリティ警告が出るのだ。Kinzaでも時々は出ていたのだが、一度「リスクを承知でアクセス」するとしばらくは出なかった。Chromeだとしつこいほどに出る。
ローカルサーバーではhttpしか使わないことにしてもいいのだが、できれば.htaccessファイルなども含めてWebサーバーと同じ環境でテストしたいので、httpsでアクセスできるようにしておきたい。
どうもXamppでインストールされる証明書が2019年で期限が切れているのが原因らしい。Chromeの警告は正常に動作しているだけなのかもしれないが、うるさいことには違いない。有効な証明書をインストールしてやればいいらしいのだが、まともにやると結構手間がかかりそうだ。
調べてみると、mkcertというソフトを使えば、ローカルサーバー用の証明書を簡単に作れるらしい。試してみると確かに簡単に作れた。C:\xampp\apache\conf\ssl.crt、C:\xampp\apache\conf\ssl.keyディレクトリ内にあるserver.crtファイルとserver.keyファイルをmkcertで作成したファイルで上書きすると、警告が出なくなった。

Firefoxも試してみた。
Firefoxを触るのは久しぶりだが、ブラウザによる見た目の違いは昔ほどはないようだ。しかしCSSの解釈が微妙に違うところがあるようで、たとえばこのサイト構成に使っているterm.phpはFirefoxではリンクが効かなくなるケースがあることに初めて気づいた。フォームの入力フィールドのサイズもChrome系とかなり違う。メインブラウザとして使わないとしても、たまにはFirefoxでの表示もチェックしたほうがいいかもしれない。Firefoxもブックマークを新規タブで開く設定はないが、隠し機能でブックマークから新規タブで開くことができる。

ブックマークを新規タブで開くなんて普通にメニューで設定できてもよさそうなものだが、これができるブラウザは少ないようだ。なんでなんだろう。セキュリティの問題かなんかあるのだろうか。target=”_blank”で別ページを開く場合は親ページが改竄される危険があるらしいが、ブックマークは親ページとか関係ないと思うのだが。

逆にChrome系にしかないと思っていたレスポンシブ対応確認のための表示は、ほとんどのブラウザでできるようだ。できるに越したことはないのだが、これはWeb開発しているユーザーでないと必要ない機能だ。

で結局Vivaldiにした。Kinza同様タブ、ブックマーク関連のメニューが豊富で、標準機能でブックマークを新規タブで開けるからだ。
counter:24,171
PHP 迷惑投稿対策 2021年06月30日 19:54   編集
スパム投稿対策研究のために設置した掲示板を長いこと放置していたら、スパム投稿でひどいことになっていた。対策は継続してやらないとダメのようだ。
旧掲示板のURLから今回新たに公開したbbs.phpにリダイレクトするようにした。PHP/掲示板PHP
  • ./yybbs/yybbs.cgi → ./yybbs/bbs/bbs.php
  • ./clip/clip.cgi → ./clip/bbs/bbs.php
できればスパム投稿を続けてもらって、bbs.phpがどれだけスパム防止効果があるか調べてみようということだ。とはいってもフォームから投稿してくるスパムはほとんど無いと思うので、これまでのスパムがすべて新掲示板に流れるわけではないと思うが。
・・・と思っていたが掲示板2の方はさっそく前の掲示板と同じ傾向のスパム投稿が来ている。JavaScriptのスライドロックも効果が無いので、ひょっとしたら人が投稿している?

bbs.phpのスライドロックは、ロボットはJavaScriptは無視するらしいということに期待して、JavaScriptで表示するロックを外さないと投稿できないという仕組みだ。ボタンを横にスライドするだけなので、読みにくい文字を入力したり、写真を選ぶ必要はない。この記事のテーマであるユーザーの負担が少ないスパム投稿対策というわけだ。
続きを読む
counter:24,432
PHP Shade 2021年06月19日 02:29   編集
Shadeプラグイン・スクリプト検索もレスポンシブ対応にしようかなと思って、久しぶりにCGIファイルを見てみたら、いろいろ他にも気になる部分が目について、結局ゼロからPHPで書き直すことにした。ちょこちょこ修正しているとはいえ、元はなんせ20年も前に書いたものだからなー。

スムーズに移行できるようログは旧CGIで作成したものをそのまま流用するつもりだったが、データを1個のファイルにすべて保存する形式にしていたのがどうも気になる。ダウンロードカウントもこのファイルに書き込む方式だったので、アクセスがあるたびにデータファイルを書き換える処理をしていたことになる。最初のころしょっちゅうログファイルが壊れていたのはこれが原因だったのかもしれない。
さすがにこれはないだろうと、まず新しいPHPプログラムでアクセスすると旧データファイルを扱いやすいデータ形式に書き換えることにする。登録内容1件ごとにファイルを作成することにして、ダウンロードは別ファイルでカウントすることにする。新方式のデータファイルを作成したら旧データファイルにはアクセスしないことにした。
続きを読む
counter:15,592
暗号 2021年06月19日 00:51   編集
Web上で使用するパスワードはほとんど半角英数字と記号を使うので、全角の日本語は使えないと思っていたが、必ずしもそういうわけではないようだ。この用語集作成スクリプトterm.phpや掲示板スクリプトbbs.phpでも、管理者認証などのためパスワードを設定することになっているが、試しに日本語のパスワードを設定したところ、問題なく使えた。

しかし、一般的には日本語のパスワードは使えないということになっている。たぶんパスワードの入力に のようなpasswordフィールドを使っているからだと思う。このpasswordフィールドは、入力した文字が伏せ字になるだけでなくIMEが無効になっているので、日本語が入力できないのだ。直接入力するのではなくコピーアンドペーストすれば入力できないことはないが、半角文字が使われていないとかいわれて受け付けられない場合もあるだろう。
パスワードの入力にpasswordフィールドを使っているのは、入力画面を盗み見るショルダーハッキング対策だと思うが、入力した本人にも見えないので、正しく入力できているのか確認しにくいという問題もある。(特に新しいパスワードを登録する場合)
続きを読む
counter:19,217
PHP 2021年04月26日 11:52   編集
長過ぎる文字列を切り詰めて短くしたいことがよくあるので、指定した文字数以上の文字は指定数に切り詰めて省略記号をつけるという処理のために以下のような関数を使っていましたが、思うように動かないことが多々ありました。
function jtruncate($str,$n) {
if ($n < 2) { return ; }
if (strlen($str) <= $n) { return $str ; }
$substr = mb_substr($str,0,intval($n/2),"UTF-8") . '...';
return $substr;
}
たとえばこの関数を使って
print jtruncate('PHPのコード',14);
を実行すると
PHPのコード...
と切り詰めていないはずなのに切り詰めた記号...が表示されてしまいます。
続きを読む
counter:14,500
2021年04月21日 20:36   編集
  • 左側に表示されるメニューをカスタマイズしたい場合は、タイトルが「Menu」という名前のページを作って下さい。
    Menuにはたとえば
    [[recent]]
    などと記載すると新着順に記事が表示されます。そのほかlistupプラグインなどを使ってメニューに表示されるインデックスをカスタマイズすることができます。
  • プラグインの詳細を見るには、「プラグインヘルプ」などのタイトルのページを作成し、
    [[plugins]]
    と記述して下さい。
  • ページ記述のヘルプは「ヘルプ」というタイトルのページに
    [[help]]
    と記述して下さい。

  • 初期設定では最新の記事がトップページに表示されますが、トップページを固定するには「FrontPage」というタイトルのページを作ってください。
  • Sidebar」というタイトルのページに書かれた内容はサイドバー部分に表示されます。
  • 「Footer」というタイトルのページに書かれた内容はフッター部分に表示されます。
counter:20,421
2021年04月21日 20:16   編集
ver.1.0
2016.12.26
とりあえず完成。
ver.1.01
2017.01.12
別名が索引メニューで表示されていなかったのを修正。
ver.1.02
2017.01.17
記事を編集するとバックアップを作成するように修正。
ver.1.03
2017.01.23
カテゴリーの色がそろわないケースがあるのを修正。
合わせてdiff(差分表示)プラグインを追加。
ver.1.04
2017.01.24
投稿フォームの「プレビュー」ボタンを押したときのプレビュー表示を調整。
ver.1.05
2017.01.31
誰でも投稿可モードの場合、管理者パスワードで記事をロックできるようにした。
ver.1.06
2017.02.27
記事中のURLをオートリンクできるようにした。
誰でも投稿可モードで使用できるタグを設定できるようにした。
ver.1.07
2017.03.01
プラグインの記述を間違えて致命的なエラーが出る場合、
ver.1.08
2017.03.22
外部スタイルシートをブラウザ表示用と印刷用に分割。
プラグインの実行をキャンセルしてエラーメッセージを表示するようにした。
ver.1.09
2017.04.10
古い履歴ファイルを削除するよう修正。
ver.1.10
2017.12.28
プラグインが配列形式で値を返す場合、2個目の要素を記事末尾に追加するように修正。(脚注プラグイン対応)
ver.1.11
2018.05.25
PHP7.2.0対応
ver.1.12
2018.06.12
検索結果で該当記事がない場合、フォームが消えるのを修正。
ver.1.13
2018.07.09
カウンター機能で、同じホストからの連続アクセスをカウントしないオプションを追加。
ver.1.131
2020.03.11
$post_mode でだれでも編集可能モードにしてロックすると、
ver.1.132
2020.03.12
記事に管理者モードを追加
管理者パスワードでないと編集できなくなってしまうバグを修正。
ver.1.133
2020.03.17
管理者モードが解除できないバグを修正。bbsプラグインにスライドロック機能追加。
ver.1.134
2020.03.18
headerに記述したJavaScriptを外部ファイルに移動。
ver.1.135
2020.03.23
bbs、comment、comment2、comment3プラグイン修正。
ver.1.136
2020.03.24
bbs、recentプラグイン修正。
ver.1.137
2020.03.25
comment2プラグイン修正。
ver.1.138
2020.03.31
tag_convert関数修正。calendarプラグイン修正。
ver.1.14
2021.04.07
レスポンシブデザインに対応。
ver.1.141
2021.04.11
カテゴリープルダウンリストと記事に表示されるカテゴリーの色がずれていたのを修正。
ver.1.142
2021.04.13
categoriesプラグインを改修。
Sidebarという名前の記事を作成すると、サイドバーに表示されるように修正。
ver.1.143
2021.04.14
style.cssの記述ミスを修正。bbsプラグインを修正
ver.1.144
2021.04.15
bbsプラグインで過去ログが表示されないバグを修正。
ver.1.145
2021.04.18
更新履歴の表示を変更。recent.php、bbs.phpを修正。
添付ファイルの表示順、レイアウトを調整。
ver.1.146
2021.04.22
history.php、listup.phpを修正。
ver.1.147
2021.04.24
記事編集フォームをflexボックスによるレイアウトに変更
ver.1.148
2021.04.28
登録した拡張子のファイルのみアップロードできるようにした。
ver.1.149
2021.04.30
readmoreプラグインを追加。
ファイルアップロード時にMIMEタイプチェックを行うようにした。
ver.1.150
2021.05.05
テンプレートの処理を修正。
ver.1.151
2021.06.21
categoriesプラグイン修正。ヘッダーに表示するタイトルを選択できるように修正。
ver.1.152
2021.06.22
file_upload関数内の記述ミスを修正。
ver.1.153
2021.07.05
bbsプラグインを改修。
パスワード認証時にブルートフォース攻撃対策処理を追加。login関数追加。
ver.1.154
2021.08.02
Firefoxでリンクが効かないケースがあるのを修正。style.css編集。
ver.1.155
2021.08.24
gifファイルのサムネール作成に失敗するのを修正。login.phpを読み込むよう変更。
ver.1.156
2021.08.26
クッキーの処理を修正。search_image、navi、listup、categories、access、recentプラグイン修正。
ver.1.157
2021.09.08
comment3プラグインを修正。
新着順の記事名リストの数を変更できるように修正。
ver.1.158
2021.09.09
bbsプラグイン修正。記事のデフォルト文字列を指定できるよう修正。
ver.1.159
2021.09.13
tmplディレクトリ内のテンプレートファイルと同名のcssが存在すれば、style.cssを上書きするよう変更。
ver.1.160
2021.09.15
bbsプラグインの投稿数をカウントするbbs_countプラグインを追加。
ver.1.161
2021.09.22
記事内でdivタグを閉じ忘れるとレイアウトが崩れるのを修正。
ver.1.162
2021.10.20
非管理者モードで記事表示するときは、管理者用記事のリンクは表示しないが、
ver.1.163
2022.03.22
PHP8でエラーやアラートが出るのを修正。
通常の記事内に管理者用記事のタイトルがあった場合リンクに置換していたのを修正。
ver.1.164
2022.03.27
bmpファイルのサムネール作成に対応。calendarプラグイン改修。
ver.1.165
2022.04.27
bbsプラグイン、bbs_countプラグイン改修。
ver.1.166
2022.05.10
添付ファイルのナンバリング方式を変更。添付ファイルの表示位置を簡易指定できるように修正。
ver.1.167
2022.05.19
選択メニューの表示をCSSで設定するように変更。
ver.1.168
2022.05.26
clendar、help、search_imageプラグインを改修。
ver.1.169
2022.06.07
CSSの記述ミスなどを修正。
ver.1.170
2022.07.13
カウンター処理修正。
ver.1.171
2022.08.14
アウトラインの表示を変更。
ver.1.172
2022.08.29
bbs_countプラグインを改修。
ver.1.173
2022.09.06
管理者画面でのinit.php編集処理を修正。
ver.1.174
2022.09.11
calendarプラグインを改修。
ver.1.175
2022.09.23
files、listup、pluginsプラグインを改修。
ver.1.176
2022.09.29
重複部分を整理。
ver.1.177
2022.10.04
bbsプラグインを改修。
ver.1.178
2022.10.05
アクセスカウンター処理修正。
ver.1.179
2022.10.07
access、calendar、diff、files、footnote、get_id、plugins、searchプラグイン修正。
ver.1.180
2022.10.09
comment、comment2プラグインに管理者用画面を追加。
ver.1.181
2022.10.11
cssファイルの構成を変更
ver.1.182
2022.10.15
スキンファイル編集機能追加
ver.1.183
2022.12.30
カテゴリーを指定した際、該当記事数が1ページの表示件数を超えても繰り越しリンクが表示されていなかったのを修正。
ver.1.184
2023.04.15
PHP8.2.4対応 term.php search_image.php bbs.php calendar.php修正
ver.1.185
2024.06.21
アクセスカウンター処理修正。bbs.php access.php修正
ver.1.186
2024.07.19
comment3プラグインのデータ保存先を修正。
ver.1.187
2024.07.21
bbsプラグインの添付ファイル処理を修正。
ver.1.188
2024.07.30
管理画面にブルートフォースログのリンクを追加。
ver.1.189
2024.08.20
管理画面で管理者用パスワード変更ができないバグを修正。
ver.1.190
2024.09.02
./lib/holiday.phpを更新。
function file_upload() とfunction thumb() を./lib/file_upload.phpに移動。
ver.1.191
2024.09.19
プラグインファイルを整理。
counter:14,930
Xampp 2021年04月14日 19:16   編集
ローカル環境のXamppをバージョン8.0.3に更新した。同梱されているPHPのバージョンも8.0.3。
ここで公開しているPHPプログラムではget_magic_quotes_gpcを使っているものがエラーが出て実行できなくなった。
代替の関数などはないが、新しいPHPでは必要ない関数なので、これを使った処理はすべて削除することにする。

imagecreatetruecolor関数もエラーが出て実行できない。
GDモジュールがデフォルトで読み込まれていないのが原因らしい。
phpinfo();
で調べてみると、確かにGDモジュールがなくなっている。
php.iniファイルで
;extension=gd
とコメントアウトされていたので、
extension=gd
に変更したらエラーは出なくなった。GDモジュールも読み込まれるようになった。

配列に{}を使っていたらcurly braces is no longer supportedとでて実行できなくなった。
配列は普通[]を使うが、{}を間違って使っていた部分もこれまでは配列と認められていたようだ。
counter:16,551
2021年04月12日 01:38   編集
new! PHP(19)

|< < 2024年10月 > >|
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31    
counter:31,622
Perl Xampp 2020年11月10日 12:06   編集
Xamppに同梱されているPerlはバージョンが古いので、ActivePerlの最新版に入れ替えていたが、ActivePerlよりさらに新しいバージョンが公開されているStrawberryPerlに入れ替えてみた。(現在ActivePerlの最新版は5.28だが、StrawberryPerlでは5.32が出ている。)

http://strawberryperl.com/から最新版のstrawberry-perl-5.32.0.1-64bit.msiをダウンロードする。インストール先を指定できるので、今まで使っていたC:\xampp\perlにインストールしてみたが、なんかうまくいかない(c:\usr\local\bin\perlがperl.exeのパスになるためには、C:\xampp\perlではなくC:\xamppにインストールすべきだったような感じ)。
結局C:\xampp\perlは元に戻して、デフォルトのインストール先C:\Strawberryにインストールすることにした。
続きを読む
counter:12,379
Perl 2020年10月15日 14:13   編集
いまさらだが、XamppのPerlをバージョン5.28にアップデートすると、いくつかエラーが発生するようになった。エラーログを見ると
Can't locate init.cgi in @INC (@INC contains: ./lib C:/usr/local/site/lib C:/usr/local/lib)
というようなエラーがあちこちで発生している。init.cgiが@INCの中に見つからないというエラーで、カレントディレクトリにあるモジュールの読込で発生している。確かに@INC contains ではカレントディレクトリは含まれていないようだ。
セキュリティの関係でバージョン5.26から@INCにカレントディレクトリが含まれないようになったらしい。
とりあえず動くようにするには
require 'init.cgi';
というような行でエラーが発生しているなら
require './init.cgi';
に変更して明示的にカレントディレクトリであることを表記して読み込むか、スクリプトの最初の方で@INCにカレントディレクトリを追加しておけばいいようだ。
@INCにカレントディレクトリを追加する方法としては
push(@INC,'.');
あるいは
use lib '.';
などがある。pushだと@INCの最後に、use lib だと先頭に'.'が追加される。
推奨されているのは
use FindBin;
use lib $FindBin::Bin;
これはFindBinモジュールを読み込んで、それによって利用できるようになるパッケージ変数$FindBin::Bin(実行スクリプトのあるディレクトリパス)を@INCに追加することになる。
これだと@INCの先頭に'C:/xampp/htdocs/local/test' のようなパスが追加されることになる。
counter:16,734
PHP 迷惑投稿対策 2020年03月25日 19:58   編集
Kent-Webのサポート掲示板で教えてもらったjQueryのslidelockというスパム対策機能を、この用語集作成PHPのbbsプラグインで使えるようにしてみました。→PHP/用語集作成
タイトル
投稿者
編集パスワード
コメント
添付
キーワード
  • Re:投稿者名 2020-03-25 20:03:02 MjI2YWEzM2  返信  編集
    >は太文字で表示するようにしました。
    投稿者を省略した場合、日にちとIPアドレスを元にした固有の文字列を表示するようにしました。
  • 投稿者名 2020-03-25 20:01:03 管理人  返信
    は太文字で表示するようにしました。
  • フォームを隠す 2020-03-23 11:32:49 管理人  返信  編集
    フォームを隠すオプションを追加しました。
    表示するかしないかの設定はクッキーに保存する仕様にしてみました。
  • 無題 2020-03-17 18:30:52 管理人  返信
    [[bbs('lock=1')]]と記述するとスライドが表示され、四角をスライドさせないと投稿ボタンが押せないしかけです。
counter:19,465
Xampp PHP 2019年11月16日 14:07   編集
いつのまにかXamppの64bit版がでていた。というか64bitに変更されたのかな。
同梱のPHPも64bitになっているようで、これで2038年問題も解消されたようだ。(PHPの時間ログについて参照) 32bit版ではエラーになっていた
$epoc_sec =  2147483648;
echo date("Y/m/d H:i:s",$epoc_sec);
も問題なく実行できる。
これはローカルだけの問題でWEBサーバーの方はとっくに64bitになっていたのかもしれない。ここのサーバーのPHPも64bitになっているようだ。
counter:20,818
PHP 2018年05月25日 16:37   編集
ローカルPCにインストールしているXamppをアップデートしてPHPのバージョンがPHP7.2.5になったらあちこちで警告が出るようになりました。

create_function()は非推奨

まず、create_function関数が非推奨になったためにその警告が出ます。
create_functionを使わず、ネイティブの無名関数を使ったほうがいいということです。具体的には
create_function( '$a,$b', 'return strlen( $b ) - strlen( $a );' )

function($a,$b) { return strlen( $b ) - strlen( $a ); }
に変えます。

each()も非推奨

このほかeach()関数も非推奨になっています。mpdfモジュールで
while(list($file,$info)=each($this->images)) {
という部分で警告が出ているので、
foreach ($this->images as $file=>$info) {
と変更すると警告は出なくなりました。

非配列に要素を追加すると警告

mpdfモジュール関係ではcssmgr.pdfで
if (!isset($attr['ID'])) { $attr['ID']=''; }
のような行でも警告が出るようになりました。
$attr['ID']がsetされてなかったら、''を代入するという処理です。$attrが未定義の場合も問題ないはずでなぜエラーになるかわかりませんでしたが、調べてみると$attrの型がstringになっている場合もあって、その状態で実行するとエラーになっているようです。エラーを回避するためにとりあえず上記の式の前に
if (isset($attr) && !is_array($attr)) { $attr = array(); }
を追加するとなんとかエラーが出なくなりました。

文字列の計算をすると警告

$tm1 = microtime();
$tm2 = microtime();
echo $tm1 - $tm2;
を実行すると警告が出るようになりました。microtime()は、現在の Unix タイムスタンプをマイクロ秒単位で返す関数ですが、デフォルトではfloatではなく、
'0.84479900 1527156353'
のような文字列を返しています。PHP7.1ではこの文字列のまま計算しても適当にfloatに変換してくれていましたが、7.2では警告が出るようになりました。microtime(True)を指定するとfloatを返しますが、小数点以下の桁数が減るので、文字列のままにした方がより精度の高いマイクロ秒が得られます。文字列は小数部分と整数部分をスペースで区切っているので、小数部分だけを抽出するために
list($tm1) = explode(' ',microtime());
list($tm2) = explode(' ',microtime());
echo $tm1 - $tm2;
のように変更すると警告は出なくなりました。

配列の追加

キーが数値の配列に追加する場合は
array_push('abc')
とするより
$array[] = 'abc';
の方が速いらしいということで、もっぱら下を使っていますが、追加する変数の型が配列になっていないとエラーが出るようになりました。たとえば
$array = '';
$array[] = 'abc';
はエラーになるので、$arrayの型がarray以外になっている可能性がある場合は、
unset($array)
あるいは
$array = array();
と初期化しておく必要があります。これは[]を使って配列を追加する場合だけでなく、配列型になっていない変数を配列として扱おうとすると、同じようなことが起こると思われます。

バージョン7.2では、型について厳格になったようです。別の型ということになっているのにその型ではできない処理をしようとしたら、前のバージョンではその処理が行える型に変更したりする部分もあったが7.2以降ではエラーや警告を出すということになっているようです。
counter:18,295