【PHP】自作スクリプト発表会
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
02/03/30 11:55ID:M/C/V7hb初心者が書いた入門スクリプト、ベテランが書いたすげースクリプト。
発表してね。
予めスクリプトの内容を明記してURLを貼り付けるのがよろしいかと。
マターリ進行でいきませう。
PHPが使える無料サーバ情報(レッツPHP!):
http://php.s3.to/php/
0457nobodyさん
2006/01/21(土) 23:10:58ID:???ま、どうでもいいけどさ
0458nobodyさん
2006/01/22(日) 00:32:05ID:???0459nobodyさん
2006/01/22(日) 02:08:31ID:???俺なら添え字を乱数で生成するけど
0460nobodyさん
2006/01/22(日) 02:16:54ID:???0461作ってみたわけだが@動作確認済み
2006/01/22(日) 02:43:40ID:???需要ないけどね、このおみくじ…。
0462nobodyさん
2006/01/22(日) 08:45:02ID:???ここって初心者が書いたスクリプトもOKなんでしょ?
こういう雰囲気だと出しにくいよ。
0463nobodyさん
2006/01/22(日) 08:58:32ID:???どっちも歓迎。
まぁ叩かれても諦めずにやれば良い物が書けるようになるさ
0464nobodyさん
2006/01/22(日) 13:00:12ID:???『携帯固有番号対応ホスト抜き出し関数』
function Get_USER_HOST(){
$host = getenv("REMOTE_HOST");
$addr = getenv("REMOTE_ADDR");
if($host == "" || $host ==$addr){
$host = gethostbyaddr($addr);
}
if(ereg("docomo.ne.jp",$host)){
$serial = $_SERVER[HTTP_USER_AGENT];
$serial = explode("ser",$serial);$serial = $serial[1];
$serial = substr($serial, 0, 11);
}
if(ereg("ezweb.ne.jp",$host)){
$serial = $_SERVER[HTTP_X_UP_SUBNO];
$serial = str_replace(".ezweb.ne.jp","",$serial);
}
if(ereg("jp-[a-z].ne.jp",$host)){
$serial = $_SERVER[HTTP_USER_AGENT];
$serial = explode("SN",$serial);$serial = $serial[1];
$serial = substr($serial, 0, 11);
}
if($host == "p2.2ch.net"){
$serial = $_SERVER[HTTP_USER_AGENT];
$serial = explode("p2-client-ip: ",$serial);$serial = $serial[1];
$serial = explode(";",$serial);$serial = $serial[0];
}
$USER_HOST['host'] = $host;
$USER_HOST['serial'] = $serial;
return $USER_HOST;
}
0465nobodyさん
2006/01/22(日) 13:18:34ID:???0466nobodyさん
2006/01/22(日) 13:43:40ID:???0467nobodyさん
2006/01/22(日) 14:24:04ID:???0468nobodyさん
2006/01/22(日) 14:31:40ID:???普通はこう
配列のkeyに日本語よくないねー
<?php
header("Content-Type: text/html; charset=Shift_JIS");
$data = array(
array( '大吉','残念、大吉を出すために運を使ってしまった'),
array( '中吉','ラッキー、今日はいいことありますよ♪'),
array( '小吉','小さな幸せ'),
array( '吉','つまらん一日を…'),
array( '凶','引き籠る')
);
$num = rand( 0, count( $data)-1);
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="ja">
<head>
<title>おみくじ</title>
</head>
<body>
<h1>おみくじ</h1>
<dl>
<dt><?php echo $data[$num][0]; ?></dt>
<dd><?php echo $data[$num][1]; ?></dd>
</dl>
</body>
</html>
0470nobodyさん
2006/01/23(月) 14:44:05ID:???array(
array(
'fortune' => '大吉',
'comment' => '残念、大吉を出すために運を使ってしまった'
),
array(
...
),
...
);
ってやるな
0471nobodyさん
2006/01/23(月) 17:49:51ID:???<?php
header("Content-Type: text/html; charset=Shift_JIS");
$data = array(
array( '凶','引き籠る')
);
$num = rand( 0, count( $data)-1);
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="ja">
<head>
<title>おみくじ</title>
</head>
<body>
<h1>おみくじ</h1>
<dl>
<dt><?php echo $data[$num][0]; ?></dt>
<dd><?php echo $data[$num][1]; ?></dd>
</dl>
</body>
</html>
ってやるな
0472468
2006/01/23(月) 20:29:00ID:???コーディング量が増えただけ
>>471
ちょwwwかわってないww
むしろ、こういうのはタブとかコンマ区切りのテキストファイルとかでデータ作っとく方がいいよね
<?
/* テキストファイルex.txt
大吉,残念、大吉を出すために運を使ってしまった
中吉,ラッキー、今日はいいことありますよ♪
小吉,小さな幸せ
吉,つまらん一日を…
凶,引き籠る
*/
$tmp = file( 'ex.txt');
$val = '';
foreach( $tmp as $val){
$data[] = explode( ',', $val);
}
nl2br( print_r( $data));
?>
0473nobodyさん
2006/01/23(月) 20:37:48ID:???不要
0474470
2006/01/24(火) 09:31:49ID:???> むしろ、こういうのはタブとかコンマ区切りのテキストファイルとかでデータ作っとく方がいいよね
基本はそれ前提で考えてる
なんで連想配列にするかっていうと、二次元配列の添字だけ
見ても何の処理してるのか分かりにくいから
まぁこんだけのスクリプトならどうでもいいけど、分かりやすく
書く習慣はとても大事だと思っているんで
0475nobodyさん
2006/01/24(火) 12:34:45ID:???473
ttp://www.google.com/search?hl=ja&lr=lang_ja&ie=UTF-8&oe=UTF-8&q=%E5%A4%89%E6%95%B0%E3%81%AE%E5%88%9D%E6%9C%9F%E5%8C%96&num=50
0476nobodyさん
2006/01/24(火) 14:01:05ID:???配列に入っている値を順に取り出す処理でループの外の初期化になんの
意味があると思って Google へのリンクを貼ってるのだろう
0477nobodyさん
2006/01/24(火) 16:41:34ID:6HwgBAbKこのスクリプト欲し過ぎる
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);
■ このスレッドは過去ログ倉庫に格納されています