【PHP】自作スクリプト発表会
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
02/03/30 11:55ID:M/C/V7hb初心者が書いた入門スクリプト、ベテランが書いたすげースクリプト。
発表してね。
予めスクリプトの内容を明記してURLを貼り付けるのがよろしいかと。
マターリ進行でいきませう。
PHPが使える無料サーバ情報(レッツPHP!):
http://php.s3.to/php/
0612nobodyさん
2006/02/19(日) 14:18:28ID:???0613nobodyさん
2006/02/19(日) 14:29:54ID:???0614nobodyさん
2006/02/19(日) 15:26:57ID:???文句言うぐらいなら書いて見せろ。
0615nobodyさん
2006/02/19(日) 16:34:53ID:???0616nobodyさん
2006/02/19(日) 16:44:30ID:???需要のありそうなものを見せてくれ
0620nobodyさん
2006/02/19(日) 17:27:37ID:???0621nobodyさん
2006/02/19(日) 17:29:28ID:???0622nobodyさん
2006/02/19(日) 17:29:36ID:???0624nobodyさん
2006/02/19(日) 20:42:04ID:???で?
0625nobodyさん
2006/02/19(日) 23:06:12ID:???0626nobodyさん
2006/02/19(日) 23:08:14ID:???0627nobodyさん
2006/02/20(月) 09:25:06ID:???何かつくれyp
0628nobodyさん
2006/02/20(月) 16:22:52ID:???MMO厨はお帰りください
0629nobodyさん
2006/02/20(月) 23:18:20ID:???0630nobodyさん
2006/02/23(木) 07:43:17ID:???0631nobodyさん
2006/02/25(土) 10:06:02ID:???0632nobodyさん
2006/02/26(日) 12:17:54ID:???0633nobodyさん
2006/02/26(日) 13:12:17ID:???0634nobodyさん
2006/02/26(日) 21:38:13ID:???0635nobodyさん
2006/02/28(火) 12:40:08ID:???☆ チン 〃 ∧_∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄
ヽ ___\(\・∀・)< ソースまだー?
\_/⊂ ⊂_)_ \_______
/ ̄ ̄ ̄ ̄ ̄ ̄ ̄/|
|  ̄  ̄ ̄ ̄ ̄ ̄ ̄:| :|
| .|/
0636nobodyさん
2006/02/28(火) 13:48:47ID:???空気読めない厨房ウザすぎ
0640ちんこ先生 ◆Qm364jaZpk
2006/03/05(日) 01:26:43ID:Ve31vcRU0641nobodyさん
2006/03/05(日) 11:33:31ID:???あぼーん
0642nobodyさん
2006/03/05(日) 11:34:05ID:???よっしゃこい
0644557
2006/03/06(月) 05:15:51ID:???>>568 が間違っていることが判明しました。
& はビット演算子だけでなく、論理値の AND 演算子としても使われるようです。
function hoge(){
return first_process() & second_process() & third_process();
}
で、はじめ2つの関数の返り値に関わらず third_process までちゃんと評価されます。失礼しました。
0645nobodyさん
2006/03/06(月) 11:38:58ID:???0646557
2006/03/06(月) 18:02:34ID:DiuskzlQ仕様を読んだ限りでは & がビット演算子ということしか書かれていなかったので
よくよくテストをせずに早合点してしまった。十分反省している。
ところで、最近停滞ぎみっぽいので燃料を投下してみます。
http://trashtoy.dw.land.to/app/memo/memo.zip
はじめはサイトの更新履歴の公開・管理システムのつもりで作ったけど
イベントの告知や簡易スケジュール帳など、応用範囲は広いと思う。
詳しくは readme.txt を見るべし。
0647nobodyさん
2006/03/06(月) 18:49:45ID:???function Make_Trip($username) {
//◆を◇に置換
$username = str_replace("◆", "◇", $username);
//$usernameに#が含まれていればトリップ生成
if ( ($pos = strpos($username, '#')) !== false ) {
//usernameの'#'以降を$keyとする
$key = substr($username, ($pos + 1));
//サーバ側文字コードがShift-JISでない場合
if ( ($srvcharset = mb_internal_encoding()) != "Shift-JIS" ) {
//2ch互換トリップにするため「$keyの文字コードを」Shift-JISへ変換
mb_convert_variables("Shift-JIS", $srvcharset, $key);
}
//$keyから$salt生成($saltが2byteに満たないもののために'H.'を足しておく)
$salt = substr($key . "H.", 1, 2);
↓つづく
0648nobodyさん
2006/03/06(月) 18:50:37ID:???//検索パターン配列(64)生成
$pattern = array();
for( $cnt=0; $cnt<128; $cnt++ ){
//「.」「/」英数字以外を検索パターンとする
if ( ($cnt<46) or ($cnt>57 and $cnt<65) or ($cnt>90 and $cnt<97) or ($cnt>122) ) {
//16進ASCIIコードでの検索パターン文字列を生成
$pattern[] = '/[\\x' . dechex($cnt) . ']/';
}
}
//置換用ベース配列
$replacetmp = array('A', 'B', 'C', 'D', 'E', 'F', 'G', 'a', 'b', 'c', 'd', 'e', 'f', '.');
$cnt2 = 0;
//(検索パターンが64通りなのでその数に合わせた配列を用意)
for ($cnt1=0; $cnt1<64; $cnt1++ ) {
$replace[] = $replacetmp[$cnt2];
if ( $cnt2 < 13 ) {
$cnt2++;
} else {
$cnt2 = 0;
}
}
//●あほくさエリア突破●
↓続く
0649nobodyさん
2006/03/06(月) 18:51:12ID:???$salt = preg_replace($pattern, $replace, $salt);
//$saltに含まれる'.','/','0-9','A-Z','a-z'でないものを'.'に置換
$salt = preg_replace('/[^\.\/0-9A-Za-z]/', '.', $salt);
//トリップ生成(生成される文字列は11byte)
$trip = crypt($key, $salt);
//名前部分切り出し(#keyを含まない部分)
$name = substr($username, 0, $pos);
//(名前)+(生成されたトリップの後ろから10byte)を返す
$ret = $name . "◆" . substr($trip,-10);
//#が含まれていない場合
} else {
$ret = $username;
}
//戻り値は「name◆trip」または「name」
return $ret;
}
おわり。無駄が多いです。
0650647-649
2006/03/06(月) 18:53:45ID:???あほにし
えいヴぇっくす
しか使ってないです。
0651nobodyさん
2006/03/06(月) 18:54:04ID:???どのコンテンツもリンクが見当たらないんですが、、、
0652650
2006/03/06(月) 19:10:52ID:???初心者でもなんとなく処理内容の意味がわかるようにするためです。
もとにした2chトリップ生成ソースは
$salt = substr($key.'H.', 1, 2);
$salt =~ tr/\x3A-\x40\x5B-\x60\x00-\x2D\x7B-\xFF/A-Ga-f./;
$salt =~ s/[^\.\/0-9A-Za-z]/\./g;
$trip = substr(crypt($key, $salt), -10);
の、4行です。
自分はPHP最強房なのでperlよくわかんなかったです。
なので意味の解釈を間違っているかもしれません。
そのへんはperl最強房さんが解説していただけたらとか思ってます。
くだ質で聞こうかとも思ったけど、ここで晒して叩かれたほうが早いと思ったので載せました。
0653nobodyさん
2006/03/06(月) 19:28:05ID:???コメントの重要性を理解している点は評価できるんですが、
そんなあなたには「粒度」という言葉をプレゼントします。
処理にも、大きい単位から小さい単位までいろいろあるわけで、
すべてのコメントを小さい単位に合わせて書いたら、
ソースコードの見通しが全く見えなくなって、
コメントがないのと同じくらい意味がなくなってしまうのですよ。
あと、コメントの大事なポイントは、
全体の流れの中においてその処理が持っている意味を書くこと。
その処理がどういう動作をしているかは書かなくてもいいです。
そんなことは、PHPの文法が分かる人間だったら誰でも分かるんだから
よっぽど凝っていて複雑なアルゴリズムを書くとき以外には必要ないです。
というわけで、今後はコメントの書き方を要研究すべし。
ソースの中身は面倒なので読まなかったけど、パッと見て思ったのはそんなところ。
0654nobodyさん
2006/03/06(月) 19:41:27ID:???コメントが無駄すぎるね
0656nobodyさん
2006/03/06(月) 19:48:06ID:???> 全体の流れの中においてその処理が持っている意味を書くこと。
> その処理がどういう動作をしているかは書かなくてもいいです。
意味と動作の具体例みたいなのを教えてください。アホですみません。
0657nobodyさん
2006/03/06(月) 20:15:04ID:???具体例ねえ。難しいなあ。
とりあえず、参考として、似たようにアルゴリズムが複雑なプログラムのソースコードを
ここでも晒してみるか。Java だけど。ちなみに、以前他の板のスレで晒したものです。
http://trashtoy.dw.land.to/works/PrimeFinder.java
上で偉そうなことを言っておきながら、あまり参考にならないかも。すまん。
0658nobodyさん
2006/03/06(月) 20:16:16ID:???動作:関数の説明
意味:なぜその関数を利用するか
650の書き方は、スクリプトの解説サイトではよく見るけど、
リファレンス読まなくなって、別の使い方とか知らないままで終わるから諸刃の剣。
0659650
2006/03/06(月) 20:16:22ID:???perlどころかPHPも良くわかってない。
いま直し&考え中。。
>>653
> そんなことは、PHPの文法が分かる人間だったら誰でも分かるんだから
今までの流れから、このスレには「PHPの文法がわかる人間」が
そんなに多くないと解釈したうえでのコメント文です。(自分を含め)
653さんとは前提が違うようです。
しかし、わかる人間にはうざ過ぎて読むことすらして
もらえないということは良くわかりました。
普段こんなことはやってません。
これは関数なので、書くとしたら
//概要:$usernameに#が含まれていた場合にトリップを付加して返す
//引数:$username(string)
//※:「#」以降8byteまでがトリップ生成に使われる
//戻り値:「名前◆trip」または「名前」(string)
//※:tripは「0-9A-Za-z/.」の64種類中から10文字
とか関数上部に書くくらいです。
汚いもの載せてごめんなさい。
0661nobodyさん
2006/03/06(月) 20:39:08ID:???>>659 の言うことも分かった。晒して損したかも(´・ω・`)
>>657 はどう見ても五十歩百歩です。本当にありがとうございました。
ただ、分からない人に対する説明だとしても、やっぱり書き方はあると思う。
例えば書き方の一貫性。「○○を××します」っていう風に、
文として完結させることをすべてのコメントで徹底するだけでもだいぶ違うし。
0662nobodyさん
2006/03/06(月) 20:41:02ID:???// もし○○ならば
if(〜〜〜){
// ××を行う
do_something();
}
この書き方ってなんとなく嫌いです。昔は自分もやってたけど。
// もし○○ならば××を行う
if(〜〜〜){
do_something();
}
このほうが分かりやすいと思う。(コメントの文体に一貫性が出来るのとあいまって)
0663nobodyさん
2006/03/06(月) 20:44:57ID:???//xxxをxxxしてxxxする
〜
〜
〜
←空行
1行だけの説明なら同じ行に
〜//xxxする
0665nobodyさん
2006/03/07(火) 00:01:38ID:???0667nobodyさん
2006/03/07(火) 00:26:48ID:???2chの中ぜんぜん知らないから今どうなってるのかわかんないなぁ
0669nobodyさん
2006/03/07(火) 17:07:05ID:???程々にね。
0670nobodyさん
2006/03/07(火) 18:12:42ID:???0672nobodyさん
2006/03/09(木) 11:51:48ID:???0673nobodyさん
2006/03/10(金) 08:05:38ID:???XHTML1.1形式で出力する画像掲示板作ってる。xmlにxsltかませる部分のせる。
DBのデータ変換部分は省略。
$xml = なんかXMLな文字列
$xsl = new XSLTProcessor();
$xsl->importStyleSheet( DOMDocument::load("xhtml11.xsl") );
$xhtml = $xsl->transformToXML( DOMDocument::loadXML($xml) );
echo $xhtml;
PHPのマニュアルにのってるやり方真似してるだけですけど。
これだとどんな形式にもできていいですね。
XMLやらXSLTやらXPathやら覚えるの多すぎ。
とりあえず一晩でできたのはここまで。。(実際にはXSLT書いたりするのに一番苦労した)
PHPのDOM拡張モジュールとかXSL関数は便利なのでみなさんつかいませう。
http://jp2.php.net/manual/ja/ref.xsl.php
http://jp.php.net/manual/ja/ref.dom.php
素人がPHPでXML使うことを覚え始めて浮かれてるだけなのであんまり気にしないでください。。
0674nobodyさん
2006/03/11(土) 10:18:41ID:???0675ちんこ先生 ◆Qm364jaZpk
2006/03/12(日) 04:46:59ID:???ID認証型SSL式決済システム。
すぐ消す。リカーリングつき
0676nobodyさん
2006/03/12(日) 05:03:32ID:???0677ちんこ先生 ◆Qm364jaZpk
2006/03/12(日) 05:45:58ID:???0679nobodyさん
2006/03/12(日) 12:31:24ID:???tumanewwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww!!!!!!!!!!!!!!
0680nobodyさん
2006/03/12(日) 13:04:58ID:???0681nobodyさん
2006/03/12(日) 17:40:24ID:???0682nobodyさん
2006/03/12(日) 19:25:34ID:???自分の無知を棚に上げるな
0683nobodyさん
2006/03/12(日) 20:54:27ID:???あほか。お前らが信用できるうpロダを用意しろつってんだよ。
てきとーに選んであげたらまた文句言われるかもしれんだろ?
少しは脳みそ使え池沼。
0686nobodyさん
2006/03/13(月) 00:06:17ID:???0688nobodyさん
2006/03/13(月) 12:00:18ID:???今、試してみましたよ。
allow_call_time_pass_referenceが Onじゃないとtime.phpでwarnningが出まくるんですね。
家の環境(4.3.11エントロピ)では、Offに設定してあったので、ちょっとたまげました。
readmeに一言書いてあると良いかも?
0691646
2006/03/13(月) 16:11:36ID:???ありがとうございます。
こちらの環境でも allow_call_time_pass_reference を OFF にして動作チェックをしてみます。
>>689
よろしければエラーの記述をコピペしていただけると助かります。
0692nobodyさん
2006/03/13(月) 16:31:11ID:???俺の環境はshort_open_tagがoffなので動かない
タイトルが<?= MEMO_TITLE ?>
0693646
2006/03/13(月) 17:26:13ID:???なるほど。XML宣言を含むXML文書を簡単に出力したい人なんかは、
やっぱり short_open_tag をOFFにしたいですよね。
short_open_tag を OFF にしても動くように修正してみます。
0695646
2006/03/13(月) 19:19:55ID:nDHgXPavhttp://trashtoy.dw.land.to/app/memo/memo.zip
>>688 の foreach に関するエラーの件について。
自分の憶測なのですが、Webサーバーが
<input type="checkbox" name="arr[]" value="hoge">
形式のパラメータを解釈できないのかもしれません。
0697nobodyさん
2006/03/13(月) 19:35:05ID:???ごめん688じゃなく689でした。
配列がないよってえらーでしたね。たしか。
0698646
2006/03/13(月) 20:21:38ID:nDHgXPavバグが見つかったので更新しました。
http://trashtoy.dw.land.to/app/memo/memo.zip
どうもありがとうございます。
削除する際に、一部のPOSTパラメータが配列ではなくスカラー値だった場合
foreach 内で >>697 のエラーが起こるようになってました。
普通に使っている限りではそのようなことは起こらないと思うので、
>>689の現象はいまだに謎なのですが・・・。
ただ、少なくとも POST パラメータを改ざんすればエラーが発生するのは事実なので
これはれっきとした脆弱性だということで対処しました。
>>689の現象は起こらなくなるはずです。
0700646
2006/03/14(火) 02:24:22ID:???それは、どうも。
でも、やらないほうがいい悪い癖なんかもたくさんあると思うので、
あまり鵜呑みにしないほうがいいかもです。
ここに晒した時点で、もうこれだけ不具合が発覚しているわけですし。
0703nobodyさん
2006/03/14(火) 05:25:57ID:???0704nobodyさん
2006/03/15(水) 10:00:07ID:???配布サイトよりも解説サイトの方が 646氏は有名になれる希ガス。
そういうのは目指していないのかもしれないけど、コードを見ていて
そう思ったです。
0705nobodyさん
2006/03/16(木) 07:38:03ID:???0706nobodyさん
2006/03/16(木) 07:54:20ID:???読む人は他にいるんだから。
0707nobodyさん
2006/03/16(木) 08:26:13ID:???0709nobodyさん
2006/03/16(木) 19:54:09ID:???そんなことより先に技術見に付けろと言いたいが
■ このスレッドは過去ログ倉庫に格納されています