【PHP】自作スクリプト発表会
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
02/03/30 11:55ID:M/C/V7hb初心者が書いた入門スクリプト、ベテランが書いたすげースクリプト。
発表してね。
予めスクリプトの内容を明記してURLを貼り付けるのがよろしいかと。
マターリ進行でいきませう。
PHPが使える無料サーバ情報(レッツPHP!):
http://php.s3.to/php/
0478少佐 ◆tkyK4yl1H6
2006/01/24(火) 22:40:36ID:???似たようなのでよければ(´゚д゚`)
http://sv1.no-ip.org/mcs/
ソースはhttp://sv1.no-ip.org/download/mcs.zipです。
短時間で作ったので不完全だったらごめんなさい。
0480少佐 ◆tkyK4yl1H6
2006/01/24(火) 23:04:17ID:???どういたしまして過ぎます。
1カ所だけ修正したので、DLしなおしてもらえるとうれし過ぎます。
0482nobodyさん
2006/01/24(火) 23:32:13ID:???0483少佐 ◆tkyK4yl1H6
2006/01/25(水) 01:05:59ID:???ログの上限を超えた場合の自動削除で、ファイルを削除し忘れてますたorz
修正しときますた。
あと、>>80氏のより遙かにヘボいと思われます。
保守できないサイトの多いこと多いこと。
0484popo
2006/01/25(水) 07:39:44ID:???0485nobodyさん
2006/01/25(水) 09:18:32ID:???高性能なのか高機能なのかどっちだ?
どちらにせよ、機能的にはアクセス解析で何ができるかが肝となるわけだが。
0488nobodyさん
2006/01/25(水) 15:03:13ID:???強固なロック(環境に依存しない unix windows)
今日、昨日、全部
二重ログ(トラブル時自動復帰)
ログのバックアップ(上記の自動復帰の予備)
時間指定で連続カウントしない設定可能
画像、画像連結、GD、テキスト設定可能
桁数設定可能
javascript ssi img php それぞれの呼び出しに設定可能
こんな感じでどう?
0491少佐 ◆tkyK4yl1H6
2006/01/25(水) 18:01:09ID:???難しいというか、え?何のこと?というあれです。
そのようにしておきました。
ログデータの互換性が無くなったかもしれません。
.htaccessを追加しましたが、確認してないのでよくわかりません。
DLは同じURLからお願いします。
0493nobodyさん
2006/01/25(水) 22:21:32ID:???ggggggggggggggggggggggggggggggggggggggggggj
纏めサイト運営してるんでd
0495少佐 ◆tkyK4yl1H6
2006/01/26(木) 13:57:03ID:???適当にやったものに限って使ってもらえてうれしいです。
明日引っ越しするので、しばらく鯖の電源を切ることになります。
引っ越し先でネットが繋がったら、またよろしくお願いしますm(_ _)m
0496nobodyさん
2006/01/26(木) 17:02:00ID:???0497nobodyさん
2006/01/26(木) 17:48:31ID:???しかも、
>リアル引っ越し中です。そのうち復活する予定です
の文字。
少佐、つまりfc2へ入社すると暗に示しているんですね?
0498少佐 ◆tkyK4yl1H6
2006/01/26(木) 18:51:24ID:???じゃあ僕も全裸で新幹線に乗りますね。
これで偶然すれ違ってもお互いに一目瞭然で安心です。
>>497
僕はfc2ちゃいます('A`)
NotFoundじゃマズいかなぁと思ったので適当に手軽なWebスペースをレンタルしただけです('A`)
ということで、PCを梱包してきます。
0499nobodyさん
2006/01/26(木) 19:26:52ID:???0500nobodyさん
2006/01/26(木) 23:12:52ID:???0501nobodyさん
2006/01/26(木) 23:33:36ID:P4JZCK77もしよろしかったらご覧いただければ幸いです。
http://pharon.lolipop.jp/
0502nobodyさん
2006/01/27(金) 15:51:18ID:???0504503
2006/01/27(金) 19:16:05ID:???0505nobodyさん
2006/01/31(火) 15:03:45ID:???俺なんかfunctionすら使わないで掲示板(ぽいの)作ったこともあるよぅ。
だからオブジェクトとか言われてもピンとこない(´・ω・)
0506nobodyさん
2006/01/31(火) 16:03:46ID:???個人的に関数はパッと見て理解出来る数行にしときたいけど、2・3行の関数を大量に作ると見難くなるし何より名前が雑に・・英語か、英語力の無さが原因なのかァァァァァ
まぁ休日に趣味っぽい感じでやってるだけだから、そんなに気を使う必要はないけど
0507nobodyさん
2006/01/31(火) 16:59:18ID:???誰か簡単に説明してくれ
0508nobodyさん
2006/01/31(火) 20:58:26ID:???0509nobodyさん
2006/01/31(火) 21:35:57ID:???0512nobodyさん
2006/02/03(金) 07:41:33ID:???スス--ッ .|┃""ヽ、
.|┃゚ ▼)
.●..|┃゚Д゚) …少佐復活まだ?
_____|┃ ..|)
.|┃_,,ノ
_____|┃U_
0513nobodyさん
2006/02/07(火) 04:21:41ID:???private $filename = null;
private $fp = null;
const Read_Type = "r";
const Write_Type = "a";
public function __construct($fn) {
$this->filename = $fn;
}
private function File_Open($type) {
$this->fp = fopen($this->filename,$type)
flock($this->fp, LOCK_EX);
}
private function File_Close() {
fclose($this->fp);
}
public function File_Read() {
$this->File_Open(self::Read_Type);
$ret = fread($this->fp, filesize($this->filename));
$this->File_Close();
return $ret;
}
public function File_Write($value) {
$this->File_Open(self::Write_Type);
$ret = fwrite($this->fp, $value);
$this->File_Close();
return $ret;
}
}
0515nobodyさん
2006/02/07(火) 20:00:29ID:???0516nobodyさん
2006/02/08(水) 16:37:51ID:O7y2qCCzファイル操作なんだなこれ
<?
class File_Io {
var $filename = '';
var $fp = '';
var $Read_Type = "r";
var $Write_Type = "a";
function File_Io($fn) {
$this->filename = $fn;
}
function File_Open($type) {
$this->fp = fopen($this->filename,$type);
flock($this->fp, LOCK_EX);
}
function File_Close() {
fclose($this->fp);
}
function File_Read() {
$this->File_Open( $this->Read_Type);
$ret = fread($this->fp, filesize($this->filename));
$this->File_Close();
return $ret;
}
function File_Write($value) {
$this->File_Open( $this->Write_Type);
$ret = fwrite($this->fp, $value);
$this->File_Close();
return $ret;
}
}
?>
0517nobodyさん
2006/02/08(水) 18:10:45ID:???IOとかって「I」と「O」で別の単語だから、FileIOって書いたほうがいいんかんうぇ?
0518413
2006/02/08(水) 18:21:10ID:8f4tRzkYhttp://life.my.land.to/send_mail.zip
添付ファイルも使えるようになったよ。
0519nobodyさん
2006/02/08(水) 18:22:21ID:O7y2qCCzIOってそれぞれ何の意味があるの?
in,out?
0520nobodyさん
2006/02/08(水) 18:50:55ID:???stdioとiostreamのioと同じ意味だよ。
0522518
2006/02/08(水) 21:01:58ID:???http://life.my.land.to/src/send_mail.zip
0524nobodyさん
2006/02/08(水) 22:16:00ID:???File_Io->File_Write("filename");
とかやりたいってことなのね。
個人的には
fileIO->write("filename");
と極力記号など打ちたくない気もするけども。
0525nobodyさん
2006/02/08(水) 22:31:57ID:???これからOOPをはじめまつ
0527nobodyさん
2006/02/10(金) 14:00:56ID:???0530nobodyさん
2006/02/10(金) 17:06:10ID:???/usr/sbin/sendmail
せめてsendmailのパスくらいは指定出来るようにしようぜ。
他にも突っ込みたいところ結構あるが。
0533nobodyさん
2006/02/10(金) 17:32:16ID:???自己解決。
0537nobodyさん
2006/02/11(土) 15:48:57ID:???0538nobodyさん
2006/02/13(月) 10:20:05ID:???0539nobodyさん
2006/02/13(月) 11:38:37ID:???0541nobodyさん
2006/02/13(月) 13:32:47ID:???0542nobodyさん
2006/02/13(月) 15:23:56ID:???少佐のソース、upload_check.phpの150行目。
ImageCreateFromwbmp()って関数だけど、
これってWindowsのビットマップファイル用の関数じゃないから
.bmpの画像ファイル受け取っても正常に処理できるのかな?
たしかWBMPって「wireless bitmap」とかだった気がする。特殊端末向けの。
この関数にwindows系のBMPファイル与えたらどうなるのか試してないけどさ。
あと、そもそもアップロードされてきたファイルの拡張子を信頼する形で
ソースが書かれてるから、実際には違う形式のものとかをアップできてしまう気もする。
それから同じ処理を何度も書きすぎ。具体的には・・・
サムネイル(小)〜(大)の部分。200行近くあるけど、小も大もひとつに出来る。
それからimageCreateTrueColor()関数とImageCopyResampled()関数。
TrueColorじゃないGIF形式にも使ってるのが謎。上記二つはTrueColor向け関数。
TrueColorじゃないならimageCreate()、ImageCopyResized()あたりな気がする。
それからDB接続とかの基本的な部分はクラス化するなり関数化するなりして、
別ファイルにまとめてrequire_once()して使ったほうがいい。
文字数チェックや禁止語句チェックなんかも関数化とかして別ファイル行き。
これらはパラメータ変更するだけで何度も色んなソースで使えるから。
機能追加、修正のときにそのほうが見やすいし楽。1ファイルにしかないからそこを修正すればいい。
俺も大したことないからでかいこと言えないんだけど。
初期からこういうソースの書き方に慣れていると絶対苦労する。
でも彼はこうやって成果物を出しているから立派だと思う。
これから色々学んで成長していくのだろうから、生暖かく見守りたい。
前まで職場にいたPHP職人(経験3年以上?とかだったと思う)は、
こういうソースの書き方だったけど、ひどすぎてメンテとかできない、パフォーマンスもひどい。
時間と相談しつつ設計からやり直してどんどん書き直してるよ。
0545nobodyさん
2006/02/14(火) 06:16:12ID:???542ですけど、添削してもらうとか考えないでとりあえず造ったものを
みんなに見せたらいいんじゃないかな。
そういうスレだと思い込んでる俺がいる。
それに「100点満点のソースは実在しない」と思うよ。
とりあえず晒しとけば、アイデアはいいが設計やソースの書き方がアレだなーとか、
いい筋してるがもうひと頑張りだとかコメント付く気がする。
もしかしたらココこうしたほうがいいんじゃない?とか誰かが言ってくれるかもだし。
0546少佐 ◆tkyK4yl1H6
2006/02/14(火) 06:39:26ID:???汚くてごめんなさい自覚してますorz
>>542氏
まさにこれ、という感じです。
wbmpについては後から気づいたんですが、
ほとんど関数化とかしてないので、めんどくさくて残してました。
config.phpの設定ではbmpは削除しておいたと思います。
サムネイルについてはもう完全に自己流でルーズリーフに書きながら考えたので、
ものすごくグチャグチャだと思います。
頭が追いつかないので、「これをこうして、こっちをこうして…」という感じで、
ひとつひとつ完結させながらやってるのが問題だと思います。
逆にminilogの方は関数使いすぎで自分でもわけわかんなくなってきました。
>>512氏
今月から毎日18時間働いております('A`)
今は徹夜中の小休止ですorz
0547nobodyさん
2006/02/14(火) 06:45:08ID:???0548nobodyさん
2006/02/14(火) 07:41:01ID:???( ,_ノ` )y━・~~~ 少佐、動けばいいんだよ動けば
0549その1
2006/02/14(火) 11:26:45ID:O2fgq8yY長いので分割します。
------------------------------------
<?php
/**
* 特定のディレクトリ内のファイルの読み書きを行うクラスです.
*/
class file_manager {
/**
* ディレクトリを表す文字列です.
*/
var $dir;
/**
* 指定されたディレクトリ内のファイルを操作する新しい file_manager を構築します.
* 引数が省略された場合はカレントディレクトリ(./)を扱います.
*
* なお、指定されたディレクトリが見つからない場合は作成を試みます.
* 作成に失敗した場合は警告を発生させます.
*
* @param $dir 操作対象のディレクトリ. 相対パスまたは絶対パス. ただし末尾に '/' は含めない.
*/
function file_manager($dir = ''){
$this->dir = (0 < strlen($dir)) ? $dir : '.';
// 指定されたディレクトリが存在しない場合は作成を試みる.
if(!file_exists($this->dir)){
$success = @mkdir($this->dir);
if(!$success)
trigger_error('FILE_MANAGER_ERROR:('.$dir.')は利用することができません', E_USER_WARNING);
}
}
0550その2
2006/02/14(火) 11:28:38ID:O2fgq8yY* 指定されたファイルの中身を返します.
* ファイルが存在しない場合は NULL を返します.
*/
function read_file($filename){
$file = $this->dir.'/'.$filename;
$lines = @file($file);
if(!$lines) return NULL;
$str = '';
foreach($lines as $line){
$str .= $line;
}
return $str;
}
/**
* 指定されたファイルの中身を与えられた文字列で上書きします.
* ファイルが存在しない場合は新たに作成します.
*
* @param $filename ファイル名
* @param $contents ファイルに書き込むデータ
*/
function write_file($filename, $contents){
$file = $this->dir.'/'.$filename;
$fp = fopen($file, 'w');
fwrite($fp, $contents);
@chmod($file, 0666);
fclose($fp);
}
0551その3
2006/02/14(火) 11:29:52ID:O2fgq8yY* 指定されたファイルの名前を新しいファイル名に変更します.
*
* @param $oldfile リネーム対象のファイル名
* @param $newfile 対象のファイルの新しい名前
*/
function rename_file($oldfile, $newfile){
return rename($this->dir.'/'.$oldfile, $this->dir.'/'.$newfile);
}
/**
* 指定されたファイルを削除します.
*/
function delete_file($filename){
return unlink($this->dir.'/'.$filename);
}
/**
* 指定されたファイルが存在するかどうかを調べます.
* ファイルが存在する場合に TRUE を返します.
*/
function file_exists($filename){
return file_exists($this->dir.'/'.$filename);
}
}
?>
0552nobodyさん
2006/02/14(火) 14:21:08ID:???すごくいいと思う。
こういうのは無しなんだろうか
function read_file($filename){
$file = $this->dir.'/'.$filename;
$str = @file_get_contents($file);
if( $str) return $str;
else return NULL;
}
0553nobodyさん
2006/02/14(火) 14:45:56ID:???どうもです。
file_get_contents にすればもっとシンプルに出来たんですが、
PHPのバージョンが古いと対応してないので、
代替手段としてこういう実装にしました。
PHPを導入してるレンタルサーバーって、
自分の知っている限りではみんなバージョンが4系なんだけど、
その中でも4.1*だったり4.3*だったりバラバラなんですよね。
0554nobodyさん
2006/02/14(火) 19:34:08ID:?????$str?.=?$line;
}
これよりimplode使ったほうが速いよ
$str = implode('', $lines);
0555nobodyさん
2006/02/14(火) 19:37:24ID:???0556nobodyさん
2006/02/15(水) 08:33:21ID:???0557nobodyさん
2006/02/15(水) 10:12:28ID:???本来なら返り値が必要ない関数であっても、
処理がうまくいったら TRUE、失敗した場合は FALSE を返すみたいな実装にしたほうが、
エラー処理が簡単になる場合がある。ケースバイケースだけどね。例えば、
■before■
function hoge(){
first_process();
second_process();
third_process();
}
function first_process(){ /* 何か処理をする */ }
function second_process(){ /* 何か処理をする */ }
function third_process(){ /* 何か処理をする */ }
■after■
function hoge(){
return first_process() & second_process() & third_process();
}
function first_process(){ /* 何か処理をして、成功したら TRUE を返す */ }
function second_process(){ /* 何か処理をして、成功したら TRUE を返す */ }
function third_process(){ /* 何か処理をして、成功したら TRUE を返す */ }
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();
}
}
----------------------------------------------------------
抜粋だから分かりづらくてすんません。あと、俺は少佐非難したつもりはないぞ。エールを送ったつもり。
■ このスレッドは過去ログ倉庫に格納されています