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にインストールすることにした。
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:2,940
Perl 2020年10月15日 14:13 編集
いまさらだが、XamppのPerlをバージョン5.28にアップデートすると、いくつかエラーが発生するようになった。エラーログを見ると
セキュリティの関係でバージョン5.26から@INCにカレントディレクトリが含まれないようになったらしい。
とりあえず動くようにするには
@INCにカレントディレクトリを追加する方法としては
推奨されているのは
これだと@INCの先頭に'C:/xampp/htdocs/local/test' のようなパスが追加されることになる。
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;これはFindBinモジュールを読み込んで、それによって利用できるようになるパッケージ変数$FindBin::Bin(実行スクリプトのあるディレクトリパス)を@INCに追加することになる。
use lib $FindBin::Bin;
これだと@INCの先頭に'C:/xampp/htdocs/local/test' のようなパスが追加されることになる。
counter:5,185
PHP 迷惑投稿対策 2020年03月25日 19:58 編集
Kent-Webのサポート掲示板で教えてもらったjQueryのslidelockというスパム対策機能を、この用語集作成PHPのbbsプラグインで使えるようにしてみました。→PHP/用語集作成
counter:10,651
Xampp PHP 2019年11月16日 14:07 編集
いつのまにかXamppの64bit版がでていた。というか64bitに変更されたのかな。
同梱のPHPも64bitになっているようで、これで2038年問題も解消されたようだ。(PHPの時間ログについて参照) 32bit版ではエラーになっていた
これはローカルだけの問題でWEBサーバーの方はとっくに64bitになっていたのかもしれない。ここのサーバーのPHPも64bitになっているようだ。
同梱のPHPも64bitになっているようで、これで2038年問題も解消されたようだ。(PHPの時間ログについて参照) 32bit版ではエラーになっていた
$epoc_sec = 2147483648;も問題なく実行できる。
echo date("Y/m/d H:i:s",$epoc_sec);
これはローカルだけの問題でWEBサーバーの方はとっくに64bitになっていたのかもしれない。ここのサーバーのPHPも64bitになっているようだ。
counter:4,427
PHP 2018年05月25日 16:37 編集
ローカルPCにインストールしているXamppをアップデートしてPHPのバージョンがPHP7.2.5になったらあちこちで警告が出るようになりました。
create_functionを使わず、ネイティブの無名関数を使ったほうがいいということです。具体的には
$attr['ID']がsetされてなかったら、''を代入するという処理です。$attrが未定義の場合も問題ないはずでなぜエラーになるかわかりませんでしたが、調べてみると$attrの型がstringになっている場合もあって、その状態で実行するとエラーになっているようです。エラーを回避するためにとりあえず上記の式の前に
'0.84479900 1527156353'
のような文字列を返しています。PHP7.1ではこの文字列のまま計算しても適当にfloatに変換してくれていましたが、7.2では警告が出るようになりました。microtime(True)を指定するとfloatを返しますが、小数点以下の桁数が減るので、文字列のままにした方がより精度の高いマイクロ秒が得られます。文字列は小数部分と整数部分をスペースで区切っているので、小数部分だけを抽出するために
バージョン7.2では、型について厳格になったようです。別の型ということになっているのにその型ではできない処理をしようとしたら、前のバージョンではその処理が行える型に変更したりする部分もあったが7.2以降ではエラーや警告を出すということになっているようです。
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();を実行すると警告が出るようになりました。microtime()は、現在の Unix タイムスタンプをマイクロ秒単位で返す関数ですが、デフォルトではfloatではなく、
$tm2 = microtime();
echo $tm1 - $tm2;
'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の型がarray以外になっている可能性がある場合は、
$array[] = 'abc';
unset($array)あるいは
$array = array();と初期化しておく必要があります。これは[]を使って配列を追加する場合だけでなく、配列型になっていない変数を配列として扱おうとすると、同じようなことが起こると思われます。
バージョン7.2では、型について厳格になったようです。別の型ということになっているのにその型ではできない処理をしようとしたら、前のバージョンではその処理が行える型に変更したりする部分もあったが7.2以降ではエラーや警告を出すということになっているようです。
counter:5,362
CGI 2018年03月01日 10:31 編集
時間単位での細かい予定を書き込み、グラフ表示する予定表です。バグなどありましたら、CGIサポート掲示板までお願いします。
スパム投稿対策を追加しました。(2018/01/25)
誰でも入力・閲覧できるが、編集・削除は入力者のみというモードを追加しました。(2017/03/29)
スパム投稿対策を追加しました。(2018/01/25)
誰でも入力・閲覧できるが、編集・削除は入力者のみというモードを追加しました。(2017/03/29)
counter:8,203
迷惑投稿対策 2017年05月22日 16:34 編集
掲示板に、また新しいタイプのスパムが来ているようだ。こちらも調査したい。
まだ投稿キーも搭載されていない頃のバージョンをベースに改造したものだったが、改造版投稿キーに入れ替えていたので、そこそこスパムはブロックできていたようだ。オリジナルのClipboardの最新版に更新した上で、URLを引き継ぐためにディレクトリ名とcgiのファイル名は以前のclip/clip.cgiに戻した。改造版の方もとりあえずディレクトリ名を変更して残しておくことにする。
掲示板(YY-BOARD)と同様に、ひらがなチェック、投稿IDチェック、ダミーフィールド処理を追加し、どの処理が有効かログを残すことにする。
掲示板2の方はアクセスが少ないが、投稿IDを送ってこないというタイプのスパムがいるようだ。これは初めてのケースだ。投稿キーはクリアし、スタイル指定で隠したダミーフォールドの値は送ってきているのに、hiddenを指定したinputタグに気づかないのも不思議だが、単純にオリジナル掲示板CGIで送られるはずの値を送っているだけかもしれない。
いずれにしても、新しいタイプではなく、むしろ古いタイプのスパムのようだ。投稿IDを送ってこないので、時間を計測する必要も無く、その時点で拒否するだけで済むので対策は簡単だ。
と思っていたら、掲示板の設定ミスで投稿IDがフォームにセットされていなかったことが判明^^;
ひらがなチェックや投稿キー、ダミーフィールドにも引っかからず、投稿IDだけで拒否していたスパムもあるようなので、気になる。ダミーフィールドに引っかからないということは、HTMLを見ていないという可能性も残っているが。
それと、フォームにアクセスせず、いきなり投稿してくるタイプがあることも拒否ログを見てわかった。
こちらの掲示板はスパム投稿の頻度は低いが、たまに来るものの中に投稿ID、ダミーフィールドどちらも突破してくるスパムがある。やはりJavaScriptを使わざるを得ないか。
Clip Board改造版のサンプルとして設置しているまだ投稿キーも搭載されていない頃のバージョンをベースに改造したものだったが、改造版投稿キーに入れ替えていたので、そこそこスパムはブロックできていたようだ。オリジナルのClipboardの最新版に更新した上で、URLを引き継ぐためにディレクトリ名とcgiのファイル名は以前のclip/clip.cgiに戻した。改造版の方もとりあえずディレクトリ名を変更して残しておくことにする。
掲示板(YY-BOARD)と同様に、ひらがなチェック、投稿IDチェック、ダミーフィールド処理を追加し、どの処理が有効かログを残すことにする。
と思っていたら、掲示板の設定ミスで投稿IDがフォームにセットされていなかったことが判明^^;
ひらがなチェックや投稿キー、ダミーフィールドにも引っかからず、投稿IDだけで拒否していたスパムもあるようなので、気になる。ダミーフィールドに引っかからないということは、HTMLを見ていないという可能性も残っているが。
それと、フォームにアクセスせず、いきなり投稿してくるタイプがあることも拒否ログを見てわかった。
こちらの掲示板はスパム投稿の頻度は低いが、たまに来るものの中に投稿ID、ダミーフィールドどちらも突破してくるスパムがある。やはりJavaScriptを使わざるを得ないか。
counter:6,855
迷惑投稿対策 2017年03月24日 20:53 編集
- スパム対策研究用掲示板
- 拒否したログ一覧
- アクセスの解析 2024-05-10 08:11:54更新
リンク元 ユーザーエージェント
スパム投稿の動向を分析するためで環境変数でリンク元やユーザーエージェントをログに残してみたが、こうした情報もスパムかどうか判定するヒントになるかもしれない。リンク元はPerlの場合、環境変数$ENV{'HTTP_REFERER'}で得られる。たとえばこのページのリンクから掲示板にアクセスしたら
http://shade-search.com/sts/term/term.phpがHTTP_REFERERになる。いったん掲示板を開いて掲示板の他のページから移動した場合は掲示板CGIのURL たとえば
http://shade-search.com/sts/fsw/yybbs/yybbs.cgi?type=2のようなものになるはずだ。
counter:9,337
迷惑投稿対策 2017年03月03日 21:03 編集
掲示板の迷惑投稿を防ぐ方法としては、ロボットではなく人が投稿していることを確かめるため、ロボットには読めないはずの画像による文字を読ませて入力させたり、複数の画像から質問に該当するものを選択させたり、掲示板に投稿する利用者に一手間かけさせるものが多い。
ここでは、なるべくユーザーに余計な手間をかけさせず、スパムを防止する有効な方法がないものか考えていきたいと思う。
しかし、最近これに投稿までの時間を計測して、あまりに早いものはスパムとして判断してブロックするという対策がどこかで紹介されていた。
ここでは、なるべくユーザーに余計な手間をかけさせず、スパムを防止する有効な方法がないものか考えていきたいと思う。
投稿ID方式
フォームに隠しパラメータを仕込んでおいて、その値を送ってこない投稿は不正投稿としてブロックするという対策法は昔からある。しかしフォームのhtmlを解析しているのか、正しい隠しパラメータを送信してブロックを回避するスパム投稿は多いので、これだけではあまり効果のある対策とはいえない。フォーム表示のたびにランダムな値に変更しても同様だ。しかし、最近これに投稿までの時間を計測して、あまりに早いものはスパムとして判断してブロックするという対策がどこかで紹介されていた。
counter:9,303
- Re: 予定を選択後にカラー連動について 2012/08/12 04:23 管理人 返信
ポップアップ非表示は変更場所が複数になると思うので、ヒントだけ。
※schedule.cgi内を「memo.gif」で検索する。(ポップアップする部分はmemoアイコンを表示しているので、手っ取り早く表示箇所を探すため)
※memo.gifを表示しているimgタグ内にalt=やtitile=部分があったら、それがポップアップ表示なので、ユーザー画面表示の場合は表示しないよう分岐させる。条件は
if ($permission == 1 && &decrypt($c_pass, $pass) ne 'yes') {
alt,title表示させない
} else {
alt,title表示
}
2点目のグラフ修正の際のカラー自動設定が出来ないとはどういうことでしょうか。
ユーザー画面表示の場合は編集できないので、グラフ修正そのものが出来なくなりますが、編集可能な管理者モードでは通常通り自動設定を選べると思うのですが。
ちなみに予定の色の自動設定は新規予定追加の場合のみで、既存の予定を編集する場合はもともと自動設定は選択できません。
- Re: 予定を選択後にカラー連動について 2012/08/06 16:42 mono 返信 編集
ご返答ありがとうございます。
非表示にできました!
またまたご質問ですが、1点目は、ユーザ画面の際、メモ等入力しているグラフ情報のマウスを合わせるとポップアップ画面でメモ内容なども表示されてしまうので、その表示をなくす方法と 2点目グラフを修正する際、カラーの自動設定が出来なくなるので、そちらも可能にすることはできるでしょうか??
何度も何度もご質問を重ねまして申し訳ございません。
宜しくお願い致します。
- Re: 予定を選択後にカラー連動について 2012/08/05 10:43 管理人 返信
>でももうひとつご提案がございまして、もしメモ欄はユーザーには非表示、管理者のみがログインしたときに表示というのは可能でしょうか??
>ただ中身の表示内容のソースコードを削除すればいいのかなとか思いますが、念のためにお尋ね致します。
ユーザーにメモを非表示にするなら、おっしゃるとおり、その表示部分を削除するかコメントアウトすればいいと思います。
1651行目の
print qq(<tr><td>メモ</td><td>$me</td></tr>\n) if $cmt;
を削除するか、
#print qq(<tr><td>メモ</td><td>$me</td></tr>\n) if $cmt;
に変更することになります。
- Re: 予定を選択後にカラー連動について 2012/08/04 02:53 mono 返信
私の希望にあった改修版もアップありがとうございました!
大変満足しています!
でももうひとつご提案がございまして、もしメモ欄はユーザーには非表示、管理者のみがログインしたときに表示というのは可能でしょうか??
ただ中身の表示内容のソースコードを削除すればいいのかなとか思いますが、念のためにお尋ね致します。
いろいろとお手数をお掛け致しまして、大変申し訳ございません。
- Re: 予定を選択後にカラー連動について 2012/08/01 19:33 管理人 返信
改修版をアップしました。
一度登録した予定は選択リストから選ぶことができるようにしました。
テキストフォームにも入力があった場合はそちらを優先します。
編集権限を「管理者のみ可」にした場合、管理者以外には入力フォームを出さないようにしました。
管理者とそれ以外の識別はクッキーを使い、クッキーに保存されているパスワードが管理者パスワードの場合はフォームを表示し、そうでない場合は登録内容を表示するだけにしました。
↓「管理者のみ編集可」モード。管理者パスワードはguestです。
http://shade-search.com/sts/fsw/schedule_test/schedule.cgi
- Re: 予定を選択後にカラー連動について 2012/07/31 09:55 mono 返信 編集
パージョンアップの内容すばらしいですね!
たのしみです!
ってできれば表示のほうを早めにアップしただけたら、大変嬉しいです(^^;)
自分勝手なお願いをしてすみません。
あともし先日送って頂いたサンプルページを活用する際、ソース表示から引用すればいいのでしょうか??
初心者ですませんが、そのあたりも教えて頂けたら助かります☆
では宜しくお願い致します。
- Re: 予定を選択後にカラー連動について 2012/07/31 09:47 mono 返信 編集
管理人様、昨日返答した内容があいまいで申し訳ございませんでした。
カラー選択については、サンプルでみせて頂いた内容のページのものを求めていました!
ありがとうございます!
- Re: 予定を選択後にカラー連動について 2012/07/31 09:46 管理人 返信
>2点目は難しいみたいですよね。
これは管理者のみ入力可の設定の場合の動作だと思いますが、
それほど難しくもなさそうでした(^^)
考えてみれば、monoさんのいわれるような表示にした方が自然ですね。
次のバージョンアップで反映させたいと思います。
あわせて予定名セレクトですが、従来の入力方法も維持できるフォームとして、
新規の予定はテキストフォームで入力し、一度登録済みの予定は選択フォームから選べるようにしようかなと考えています。
選択フォームの項目編集はさらに別ウインドウで並び替えなどできるようにするかもしれません。
カラー選択は予定のタイプによる色選択方式に変更したままになっていたようなので、予定タイプを指定していない色も選択できるようにもどせば問題ないと思います。
- Re: 予定を選択後にカラー連動について 2012/07/30 19:36 mono 返信 編集
ご返答遅くなり、申し訳ございません。
アドバイスありがとうございました!
2点目は難しいみたいですよね。できれば一般ユーザーがリンクをクリックした際に。予定と時間のみの表示したいと考えてまして、私自身も色々と試してみます。
本当に助かりました。
- Re: 予定を選択後にカラー連動について 2012/07/29 03:22 管理人 返信
ちょっと簡単に変更できるような改造ではないと思いますが、
予定や色を選択ボックスで選ぶようにするのは、以前ためしに作ったことがあります。
http://shade-search.com/sts/fsw/schedule_test/schedule.cgi
↑こんな感じでしょうか。
- 予定を選択後にカラー連動について 2012/07/28 03:05 mono 返信 編集
はじめまして。とても素晴らしいCGIご提供ありがとうございます。
数点こちらの希望通りにご変更出来るがご確認したく、この度こちらに書かせていただきました。
1点目が、予定名をセレクトで選択するようにし、同時にカラーも選択できるようにすること、2点目は入力された予定をクリックした際、一般ユーザーには内容のみ表示、管理者は編集画面の表示と分けることができるでしょうか??
CGI初心者のため、ご教授えい頂ければとても助かります。
では宜しくお願い致します。
- Re: マルチアップローダー 管理者設定までしか進みません 2012/05/28 19:40 管理人 返信
ちょっと調べてみましたが、さくらインターネットでは.htaccessファイルのOptionsが使えないようです。
multiuploadでは、ディレクトリ内のファイル名がブラウザで一覧表示されるのを避けるために、
.htaccessを使用する設定で、multiuploadディレクトリ内に.htaccessが存在しない場合、自動的に
Options -Indexes
と記述した.htaccessファイルを作成するようになっています。
ところがさくらインターネットではOptionsが使えないためにエラーになってしまっているようです。
対策としては、.htaccessに同様の効果のある
DirectoryIndex index.html
を記述し、上書きしてください。
これは、URLにmultiupload/を指定した場合、ディレクトリ一覧ではなくindex.htmlを表示するという設定です。
multiuploadディレクトリ内にはindex.htmlがあるので、この指定でもOKです。
ちなみに、Options -Indexes だと、index.htmlがある場合はindex.htmlが表示され、
ない場合はエラーになります。
.htaccessによるアクセス制限を無効に設定されたということですが、
そうすると、アップロードディレクトリへの直接アクセスの制限も無効になってしまうので、
せっかく.htaccessの使えるサーバーなら有効にしておいた方がより安全だと思います。
- Re: マルチアップローダー 管理者設定までしか進みません 2012/05/25 19:51 くぼ 返信 編集
.htaccessを一回一回削除しながら、スクリプトの設定まで行き着き、.htaccessでアクセス制限しないの設定をしたところ、問題なく動くようになりました。
とりあえず、これで良いのかなと思っております。
ありがとうございましたm(_ _)m
- Re: マルチアップローダー 管理者設定までしか進みません 2012/05/25 19:33 くぼ 返信 編集
さっそくのお返事どうもありがとうございます。
>.htaccessがらみの問題かもしれませんね。
>multiuploadディレクトリ内の.htaccessを一度削除してみたらどうなるでしょう。
どうもそのようです。
.htaccessを削除すると、次へ進みます。が、.htaccessがまた作成されているために、その次で、Internal Server Errorが出るという感じです。
そして、.htaccessを削除するとやはり進むといった感じです。
- Re: マルチアップローダー 管理者設定までしか進みません 2012/05/25 19:11 管理人 返信
ヘルプはhtmlファイルを表示しているだけなのに、Internal Server Errorが出るということは、.htaccessがらみの問題かもしれませんね。multiuploadディレクトリ内の.htaccessを一度削除してみたらどうなるでしょう。
- マルチアップローダー 管理者設定までしか進みません 2012/05/25 11:57 くぼ 返信 編集
さくらインターネットに設置しようとしております。
まず最初に、ブラウザからcgiにアクセスし、管理者パスワードを入力し、次の「管理者設定」というところまでは進むのですが、[スクリプトの設定]、[ディレクトリ管理]、[ファイル管理]、[管理者パスワード変更]、ヘルプすら「Internal Server Error」がでてしまって進みません。
何が問題なのでしょうか。
お教えいただければ、幸いです。
- Re: アップローダの戻り先設定 2012/05/03 13:50 matsu 返信 編集
只今、ver.1.941へのverアップ完了しました。
ほんとに素早い対応!ありがとうございます。
- Re: アップローダの戻り先設定 2012/05/02 20:55 matsu 返信 編集
早速のご返答ありがとうございます。(^^)
緊急性は低いのですが、
時間が許すようであれば是非お願いします。m(__)m
- Re: アップローダの戻り先設定 2012/04/29 04:17 管理人 返信
マルチアップローダへのリンクは新たなウインドウで開くことを想定していたのですが、
移動する場合は戻る機能があった方がいいかもしれませんね。
マルチアップローダ使用後に設置元URLに戻るには、history.backではなく、そのURLを設定する必要がありますね。次のバージョンで設定できるようにします。
- アップローダの戻り先設定 2012/04/27 13:32 matsu 返信 編集
HPにマルチアップローダを設定させて頂いている”matsu”です。
大変有用に使わせて頂いているのですが、一つ不便に感じる点があります。
それは、マルチアップローダから設定元URLに戻る機能が無い?ことです。
でき得ることなら、ログイン画面に設置元URLへの「戻り」ボタンなどがあれば解消するのですが・・
ご検討のほどよろしくお願いします。
counter:21,572