探検


【待望】PerlユーザのためのPHP入門

1俺様
垢版 |
03/02/27 15:17ID:tJsRCtRD
見事Perl→PHPへの脱皮に成功した俺様が
両者の違いを中心に講義してやる。
今までPerlマンセーだったやつはこれを機にPHPに変更しよう也。
質問もガンガン書いてくれ。
このPerlの文はPHPだとどう書くの?とか。
263俺様
垢版 |
03/03/19 23:51ID:???
>>262
何の話題がいい?
語るべきことは大体語っちゃったから
もう全てのPerlスクリプトを移植できるはずだ。
264nobodyさん
垢版 |
03/03/20 01:11ID:???
実践編が欲しいな。

なんかのコピペジェネレータを作るとか。

てかフォームを表示して受け取ってとかやってるとすんげー
HTMLとPHPのコードが入り乱れて汚くなっちゃうんだけど、どうすりゃいいの?
265nobodyさん
垢版 |
03/03/20 15:43ID:???
上でデータを作って下で表示させりゃいい。
<?

//極手抜き
$hoge = $_POST["hoge"];

?>
<HTML>
<H1><? print $hoge; ?></H1>
</HTML>

とか。
266nobodyさん
垢版 |
03/03/20 16:41ID:???
俺様殿江。ファイルとディレクトリの扱い方について解説して下さい。
267nobodyさん
垢版 |
03/03/20 16:59ID:???
Perl の Taint モードみたいのって、PHP にありますか?
268nobodyさん
垢版 |
03/03/20 19:10ID:???
Perlのexitや__END__みたいなヤシはありますか?
269nobodyさん
垢版 |
03/03/20 19:39ID:???
$fh = @fopen($file,"w");
の@はperlの何に相当するんですか?単にfopenじゃイクナイの?
270nobodyさん
垢版 |
03/03/20 20:28ID:???
>>269
@をつけると、エラー出力を抑止する。
つけなくてもいいけど、その場合はfopenに失敗したときにエラーがブラウザに返される。
271nobodyさん
垢版 |
03/03/20 21:50ID:???
>>270
ありがd。
それじゃ代わりにperlみたいに
$fh = fopen($file,"w") or die("しぼんぬ");
ってやってもイイのかな。
272nobodyさん
垢版 |
03/03/20 22:09ID:???
>>271
いやだからそーすると、しぼんぬの前にエラーメッセージが出てしまう。

$fh = @foepn($file, "w");
if(!$fh){
 die("しぼんぬ");
}
273nobodyさん
垢版 |
03/03/20 22:15ID:???
>>272
なるほど。ありがdd
274nobodyさん
垢版 |
03/03/21 01:11ID:???
>>268
exitはexit()
__END__や__DATA__はないんじゃないかな
275nobodyさん
垢版 |
03/03/21 19:33ID:???
>>274
さんくす
276nobodyさん
垢版 |
03/03/25 14:18ID:CVcoKJbJ
メモ。

$a = $b || $c;

perl では、$b が false の場合は $c が $a に代入される。
php の場合は、 $a には $b || $c の bool値(0 or 1)が入る。
277nobodyさん
垢版 |
03/03/25 16:37ID:???
>>276
それJavaScriptでもできたなぁ。
278nobodyさん
垢版 |
03/03/26 06:38ID:l1CVp/e0
ISPによっては、PEARとかの拡張モジュールが入ってない
ところがあるだろうけど、自分で使えるように拡張できるの
ですか?
例えばPerlでいえば、モジュールを自分のディレクトリに入れ
ておけばいいけど、そーゆーことはPHPでできますか?
279nobodyさん
垢版 |
03/03/26 09:07ID:???
>>277
ホントだ。
$foo ||= 'bar'; とか…は流石に無理かな。
ちなみに、python でも or を使って同様のことが出来ました。

>>278
出来るよ。ただし、共有のサーバーにインストールする場合は、
いままで自分のHOMEのライブラリを読んでいたのが、
ISPがPEARをインストールして突然ライブラリのバージョンが変わったりとか
…ありそうな話なので気をつけて。
280nobodyさん
垢版 |
03/03/27 05:59ID:p+/0Vcby
>>279
できるのですか。
PHPは、PHP.INIにいろいろな基本設定を書いたりするようなので、
通常ISPでCGIやると、それを編集するのは許されないだろうから
無理だとおもっていました。

PHP.INI に記述された設定は、スクリプト内で変更できるのですか?
281nobodyさん
垢版 |
03/03/27 08:34ID:illH7cXT
> PHP.INI に記述された設定は、スクリプト内で変更できるのですか?
ini_set -- 設定オプションの値を設定する
string ini_set ( string varname, string newvalue)
だけど、全ての設定が変更可能ではなく、pathの設定とかは確か無理だったかな。

include_pathの設定は、カレント・ディレクトリに
<?php require_once '/full/path/of/PEAR.php'; ?>
とか、リンクを PEAR.phpと言う名前で置くことで対応。
282nobodyさん
垢版 |
03/03/27 10:50ID:???
Perl の
$ perl -wcT hoge.pl
に相当する PHP の簡単な文法チェック方法って無い?
283nobodyさん
垢版 |
03/03/27 11:08ID:???
質問です。

例えば名前とトリップを分離する場合、Perl なら
if ($FROM =~ /(.*)(\#\S+)/) {
  $name = $1;
  $trip = $2;
}
と、$1, $2 使って楽できるんだけど、
PHP で↑の $1, $2 みたいなモノに相当するのって何ですか?
284nobodyさん
垢版 |
03/03/27 11:16ID:???
>>283
PerlならsplitにLIMITを指定して使い、分割すると思うが・・・・
PHPでもsplitでしょ。
285nobodyさん
垢版 |
03/03/27 11:21ID:???
>>284
あー例が悪かったですね。丁度身近にあったので出しちゃいました。
要はマッチした部分を簡単に再利用できないか?という質問です。
つまり、Perl の $1, $2 に相当するモノって何だろう、ということです。
286nobodyさん
垢版 |
03/03/27 11:25ID:???
\\1,\\2
287nobodyさん
垢版 |
03/03/27 12:02ID:???
>>286
\\1, \\2 ってどう使うのでしょう?
マッチングの後に、print \\1; とかやったらエラーになりました…。

再度、google 様に問い合わせたら、
if (ereg("(.*)(\#[^ \t\n\r\f]+)", $FROM, $regs)) {
  $name = $regs[1];
  $trip = $regs[2];
}
でいいみたいですね。調査が甘くてすみません。
288nobodyさん
垢版 |
03/03/27 12:52ID:???
自己レスです。
\\1, \\2 は
$url = ereg_replace("(http://ime.nu/)(.*)", "http://\\2", $url);
こうでしたか。
レスありがとうございました。>>286
289nobodyさん
垢版 |
03/03/27 14:34ID:???
magic quotes gpc なるヤツでここしばらく悩んでた。
勝手にエスケープされるなんて、まるで想像もつかなかった。
Perl → PHP への道、俺にとってはかなり遠い。でもガンガルsage

ところで tr/ab/cd/ って PHP ではどーやんの?
290イ奄様
垢版 |
03/03/27 16:23ID:???
>>289
$hoge=strtr($hoge, "ab", "cd");
291nobodyさん
垢版 |
03/03/27 16:32ID:???
>>290
サンクスコ!!
292nobodyさん
垢版 |
03/03/28 04:03ID:???
俺様ありがd

C/C++とPerlとVBとPascalとASM位しか知らなかったのだが、
よーやくPHPに手が伸びそうでつ。
293nobodyさん
垢版 |
03/03/28 06:56ID:NA3CJ6rA
>>281
教えていただき、ありがとう。

システム側で設定したPHP動作設定値を変えられないとなると、
ISPで利用する場合、大きな壁になりそうですね。

例えばアップロードファイルのサイズは2Mまでだから、それを超え
るものをアップさせる仕様に対応できない。
PHPでWebアプリ組んでも、いつかはユーザ要件に対応できずに全部
Perl等に書き直す時が来るかも、ということでしょうか?
294nobodyさん
垢版 |
03/03/28 08:06ID:56FSUIhD
>>293
>>293
WEB用途にPHPを使うなら、.htaccessでphp.iniの設定を上書きする方法があります。
アップロードサイズの制限を変更するには、
upload_max_filesize と post_max_size の値を上げることで対応出来るかな。

PEAR のインストールは、多分 include_path に PEAR のpathを追加するだけでOKだと思う。
295nobodyさん
垢版 |
03/03/28 18:00ID:56FSUIhD
既出だけど、三項演算子のネストではまった事あったのでそのときの教訓。
Perl と PHP では、演算子の優先順位に結構違いがあるので
一度目を通しておこう。

$r =
 ($foo < $bar) ? "LESS" :
 ($foo > $bar) ? "GREATER" :
 "EQUAL";
296nobodyさん
垢版 |
03/03/28 18:49ID:56FSUIhD
>> 282
php -l script.php

-w は、error_reporting(E_ALL); に相当?(かな?)
Taint モードについては、私も前に探したことあるけどPHPには見つけられなかった。
汚染チェックは、自主的にそういう習慣を身につけるしかないのかな。
297nobodyさん
垢版 |
03/03/28 19:00ID:???
@sortdata = sort { (split(/\,/,$a))[2] <=> (split(/\,/,$b))[2] } @hogehoge;
Perlでいう↑みたいなことはPHPではどうやればできますか?
298nobodyさん
垢版 |
03/03/28 19:19ID:???
>>296
おぉ、回答ありがとう。
299nobodyさん
垢版 |
03/03/28 20:35ID:/IEo7+Sn


      ∧_∧          _ _     .'  , .. .  ∧_∧
     ( ´_ゝ`)   _ .- ― .= ̄  ̄`:, .∴ '     ( >>297
    /     '' ̄      __――=', ・,‘ r⌒> _/ /
   / /\   / ̄\-―  ̄ ̄   ̄"'" .   ’ | y'⌒  ⌒i
 _| ̄ ̄ \ /  ヽ \_              |  /  ノ |
 \ ̄ ̄ ̄ ̄ ̄ ̄ \__)              , ー'  /´ヾ_ノ
  ||\            \          / ,  ノ
  ||\|| ̄ ̄ ̄ ̄ ̄ ̄ ̄|| ̄          / / /
  ||  || ̄ ̄ ̄ ̄ ̄ ̄ ̄||          / / ,'
  ||  ||              ||        /  /|  |
                       !、_/ /   〉
                           |_/

300nobodyさん
垢版 |
03/03/29 13:38ID:CQcFf7wk
>>294
回答ありがとう。
301nobodyさん
垢版 |
03/03/29 18:28ID:???
%hash = map { $_ => 1 } @list;
とか、
@hash{@list} = (1) x @list;
Perlでいう↑みたいなことはPHPではどうやればできますか?
302phpformperl
垢版 |
03/03/29 20:26ID:kc16+nkl
手本になるようなきれいなPHPコードどれかしってまっか?
やっぱxoopsでっか?
303nobodyさん
垢版 |
03/03/29 22:26ID:???
>>302
XOOPSを積極的に弄っている身としては残念なことだが、
決してきれいなコードではないし、流れを追うのも面倒。
過去のしがらみとかあるので大きく変えられないことや、
複数人で作っているが、細かい部分で明確な規定がある訳ではないので
コア、標準モジュール、果ては標準外の勝手モジュールまで入れると
コードの統一はされていないと思っていい。
フレームワークとしては非常に緩いのでモジュールのコードまで
含めるのは本来フェアではないのだが。

あとJpGraphもコードはちょっとね。便利に使わしてもらってますけど。
304phpfromperl
垢版 |
03/03/30 13:14ID:fNA6Ajxw
>>303
サンクス
とりあえず手本にさせてもらいます。
いろいろ仕掛けをつけやすそうだし。
ほかよりましなようなので。
305nobodyさん
垢版 |
03/03/30 21:07ID:???
sub test {
 my $num = 0;

 return sub {
  $num += shift if @_ == 1;
  return $num;
 }
}
Perlでいう↑みたいなことはPHPではどうやればできますか?
306nobodyさん
垢版 |
03/03/31 00:21ID:???
>297,301,305
PHPでFP(関数プログラミング)でもやりたいのかな?

lambda 代わりに create_function,
array_(map|reduce|filter) 後、array_walk, usort。
で、大体御希望の事は出来ると思います。

ただし、…前にも書いたけど &&, || が倫理値を返したり、
…かといって三項演算子を使おうとすると今度は演算子の優先順位が違ったり、
他にも変数のスコープ等、細かな違いがいろいろ有るので、
PHPでのFPはあまりお勧めしない。素直にパラダイムシフトした方が良いと思う。

例えば >305 だと、

function test(){
 $num=0;
return create_function('$x','global $num;$num+=$x;return $num;');
}

$num がグローバルに置かれるので、これでは要件を満たせていない。
カプセル化したいのなら、クラスを作る。

class Test{
 var $num;
 function Test(){ $this->num = 0; }
 function add($n){ $this->num += $n; }
 function getNum(){ return $this->num; }
}
307nobodyさん
垢版 |
03/03/31 00:21ID:D273gBu9
# 突っ込まれるかもしれないので、一応補足。
現行のバージョンのPHPでは、すべてpublicメンバになるので、
$numへ直接アクセスすることが可能。(Perlのオブジェクトでも同様だよね)
現状(PHP4)では、完全に隠蔽することは出来ない。…はず。(PHP暦浅いので自信なし。フォロー求)

# http://www.php.net/ZEND_CHANGES.txt を読んだところ、
# zend2 engine/PHP5? では private が使えるらしい。
308名無しさん@Emacs
垢版 |
03/03/31 17:22ID:mhlggPCn
perldoc モジュール名、perldoc -f 関数名に該当する PHP のやり方って
なんでしょうか?
309nobodyさん
垢版 |
03/03/31 18:46ID:???
php.netで検索する。
310nobodyさん
垢版 |
03/04/01 02:03ID:???
ブラウザのアドレス欄に
php.net/関数名
pear.php.net/モジュール名
311nobodyさん
垢版 |
03/04/01 18:35ID:???
倫理値w
312nobodyさん
垢版 |
03/04/01 19:21ID:???
ぷりぃず、晒さないでw
訂正 s/イ/言/
313nobodyさん <>
垢版 |
03/04/01 20:18ID:iGZ3zwAc
>310

ローカルには作れんもんでしょうか?
ADSL でも結果が出るまでの "待ち" が気になるの。
314生徒1
垢版 |
03/04/01 23:58ID:2arYjAuZ
foreach (@pairs) {
($name,$value) = split(/=/);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
&jcode'convert(*value, "sjis", "", "z");
$value =~ s/&/&/g;
$value =~ s/</</g;
$value =~ s/>/>/g;
$value =~ s/"/"/g;
$value =~ s/\r\n/<br>/g;
$value =~ s/\r/<br>/g;
$value =~ s/\n/<br>/g;
$in{$name} = $value;
}

こんなのはどうやってますか?
315nobodyさん
垢版 |
03/04/02 01:58ID:???
>>314
ネタ?
316nobodyさん
垢版 |
03/04/03 16:31ID:???
> 倫理値w
右か左を返すんだよ
317nobodyさん
垢版 |
03/04/08 14:23ID:???
PHPってx演算子ないの?
print "-" x 10;
みたいな
318nobodyさん
垢版 |
03/04/08 15:41ID:???
str_repeat()が近いよ。
319nobodyさん
垢版 |
03/04/08 22:26ID:???
perl にあって PHP にないもの。
PHP にあって perl にないもの。

…って何かないかな?
320nobodyさん
垢版 |
03/04/11 00:44ID:fBEofA1c
年寄りデザでつが,これから極めるのならPerlとPHPどっちでつか?
ただPerlと違い,初心者向けの本がPHPにないところが痛いでつが。
321nobodyさん
垢版 |
03/04/11 00:47ID:???
でつ厨にはどちらも無理でつ
322nobodyさん
垢版 |
03/04/11 03:50ID:???
”極める”のなら、Perlの方が面白い。
323nobodyさん
垢版 |
03/04/12 05:30ID:sfZex8vW
>>320
私も年寄りですが、Perl、PHPを使ってメシ食ってます。

まったくの初心者が始めるならPHPですね。
HTTPプロトコルをあまり意識する必要がないから、
ブラウザに文字を表示させるのは簡単です。
そのコードも単純明快に理解できます。

一方Perlは、ブラウザに文字を表示させるためには
表示する処理の前に、何行かのおまじないを書かな
ければいけません。
そのおまじないを理解しようとすると、初心者では到底
理解できないので「難しい」ということになるかもしれません。

PHPの本は初心者用がたくさん売られていますよ。
大丈夫です。
324nobodyさん
垢版 |
03/04/12 06:02ID:???
Perlの方が幾分ややこしい気はするね。
Perl->PHPは入りやすいらしいけど逆は結構厳しい。
ちなみに、私は後者です…。
325320
垢版 |
03/04/12 22:12ID:3Lo6Ghrc
>>323
Thanksです。
PHPだと入門書でいきなりECサイトまで行ってしまうのですが,
(チャット作成までなんとかついていっている程度)
Perlだと入門書で息切れするような。。。(とてもECサイトまでナンテ
行きませんよね?)
ただ,やはりデザなので自分一人でECサイトまではやりません。
外に頼むまでもない事を自分でやれるようにするという感じです。
(極めるという表現が不適切でした。)
データバのソートとか,Webの自動更新とか。
そのあたりでPerlとPHPはどうかな?と思ったわけです。
326nobodyさん
垢版 |
03/04/13 00:12ID:???
@array = ($query =~ /([0-9a-fA-F]{4})/g);

これをPHPで表現するとどうなるんですか?
327nobodyさん
垢版 |
03/04/13 00:12ID:???
>>323
おまじないってなんだ?CGIとして使ったときのヘッダーのことか?
328nobodyさん
垢版 |
03/04/13 00:56ID:???
>>327
print "Content-type: text/html\n\n";
だと思われ
329nobodyさん
垢版 |
03/04/13 01:06ID:???
>>328
ヘッダーじゃん。
330nobodyさん
垢版 |
03/04/13 01:12ID:???
おまじないって言ったら1;が浮かぶ
331nobodyさん
垢版 |
03/04/13 03:24ID:Ba9KZRzY
PHPって配列厄介だなぁ。
332nobodyさん
垢版 |
03/04/13 03:55ID:???
>>331
PHPの配列の何が厄介なん??? ほれいってみ。教えてあげるよ。
333nobodyさん
垢版 |
03/04/14 01:24ID:???
>>331
僕PHPはじめて1週間だけど配列はだいたい分かったので
配列ですが僕はすぐ理解できたので
331さんの厄介とこが分かれば教えてあげますよ
334nobodyさん
垢版 |
03/04/14 01:28ID:???
オレは>>333の日本語が分かりづらい
335nobodyさん
垢版 |
03/04/14 01:42ID:???
>>334
同じく
336nobodyさん
垢版 |
03/04/14 02:16ID:???
>334
禿デゥ
337nobodyさん
垢版 |
03/04/14 14:30ID:???
>>331=>>334=>>335=>>336 反応しすぎ。
ぶっちゃけ、331はバカだな。(w
338nobodyさん
垢版 |
03/04/15 16:55ID:JlWa+G1C
phpでperlでいうところのpackageの作り方教えてください。
339nobodyさん
垢版 |
03/04/15 18:07ID:???
331は、ハッシュと配列が一緒なのが気に入らないらしい。あと、
いちいちarray_*系の関数を使わないといけないのも面倒らしい。
340nobodyさん
垢版 |
03/04/15 19:26ID:1VLAH3RO
>>338
phpは名前空間を定義できない。
341山崎渉
垢版 |
03/04/17 12:01ID:???
(^^)
342山崎渉
垢版 |
03/04/18 15:30ID:???
(^^)
343山崎渉
垢版 |
03/04/20 06:02ID:???
   ∧_∧
  (  ^^ )< ぬるぽ(^^)
344
垢版 |
03/04/27 10:50ID:7vWz7FBG
EUCの配列、文字列をSJISにするのはどういう風にやるの?
345nobodyさん
垢版 |
03/04/27 10:56ID:???
やっぱりpackageはC++でいう名前空間にあたるの?
346nobodyさん
垢版 |
03/04/27 11:36ID:aZMHQklX
見るべし!
http://zoetakami.fc2web.com/
03/04/27 12:27ID:???
http://www.yamazaki.90.kg/hankaku/hankaku07.html
http://yamazaki.90.kg/zenkaku/index.html
http://www.yamazaki.90.kg/hankaku/hankaku08.html
http://yamazaki.90.kg/hankaku/hankaku10.html
http://www.yamazaki.90.kg/hankaku/hankaku01.html
http://yamazaki.90.kg/hankaku/hankaku03.html
http://www.yamazaki.90.kg/hankaku/hankaku02.html
http://yamazaki.90.kg/hankaku/hankaku09.html
http://www.yamazaki.90.kg/hankaku/hankaku06.html
http://yamazaki.90.kg/hankaku/hankaku04.html
http://www.yamazaki.90.kg/zenkaku/index.html
http://www.yamazaki.90.kg/hankaku/hankaku05.htm
348bloom
垢版 |
03/04/27 12:29ID:3nPIuagT
http://homepage.mac.com/ayaya16/
03/04/27 17:54ID:???
http://www.atmarkit.co.jp/flinux/special/php5/php5a.html
もうひとふんばりっ!
350nobodyさん
垢版 |
03/04/28 22:57ID:3GKx/vUL
イスラエルとか言われると萎える
351nobodyさん
垢版 |
03/05/05 22:17ID:LIOD5Ueh
mb_convert_encodingが使えないサーバの場合は?
352nobodyさん
垢版 |
03/05/05 22:25ID:???
jcode.php
353nobodyさん
垢版 |
03/05/19 23:33ID:cX3VPQ/6
教えてください。
perlで言うところのwarnなんですが、
print error_log($test);
見たいな形でerrorログに$testの値を出そうと思ったのですがうまくいきませんでした。。
どなたかperlでいうところのwarn関数のPHP版を教えてください。
354nobodyさん
垢版 |
03/05/20 01:11ID:???
>>353
よくわかんないけど trigger_error とか?
355あぼーん
垢版 |
NGNG
あぼーん
356nobodyさん
垢版 |
03/05/20 02:27ID:???
まぁ、胸張れるような場所でもないしな。
357nobodyさん
垢版 |
03/05/20 07:45ID:???
その発言しているサイトがある
インターネット全体からどれだけの犯罪者を出しているんだろうね…

2chから情報を得ておきながら悪口言う人間もいることだし
放置しても平気でしょ
358nobodyさん
垢版 |
03/05/20 10:19ID:???
日本人だって
殺人とかの罪犯す奴いるじゃないか

そしたら外国人は
日本人はみんな犯罪者だと思うのか?
359山崎渉
垢版 |
03/05/22 01:59ID:???
━―━―━―━―━―━―━―━―━[JR山崎駅(^^)]━―━―━―━―━―━―━―━―━―
360nobodyさん
垢版 |
03/05/22 12:59ID:???
open( LOCK, ">./lock/count.lock" );# ロック用のファイルを作る(※1)
flock( LOCK, 2 );# ファイルをロックする
open( COUNT, "./log/count.log" );# カウンターの値が入ったファイルを開く
$count = <COUNT>;# カウンター値を読み出す
close( COUNT );# カウンターファイルを閉じる
$count++;# カウンターを+1する
open( CTEMP, ">./log/count2.log" );# 更新したカウンタの値を別のファイルに一時的に書き出す(※2)
print CTEMP $count;
$ezcount = "";#カウントファイルの数字を絵文字に変換
for ($i = length($count) - 1; $i >= 0; $i --) {
$n = int(substr($count, $i, 1));
if ($n == 0) {
$ezcount = "<img localsrc=\"325\">" . $ezcount;
} else {
$ezcount = "<img localsrc=\"".(179+$n)."\">".$ezcount;
}
}
close( CTEMP );# 一時的に書き出したファイルを閉じる(書き込み完了)
rename( "./log/count2.log", "./log/count.log" );# 一時的に書き出したファイルを本来のファイル名にリネーム
unlink( "./lock/count.lock" );
flock( LOCK, 8 );
close( LOCK );
これをPHPにしたいのですが…だれかお願いします!
361nobodyさん
垢版 |
03/05/22 13:52ID:???
>>360
マルチおよび自分でやろうともしない。放置
362nobodyさん
垢版 |
03/05/25 01:54ID:YbAXJXvg
formから$_POST["name"]で値を受け取ったのですが、
値中の「"」と「'」がエスケープされてしまって、「\」がついています。
これは自分で取り除くしかないのでしょうか?
レスを投稿する


ニューススポーツなんでも実況