PHP 2016年08月22日 12:20   編集

ソート

  • 連想配列の値でソート
asort($array); // 昇順
arsort($array); // 降順
  • 連想配列のキーでソート
ksort($array); // 昇順
krsort($array); // 降順
  • シュウォーツ変換風ソート
perlで
my @keys = (keys %count);
@keys = map {$_->[0]} sort {$a->[3] <=> $b->[3]} map {[$_, split /_/]} @keys;
phpだと、前準備が必要だが
$keys = array_keys($counts);
$sort = array();
foreach ($keys as $i) {
$tmp = explode('_',$i);
$sort []= $tmp[3];
}
array_multisort($sort,SORT_ASC,SORT_NUMERIC,$keys);
のような感じ

サクラエディタでphpに変換

pp(****) → "****"
qq\((.+?)\)
"$1"
ハッシュを連想配列に変更
$hash{'***'} → $hash['***']
(\$[^$!(){]+?)\{(.+?)\}
$1[$2]
文字列中の配列の表記を変更
mode=$in['graph_mode']&amp; → mode=" . $in['graph_mode'] . "&amp;
=(\$in\[.+?\])
=" . $1 . "
正規表現の表記を変更
$str =~ /$ptn/ → preg_match('/$ptn/',$str)
(\$.+) =~ (\/.+\/)
preg_match('$2',$1)
counter:4,552
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:4,482
PHP Perl 2016年12月21日 14:36   編集
perlで書いていたCGIを、PHPしか動かないサーバーで使う必要に迫られ、PHPに書き換えた。その際の注意すべき点をまとめた。

変数

perlの場合は、変数のタイプによって頭につける文字が違う。スカラー変数は$、配列は@、ハッシュは%というように。一方PHPの場合は、すべて$をつけることになるので、一見しただけでは変数に何が保存されているのかわかりにくいという問題がある。
また、perlでは、変数のタイプが違うと、同じ名前をつけることができる。たとえば、$data@data%dataを同時に別の変数として扱える。PHPではこれはできないので、perlからPHPへの移行の際には、まずこれに注意が必要だ。
続きを読む
counter:6,565
CGI Perl 2017年02月08日 13:13   編集
perlのバージョンが新しくなったらCGIが動かなくなったという書き込みがサポート掲示板にあった。
Perl5.24ということだが、ローカルでCGIのテストに使っているXamppは最新版でもPerlのバージョンはは5.16なので、5.24での動作が確認できない。

Perlを5.24にアップデート

単体ではWindows用ActivePerlの5.24が公開されている。
Xamppの環境でこのActivePerlが使えるのかわからないが、取りあえずインストールしてみる。
XamppでPerlがインストールされているC:\xampp\perlに直接インストールしたいところだが、ダウンロードしたActivePerlのインストーラーはインストール先を変更できないようだ(それとも見落としたか?)
また、64bit版のインストーラーを使ったので、C:\Perl64というフォルダにインストールされてしまう。
取りあえずこれをXamppでインストールされたC:\xampp\perlフォルダにコピーすることにする。C:\xampp\perlは別名に変更してバックアップしておき、C:\Perl64の中身をすべてC:\xampp\perlにコピーしてみた。
これだけでうまくいくはずないよなと思ってCGIを実行してみると、あっさりと動いてしまって拍子抜けした。
続きを読む
counter:11,968
Shade 2012年12月16日 20:13   編集
投稿者
コメント
counter:4,671
PHP Shade 2021年06月19日 02:29   編集
Shadeプラグイン・スクリプト検索もレスポンシブ対応にしようかなと思って、久しぶりにCGIファイルを見てみたら、いろいろ他にも気になる部分が目について、結局ゼロからPHPで書き直すことにした。ちょこちょこ修正しているとはいえ、元はなんせ20年も前に書いたものだからなー。

スムーズに移行できるようログは旧CGIで作成したものをそのまま流用するつもりだったが、データを1個のファイルにすべて保存する形式にしていたのがどうも気になる。ダウンロードカウントもこのファイルに書き込む方式だったので、アクセスがあるたびにデータファイルを書き換える処理をしていたことになる。最初のころしょっちゅうログファイルが壊れていたのはこれが原因だったのかもしれない。
さすがにこれはないだろうと、まず新しいPHPプログラムでアクセスすると旧データファイルを扱いやすいデータ形式に書き換えることにする。登録内容1件ごとにファイルを作成することにして、ダウンロードは別ファイルでカウントすることにする。新方式のデータファイルを作成したら旧データファイルにはアクセスしないことにした。
続きを読む
counter:2,161
2021年04月12日 01:38   編集

|< < 2024年4月 > >|
  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        
counter:5,132
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:3,749
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:3,456
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:2,114