【PHP】自作スクリプト発表会
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
02/03/30 11:55ID:M/C/V7hb初心者が書いた入門スクリプト、ベテランが書いたすげースクリプト。
発表してね。
予めスクリプトの内容を明記してURLを貼り付けるのがよろしいかと。
マターリ進行でいきませう。
PHPが使える無料サーバ情報(レッツPHP!):
http://php.s3.to/php/
0558nobodyさん
2006/02/15(水) 19:31:58ID:???function Auto_HyperLink_Tags($text, $target='_blank') {
if (!empty($text)) {
$search = "(((file|gopher|news|nntp|telnet|http|ftp|https|ftps|sftp)://)|(www\.))+(([a-zA-Z0-9\._-]+\.[a-zA-Z]{2,6})|([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}))(/[a-zA-Z0-9\&%_\./-~-]*)?";
return ereg_replace( $search,"<a href=\"\\0\" target=\"".$target."\">\\0</a>", $text);
}else {
return FALSE;
}
}
0559ちんこ先生 ◆Qm364jaZpk
2006/02/16(木) 11:55:20ID:YzGNHh7Hお前がなにしてるかおしえてあげようか?w
つーか一番笑ったのはソースSJISかよwww
レベルひくwwwwwwwwwwwwwどんだけ低いの?
#-------------
@mysql_connect($db_host, $db_user, $db_password);
@mysql_select_db($db);
ここがmysqlにつないでるとこだが、普通こうかく
$conn =@mysql_connect($db_host, $db_user, $db_password) or die("MySQLの接続に失敗しました。");
@mysql_select_db($db, $conn) or die("DB選択時にエラーが発生しました。");
この2行だけでも、こうやってエラー処理をかくよw しかもなんでrequireに@つけてんの?w
超馬鹿じゃんwww どんだけ低レベルwwエラー処理もしてないwww
0562nobodyさん
2006/02/16(木) 12:48:58ID:???0563nobodyさん
2006/02/16(木) 13:03:24ID:???まずは自分の人格のエラー処理をコーディングしてらっしゃい
0564nobodyさん
2006/02/16(木) 13:20:58ID:???ありが�d
&の使い方が解りませぬ
return (first_process() === true && second_process() === true && third_process() === true)
と等価ですか?
0565ちんこ先生 ◆Qm364jaZpk
2006/02/16(木) 13:29:18ID:YzGNHh7Hつーかお前ら少佐以下なんだろ?www死ねよ
0566ちんこ先生 ◆Qm364jaZpk
2006/02/16(木) 13:43:27ID:???なんだこれwww
0567nobodyさん
2006/02/16(木) 13:56:47ID:???↑
そろそろこの池沼をNGにぶち込むか
0568557
2006/02/16(木) 14:01:03ID:???間違えた。よく調べてみたら、& は PHP ではビット積の演算子だったわ。
C や Java と同じ感覚で書いたもんで・・・。
申し訳ない。 >>557 の & は && に置き換えてください。
意味としては、>>564 で合ってると思います。
ただし、この場合はもしも first_process() が FALSE を返した場合、
second_process() と third_process() を処理せずに終了します。
first_process() の結果いかんに関わらずに続きの関数を実行させたい場合は
function hoge(){
$success = TRUE;
$success &= first_process();
$success &= second_process();
$success &= third_process();
return $success;
}
みたいに書いたほうがいいかな。
0569ちんこ先生 ◆Qm364jaZpk
2006/02/16(木) 14:02:53ID:???なんも知らないくせに少佐非難してるやつよかマシだろ
0570ちんこ先生 ◆Qm364jaZpk
2006/02/16(木) 14:06:49ID:???初心者スレで書いたら?
0571nobodyさん
2006/02/16(木) 14:21:22ID:???0572nobodyさん
2006/02/16(木) 14:35:11ID:???> second_process() と third_process() を処理せずに終了します。
これは知らなかった。チューンできるんだー。
0573557
2006/02/16(木) 14:36:26ID:???条件反射的に Shift_JIS に反応するのはどうなんですかね?
確かに Shift_JIS はマルチバイト文字の中に0x7F以下のコードを含む場合があるから、
文字列や正規表現に日本語を含むようなスクリプトに Shift_JIS を採用すると危険な場合があるけど
逆に言えば、そういう危険性さえなければ Shift_JIS でも全く構わないということになる。
Windows付属のエディタで編集できるっていう強みもあるしね。(まぁ利点といえばそのぐらいしかないが)
あと、言わせてもらうとそのコードもめっちゃレベル低い。
そのエラー処理は、あくまでもシステム側の都合であって、ユーザー側の立場になってない。
もしもあんたが Java をやったら、きっと、コンパイルエラーを回避するためだけの
try 〜 catch とかやるんだろうな。
当然 catch の中身が空だったり適当な System.out.println だけだったり。
(Java 知らない人には訳の分からない話で申し訳ない)
ところで、error_reporting とか set_error_handler とか trigger_error とか、知らないの?
そういうのをフル活用すれば、
@mysql_connect($db_host, $db_user, $db_password);
@mysql_select_db($db);
だけでも全然アリなんだけど。
0575nobodyさん
2006/02/16(木) 18:24:09ID:???0576nobodyさん
2006/02/16(木) 18:33:35ID:???失業でもしたか?w
0577542
2006/02/16(木) 18:57:01ID:???俺が趣味で作って使ってるクラスの抜粋(一部改変)だけど。(PHP5系,MySQL4.1系)
@は使ってないよ。error_reporting = E_ALL、display_Errors = Off、log_errors = Onで、
全部エラー用ログファイルに書き出してる。ユーザー画面には簡単なエラーメッセージ出してるだけ。
エラー時の挙動は全部Db_Error()の中で書いてる。(中まで貼ると長いので↓には書いてない)
DB接続部分って普通こんな感じじゃない?正解はないけど。知識・技術共にレベル低くてごめん。
---------------------------------------------------------
private $err = true;
private $errmsg = null;
public function Db_Connect() {
$this->dbcon = mysql_connect('HOST', 'USER', 'PASSWORD');
if ( !$this->dbcon ) {
$this->err = false;
$this->errmsg = "DB接続エラー";
} else {
$this->dbname = 'DB_NAME';
//MySQL固有
if ( !mysql_select_db($this->dbname, $this->dbcon) ) {
$this->err = false;
$this->errmsg = "DB選択エラー";
} else {
//文字化け対策
$this->Db_Query("set names ujis");
}
}
//エラー画面へごー
if ( !$this->err ) {
$this->Db_Error();
}
}
----------------------------------------------------------
抜粋だから分かりづらくてすんません。あと、俺は少佐非難したつもりはないぞ。エールを送ったつもり。
0578nobodyさん
2006/02/16(木) 19:28:03ID:???切実に希望します。
くだらなそうだけど。
0579nobodyさん
2006/02/16(木) 21:40:03ID:???スキルアップを計るスレじゃないの?
0581少佐 ◆tkyK4yl1H6
2006/02/17(金) 03:10:06ID:???言い方はともかくとしてw
文字コードについても全然知らず、「なんとなく日本語ってsjisがよさそうじゃない?」みたいな感じで使ってました。
>>557氏の言われるようなことは露知らず。
(何がいいんでしょうか??時と場合による?)
mysql_connectとかもおっしゃる通りです。
requireに@がついてるのは特に意味は無いんですが、関数にはほぼすべて@をつけるクセがついてます。
特に害はないですよね…?たぶん。
こうして怒られながらも、参考になることをいろいろ教えてもらえるのはありがたいです。
0582nobodyさん
2006/02/17(金) 04:46:13ID:???. (。・_・) 少佐はやさしいのぅ
゚し-J゚
0583nobodyさん
2006/02/17(金) 05:09:16ID:???foreach(){
while(){
foreach(){}
foreach(){
foreach(){}
}
}
}
ま、いいか。。。
0584nobodyさん
2006/02/17(金) 07:41:14ID:???害?あるよ。エラー処理をしなくなる。
基本EUC-JPで国際化とか考えるならUTF8でって感じ。
一度、@を全部削除して、errot_reporting(E_ALL);してみれ。
多分、すごいことになるから。
もし、ならなかったら少佐は天災
0585nobodyさん
2006/02/17(金) 08:34:55ID:???0586nobodyさん
2006/02/17(金) 09:57:59ID:???「エラー処理をしない」というよりは、「エラーを通知しなくなる」と言ったほうが正しいかな。
例えば下のスクリプトを動かしてみると、エラー処理自体はきちんとしてくれるのが分かるかと。
<?php
function print_error($code, $error_message){
print($code.':'.$error_message);
}
function zero_divide(){
$x = 1 / 0;
}
set_error_handler('print_error');
@zero_divide();
?>
>>584 の言うとおり、error_reporting(E_ALL) にしておくのはすごくお勧めです。
見えないバグを発見できるし、デバッグの労力がグンと減るので。
逆に、本番で使う際には error_reporting(0) にしておかないとみっともないですが。
0587nobodyさん
2006/02/17(金) 11:26:17ID:???$this->dbcon = mysql_connect('HOST', 'USER', 'PASSWORD');
if ( !$this->dbcon ) {
$this->err = false;
$this->errmsg = "DB接続エラー";
俺は4使いだから5はよくしらないけど
@mysql_connect
しないと
$this->errmsgまでいかない気がする
あと
$this->errつーんだから
$this->err = TRUE;
のがよくなくね?
0588nobodyさん
2006/02/17(金) 12:12:24ID:???@なしでもエラー処理に入りますよ。
php.iniの設定の違いだと思います。
たぶんdisplay_errors = Onにされているのではないでしょうか。
あとerrの値に関しては、確かにそうかもしれません。
0589nobodyさん
2006/02/17(金) 12:20:05ID:???0590nobodyさん
2006/02/17(金) 14:12:43ID:???設定で変えれるのかな
0591nobodyさん
2006/02/17(金) 16:20:32ID:???0593nobodyさん
2006/02/17(金) 19:20:50ID:???自演して株を上げようと操作しているように見える。
まぁ、物は作ってるから、PHPバージョンのKENTってとこか。
0594nobodyさん
2006/02/17(金) 20:19:04ID:???てんめぇ オレの少佐を自演扱いしたら殺すぞ
少佐の人気に嫉妬してる暇があったら、さっさとてめぇのブツ晒せやボケ
この役立たずめが!
0595nobodyさん
2006/02/17(金) 20:31:23ID:???語ることだけはできるの
0597nobodyさん
2006/02/17(金) 21:08:59ID:zk5HwoZg../⌒ ヽ
( ヽ
ヽ ノ ヽ
ゞ 、 丶
ヽ ノ \ _ _,__ -' ─ ─ ,、 _
|\_ ノ\ , '´/_ヽ_ヽv /: / ヽ`、
/⌒\ 丶 / /  ̄ヽ-、___ ,-r'  ̄ ̄ ヽ.
│ \ 人 |/⌒ヽ | ! ヽーーーーー | :::::|
/ \ / | | ! ! r ひ 、. ! :::::::|
( \ ヽ / / | ! ! ノ:::\. ! ::::::::|
( | / ) | ! (::::T::::: ! ::::::::::|
ヽ \ ヾ 丿(( ̄)/ 'i:;;; `'ー--‐‐' ::::::;;;:ノ
\ ヾ丿 ヽソ `''─ _ _. ─''´
ヽ ノ _ __/  ̄ ̄ ̄
0598名無しの報告
2006/02/17(金) 21:55:46ID:Vjg5tdKBhttp://qb5.2ch.net/test/read.cgi/sec2chd/1138867175/268
0599名無しの報告
2006/02/17(金) 22:10:48ID:???http://www.doblog.com/weblog/myblog/22179
■2ちゃんねる被害者ストレス発散板■
http://r.netabbs.info/uxgmswe/index.html
■2ch裏の歴史と噂話と真相
http://www.geocities.jp/tokumei_tokumei70/top_index.html
■削除要請@2ch掲示板@スレッド一覧
http://qb5.2ch.net/saku2ch/subback.html
■犯罪者生産装置 「 2チャンネル 」■
http://www.geocities.jp/ariradne/2ch.html
■被害者の声1〜2■
http://sak2-2.tok2.com/home/zhpkfmh/newpage6.htm
■元2chスタッフ玄さんの日々是好日から■
http://jsimin.at.infoseek.co.jp/opinion/
■アンチ2chリポーター・AICO■
http://arvel7aico.btblog.jp/
■2ch被害者達の叫び声■
http://r.netabbs.info/test/read.cgi/uxgmswe/1111504554/
■2ちゃんねらー屁理屈(暴言)集■
http://r.netabbs.info/test/read.cgi/uxgmswe/1109255122/
■2ch信者(煽り屋)への返答例■
http://r.netabbs.info/test/read.cgi/uxgmswe/1121652904/
■2ちゃんねる...その正体■
http://www.doblog.com/weblog/myblog/61447
0601nobodyさん
2006/02/18(土) 01:49:28ID:???0602少佐 ◆tkyK4yl1H6
2006/02/18(土) 02:58:11ID:???皆さんの言われるように、僕はPHPについての知識なんてミジンコほどしかありませんので、
>>594氏のように言ってもらえるのはとてもありがたい反面、重荷にもなります。
#このスレで自演したことは無いのにそう言われたりw
僕はただの初心者ですので、「あーまたくだらんもん作ってやがるなぁ」と思ってもらえれば満足です。
しばらくは返答を求められない限り傍観者になりますので、マターリお願いします。
#応援してくれた方々、ありがとー。
0603nobodyさん
2006/02/18(土) 03:22:10ID:???0604nobodyさん
2006/02/18(土) 03:41:21ID:???0605nobodyさん
2006/02/18(土) 08:55:58ID:???0606nobodyさん
2006/02/18(土) 12:00:02ID:???しょぼいところも似てる
0608nobodyさん
2006/02/18(土) 18:34:46ID:???0609nobodyさん
2006/02/18(土) 23:50:56ID:???0610nobodyさん
2006/02/19(日) 13:31:56ID:???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
上で偉そうなことを言っておきながら、あまり参考にならないかも。すまん。
■ このスレッドは過去ログ倉庫に格納されています