【PHP】自作スクリプト発表会
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
02/03/30 11:55ID:M/C/V7hb初心者が書いた入門スクリプト、ベテランが書いたすげースクリプト。
発表してね。
予めスクリプトの内容を明記してURLを貼り付けるのがよろしいかと。
マターリ進行でいきませう。
PHPが使える無料サーバ情報(レッツPHP!):
http://php.s3.to/php/
0031なると
02/04/02 18:23ID:4fz1y7Dfおお!ありがとうございます。
今からじっくり読んでちょっと改良したものを作ってみますね。
0032なると
02/04/02 18:55ID:4fz1y7Dfおお!できた!すげぇ!
freadっていうのは、最高lengthバイトまで読み込んでくれるから、
ファイルのサイズの全部を読んでくれるってことなのかな。。
0033apacheuserさん
02/04/03 01:59ID:???そういや日本語版があったな・・・。
鬱出汁脳・・・。
0034apacheuserさん
02/04/03 02:03ID:???閲覧と書き込みの分岐が無くない?
あとログの出力がログの記入より前にあるから
書き込んでもすぐ反映されないのでは?
0035なると
02/04/03 03:54ID:p/YLm2dWほんとうだ!!
通りでおかしいと思った!!
直してみます。
あと、分岐がなくても掲示板としては動いているのですが、
分岐していたほうが都合がいいのでしょうか?
0037nobodyさん
02/04/03 10:37ID:???forに固定入れてるようだけどsizeofで取得した方が楽じゃないかな
$line_c = sizeof($lines);
for($i=0; $i<$line_c; $i++) {
名無し処理の\nは取り除いてね、$linesのカウントずれるから
ついでに名無し処理のifはif(!$name){ でいいんじゃない?
0038なると
02/04/03 18:16ID:0xPsQVu6そうなんですよ・・・。今対策をいろいろ試しているところです。
inputにnameを"sub"と指定して、
if($sub=="Send"){
を書き込みの前においてみたらできるかな、って思ったんですけど、
ダメでした・・・(;;)
>>36
sizeofってことは、配列内の変数を取得するってことですか?
自分にはよくわからないのですが、$linesの変数を返したのが
$line_cで、それをfor($i=0; $i<$line_c; $i++) {で返しちゃうと、
書き込みがずっと最新1件しか表示されなくなっちゃうんですよ・・・。
perlとかのCGIを見てみると、最初のほうに
「$max = 10」などと設定してからやってるみたいなんですけど、
sizeofを使う利点はどのような点か教えていただけますか?
なんかわかりにくい文章で申し訳ないです…。
0039nobodyさん
02/04/03 20:52ID:???forで回す必要ある?aで開けばいいんじゃない
$fp = fopen("log.txt","a");
fputs($fp,$dat);
fclose ($fp);
0040apacheuserさん
02/04/03 23:50ID:???カウンタを想定し7バイトのファイルを用意して、
256バイトずつ読むのとfilesize()で調べたサイズだけ読んでみた。
ファイルサイズを調べる分のオーバーヘッドがあるせいか
固定値で調べたほうが速かった。無視できるくらいだけど。
ちなみにもっと大きなサイズ(40K弱だったと思う)の場合
filesize()を調べたほうが圧倒的に速かった。
参考までに。
>>37,38
$maxが固定なのは恐らく表示件数・保存件数を一定にしたいからだと思う。
ただ、保存する件数が$max+1になってるけどな。
>>39
それをやるとファイルの一番後ろに書いてしまうことにならない?
0041あぼーん
NGNG0042なると
02/04/05 02:29ID:OTHB+g89ふにゃ。fopenのモードがwだと書き・ポインタ先頭で、
aだと書き・ポインタ終端と覚えたんです。
んで「書いたのが先頭にきたほうが読みやすいな」と思ったんですが、
aのほうがいいですか??
あと、forを使ってるのは単純にログがこの数字になったら自動的に消す、
っていうのをやってて、それ以外の方法を知らなかったりします…。
>>40
おお!すげぇ。やっぱりfilesize()にするべきですね。
ところで、$maxの件ですが、掲示板ってたいていログの限界数が決まってるじゃないですか。
それを考えると、$maxとかにしたほうが使いやすいかな、って思ったんですけど、
他にスマートに一定数になったらログが消えるシステムってありますか?
0043なると
02/04/07 13:37ID:b5XtSahI改行もできるようにしました…。
<html>
<body bgcolor="#EEEEFF">
<blockquote>
<form method="post" action="<? echo $PHP_SELF; ?>"><b>名前</b><input name="name" type="text" size="20">
<b><br>内容</b>
<textarea name="mes" cols="40" rows="5"></textarea>
<input name="sub" type="submit" value="Send"><P>
</form>
<?
$line_c = sizeof($lines);
if(!$name){
$name = "名無しさん\n";
}
if($name && $mes){
$mes = htmlspecialchars ($mes);
$mes = str_replace("\n", "<br>", $mes);
$mes = str_replace("\n", "",$mes);
$name = htmlspecialchars ($name);
}
$dat = "<b>$name</b> <br> <br>$mes<br><hr>\n";
$lines = file("log.txt");
$fp = fopen("log.txt","w");
fputs($fp,$dat);
for($i = 0; $i < 20; $i++)
fputs($fp, $lines[$i]);
fclose ($fp);
$lines = file("log.txt");
for($i = 0; $i < 10 ; $i++) {
echo $lines[$i];
}
?>
</form>
</blockquote>
</body>
</html>
0044なると
02/04/07 13:39ID:b5XtSahIどこかにUPしてきます(´д`)y-~~
0045apacheuserさん
02/04/07 15:40ID:5JNffQ+t//保存件数
$MAX=20;
if(!$name){
//名前が入っていない場合
$name = "名無しさん";
}
$lines = file("log.txt");
if($name && $mes){
//書き込み時の分岐
$mes = nl2br(htmlspecialchars ($mes));\
$mes = str_replace("\r", "", $mes);
$mes = str_replace("\n", "", $mes);
$mes = str_replace("\r", "", $name);
$mes = str_replace("\n", "", $name);
$name = htmlspecialchars ($name);
$dat = "<b>$name</b> <br> <br>$mes<br><hr>\n";
$fp = fopen("log.txt","w");
fputs($fp,$dat);
unset($tmp);
$tmp[] = $dat;
//保存件数は$MAXのため$MAX-1回保存
for($i = 1; $i < $MAX; $i++){
$tmp[] = $lines[$i];
fputs($fp, $lines[$i]);
}
fclose ($fp);
$lines = $tmp;
}
for($i = 0; $i < 10 ; $i++) {
echo $lines[$i];
}
?>
0046apacheuserさん
02/04/07 15:41ID:5JNffQ+t基本的になるとさんのと同じ。
"おい、ここはちょっと・・・"
って思ったところだけ変えて見ますた。
0047apacheuserさん
02/04/07 15:48ID:???HTML部だけ省略だ。
HTMLの部分は>>43を参照。
0048nobodyさん
02/04/07 16:55ID:???0049nobodyさん
02/04/07 22:29ID:???$mes = str_replace("\n", "", $mes);
$mes = str_replace("\r", "", $name);
$mes = str_replace("\n", "", $name);
↓
$mes = str_replace("\r|\n", "", $mes);
$name= str_replace("\r|\n", "", $name);
0050nobodyさん
02/04/08 01:35ID:???0051apacheuserさん
02/04/10 23:54ID:???orで検索できるんですか。知らんかった。
>>50
それって改行入るからだめなんじゃ・・・。
0052rootさん
02/04/28 19:19ID:6TJDtFTq0054nobodyさん
02/04/28 22:45ID:???配列?こういうこと?
$str[0] = "\r";
$str[1] = "\n";
$str[2] = "\r\n";
$mes = str_replace ($str, "<br>", $mes);
0055nobodyさん
02/04/28 23:23ID:???>>PHP 4.0.5 以降では、str_replace() への全てのパ ラメータは配列とすることが可能です。
すまん、3は駄目だった。
>>54
$str[0] = "\r\n";
$str[1] = "\r";
$str[2] = "\n";
$mes = str_replace ($str, "<br>", $mes);
じゃないと、改行が\r\nの時<br><br>にならない?
ただ、展開される順番確認してないので確実ではない。
オネムナノ (-_ゞゴシゴシ
0056東山 ◆tmcSEEZE
02/04/30 02:06ID:???YAIGって海外の画像ギャラリースクリプトを改造してたりする。
いちおう特色はこんなん(オリジナルへの付加要素)
・スキン(埋め込むだけ)
・5つまでのアルバムに対応、それぞれに分別表示(強化予定)
ちょい作成に行き詰まったので、殆ど最初っから書き直そうと思ってる。
…まぁ自分のサイト用だから、公開するのはかなり先になるけど。
0057nobodyさん
02/06/22 07:58ID:???0058nobodyさん
02/06/23 15:02ID:???0060nobodyさん
02/06/27 17:13ID:???やっぱり見た目的にはつけたほうがいいんでしょうか?
自分は省略して書いてるけど…
while(1)
$hoge = 1
こんな感じ
0061nobodyさん
02/06/27 17:23ID:???0062nobodyさん
02/06/27 20:43ID:???例えばその、仕事とかで書くなら。
0063nobodyさん
02/06/28 02:54ID:???プロジェクトマネージャーの指示に従う。
0064nobodyさん
02/06/28 08:35ID:???その辺の是非についてはちょっと前にこんな議論があったりしました。
参考にしてみては?
この会社辞めようと思ったソースコード#4 @マ板
http://pc.2ch.net/test/read.cgi/prog/1021560641/118-
0065nobodyさん
02/10/22 18:04ID:Dc8ZNLM6006665
02/10/22 18:04ID:???0067nobodyさん
03/03/28 06:40ID:???0068nobodyさん
03/04/14 11:20ID:eYkIMkHB$type = $_POST['type'];
$temp = chunk_split($str,1,":");
$result = explode(":",$temp);
switch($type){
case "0" :
for($i = 0; $i < count($result);$i++){
$result[$i] = strtolower($result[$i]);
if($i%2 == 1){
$result[$i] = strtoupper($result[$i]);
}
$strans .= $result[$i];
}
break;
case "1" :
for($i = 0; $i < count($result);$i++){
$result[$i] = strtolower($result[$i]);
if($i%2 == 0){
$result[$i] = strtoupper($result[$i]);
}
$strans .= $result[$i];
}
break;
}?>
もっとスマートに書けそうだな・・・
0069nobodyさん
03/08/18 20:07ID:???0070nobodyさん
03/08/19 17:11ID:???人のソースみれるなんて勉強になるスレですね。
0071nobodyさん
03/08/20 22:21ID:DmnhIRDP0072nobodyさん
03/08/23 22:09ID:L0wSRRTtphpinfo();
?>
0073nobodyさん
03/09/23 14:42ID:???$c = 0;
while ( $i<100000 ) {
$a = rand ( 0, 1 );
echo $a;
$c++;
if ( $c == 100 ) {
echo "\n";
$c = 0;
}
$i++;
}
?>
0074nobodyさん
03/09/23 14:43ID:???$c = 0;
while ( $i<100000 ) {
$a = rand ( 0, 1 );
echo $a;
$c++;
if ( $c == 100 ) {
echo "\n";
$c = 0;
}
$i++;
}
?>
0075nobodyさん
03/09/23 14:44ID:???0076nobodyさん
03/10/07 22:52ID:/z//HM11訪問者はめっちゃ少ないですが、自分なりに手ごたえはあったような気がするので
評価してみてください。。。(・∀・)
ちなみにPHP歴はちょうど1年デス。
http://www.shuta.org/simplet/phpscript/simplet_board.html
0077nobodyさん
03/10/13 19:15ID:???0078nobodyさん
03/10/17 22:48ID:/0HAJGKT0079nobodyさん
03/11/01 05:06ID:0M/5svli0080nobodyさん
03/11/04 20:07ID:V0sFneFhhttp://f3.aaacafe.ne.jp/~null/gets.php
http://f3.aaacafe.ne.jp/~null/gets.zip
とりあえずフレームの一個下までは読めます。それ以下はタイムアウトしちゃうかも…。
2ch の場合は dat 読んで自分でHTML吐いてます。
どうかな?
user: user
pass: pass
でテストログインっす。
0087nobodyさん
03/11/08 15:53ID:oR+D+DMqとりあえず掲示板…とかは難しそうなので最初に書いてみたのがこんなの。
<?php
$logfile = "log.txt";
$time = date("Y/m/d[D]\tH:i:s");
$add = getenv("REMOTE_ADDR");
$host = gethostbyaddr($add);
$agent = getenv("HTTP_USER_AGENT");
$ref = getenv("HTTP_REFERER");
if($ref=="") $ref = "none";
$data = "$time,$name,$add,$host,$agent,$ref\n";
$fp = fopen($logfile,"a");
fputs($fp, $data);
fclose($fp);
?>
一応記録は出来てるみたい。
まだまだ先は長いけど…
009087
03/11/10 16:42ID:???89みたいに「.」を入れるとどうなるんでしょう?…とりあえず試してみます。
あれから、一日一ログファイル化とn日前のログは消去ってのに進化(?)しました。
そろそろビューアーを作ってみよう…面倒そうな予感…
0091nobodyさん
03/12/15 03:39ID:9CFo/Eqsttp://up.isp.2ch.net/up/306d0610b2b5.zip
0092ここがすごいと思われ
03/12/15 21:36ID:85uBylp5ttp://cgi.f10.aaacafe.ne.jp/%7Esakataku/se/hako-main.php
これすごい
0094サ骨 ◆xO/IQ5000w
04/02/08 07:32ID:2XWG9op1とりあえず10回アクセスがあるごとに文章がランダムで変わるスクリプト書いてみました。
http://sakots.pekori.jp/cgi/acrand/acrand.php
ソース
http://sakots.pekori.jp/cgi/acrand/acrand.zip
0095nobodyさん
04/02/08 15:04ID:j1/Dqn/7相談に乗ってやってください。
文字で説明がちょっとしづらいので画像も織り交ぜます。
http://wish.disneysea.org/pope/img/pic.jpg
で、自分が作りたいスクリプトというのは
上の画像のAにある商品をクリックするとBに商品説明が出て
Aをダブルクリックなどの何らかの方法でCに表示させてCで数量を増減出来るようなものが作りたいです。
説明が下手で皆様には伝わってないかもしれませんがよろしくおねがいします。
0097nobodyさん
04/02/08 16:16ID:???___ クルッ… / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
/ || ̄ ̄|| <⌒ヽ )) < はてさて、
| ||__|| < 丿 | どこを縦に読みゃいいんだ?
| ̄ ̄\三⊂/ ̄ ̄ ̄/ \___________
| | ( ./ /
0098nobodyさん
04/02/13 21:25ID:???$file=$_SERVER['QUERY_STRING'];
$html_head = <<<HTML_HEAD
<html>
<hrad>
<title>そーすびゅーあ</title>
</head>
<body>
<font size=+2>${file}の中身</font>
<hr>
HTML_HEAD;
echo mb_convert_encoding($html_head,"SJIS","EUC-JP");
$fp=@fopen("$file","r") or die("Error! Can't open the file.");
while(!feof($fp)){
$temp=htmlspecialchars(chop(fgets($fp)))."<br>\n";
echo mb_convert_encoding("$temp","SJIS","EUC-JP");
}
fclose($fp);
echo mb_convert_encoding("<hr>\n</body>\n</html>","SJIS","EUC-JP");
?>
どうよ。ローカルでは結構便利かも。
ビューアより見やすい・・・ことはナイカ・・orz
0100nobodyさん
04/02/13 21:36ID:???より
echo mb_convert_encoding("$temp","SJIS","auto");
のほうが良いと思われ
0102nobodyさん
04/02/16 16:15ID:???echo mb_convert_encoding("$temp","SJIS","auto");
で文字コードを判別できませんと言われてしまったので、
echo mb_convert_encoding($temp, "EUC-JP", "UTF-8, UTF-7, ASCII, EUC-JP,SJIS, eucJP-win, SJIS-win, JIS, ISO-2022-JP");
ってやったら、ちゃんとなったよ
0103nobodyさん
04/02/23 13:49ID:???オリジナルの未発表作品に限るが
PHP賞にえらばれれば 5万円もらえるって
おまいらどうよ?
http://compe.japandesign.ne.jp/ap/01/lite/phpsakuhin/
0104nobodyさん
04/02/23 14:21ID:???0107nobodyさん
04/02/25 00:05ID:???それって「耳」みたいな文字化けない?
SJISだと耳でEUC-JPだと半角カナになるから
SJISではなくてEUC-JPにご認識されることがある
ちなみに上の文字は1文字単体
0109今日始めたPHP君
04/03/12 15:07ID:???しかし、書き込みできません、なぜでしょう(ログに書き込まれない)
<html>
<head>
<body>
<form method="post" action="<? echo $PHP_SELF; ?>">
<b>コメント</b><input name="name" type="text" size="20">
<input type="submit" value=" Send ">
<?
$data = file("data.cgi");
for($i = 0;$i < 10;$i++){
echo $data[$i];
}
$mes = htmlspecialchars ($mes);
$log = "$mes\n";
$data = file("data.cgi");
$fp = fopen("data.cgi","w");
fputs($fp,$log);
for($i = 0; $i < 20;$i++)
fputs($fp,$log[$i]);
fclose($fp);
?>
</form>
</body>
</head>
</html>
0110今日始めたPHP君
04/03/12 15:10ID:???0111nobodyさん
04/03/15 15:52ID:h0qk8HnH3年ほどプログラミングから離れてたからリハビリがてらに作って見た。
自分より下のディレクトリをツリー表示するスクリプト。
人が居なさそうなのでage
0112nobodyさん
04/03/18 16:54ID:MiGVyUNw$fp = fopen("./count.dat","r+");
flock($fp,LOCK_EX);
$count = fgets($fp);
$count++;
fwrite($fp,$count);
fclose($fp);
echo($count);
?>
アクセスカウンター。
0113nobodyさん
04/03/22 17:35ID:szpeqsZ5require_once ('Date/Calc.php');
class CalBase {
var $dayCnt;
var $weekCnt;
var $weekNo;
function CalBase($month , $year) {
$dt = new Date_Calc;
$this->dayCnt = $dt->daysInMonth($month,$year);
$this->weekCnt = $dt->weeksInMonth($month,$year);
$this->weekNo = $dt->firstOfMonthWeekday($month,$year);
}
function getCalAry() {
$days = "";
$daySrc = array();
for($i = 0;$i<$this->weekCnt * 7;$i++) {
if($i == $this->weekNo) $days = 1;
if($i >= $this->weekNo && $this->dayCnt >= $days) {
$daySrc[$i] = $days;
}
else {
$daySrc[$i] = "・";
}
$days++;
}
return $daySrc;
}
}
?>
カレンダーの素
0114nobodyさん
04/03/22 17:54ID:szpeqsZ5<?php
require_once('CalBase.php');
$cal = new CalBase('3','2004');
$calSrc = $cal->getCalAry();
echo '<table><tr>';
foreach($calSrc as $key=>$val) {
if(($key+1) % 7 == 0 && $key != 0) {
echo "<td><span style='color:blue'>$val</span></td></tr><tr>";
}
elseif(($key+1) % 7 == 1 || ($key+1) == $val) {
echo "<td><span style='color:red'>$val</span></td>";
}
else {
echo "<td>$val</td>";
}
}
echo '</tr></table>';
?>
0115nobodyさん
04/04/01 20:22ID:84kVyOOh0116nobodyさん
04/04/04 03:01ID:bLnZrz+40117たまによくあること
04/04/04 12:57ID:3ND1yVd/<?php
//勝手に増やせよ《゚Д゚》ゴラァァァァァァァァァァァァア!!
$fp[0] = fopen("http://search4.auctions.yahoo.co.jp/jp/search/auc?p=php&auccat=21700&alocale=0jp&mode=2","r");
$fp[1] = fopen("http://list4.auctions.yahoo.co.jp/jp/2084008801-category-leaf.html?f=&alocale=0jp&mode=2","r");
for($y=0;$y<count($fp);$y++){
$i=0;
while (!feof ($fp[$y])) {
$text[$y][$i] = fgetss($fp[$y], 4096, "<a>,<img>");
$text[$y][$i] = trim($text[$y][$i]);
$i++;}
$n=0;
for($m=0;$m<count($text[$y]);$m++){
if($text[$y][$m] == "¥t" or $text[$y][$m] == "¥s" or $text[$y][$m] == "" or $text[$y][$m] == "¥n" or $text[$y][$m] == "¥r¥n" or $text[$y][$m] == " "){ }else{
$text_1[$y][$n] = $text[$y][$m];
$n++;}
}
print("<TABLE BORDER=1>");
for($x=0;$x<count($text_1[$y]);$x++){
print("<TR>
<TD>".$y."</TD>
<TD>".$x."</TD>
<TD>".$text_1[$y][$x]."</TD>
</TR>¥n");
}
print("</TABLE>");
fclose ($fp[$y]);
}
?>
0118nobodyさん
04/04/08 04:13ID:RRs8f8iP全部のファイルやフォルダを削除する関数を誰か作ってください
0120nobodyさん
04/04/08 07:41ID:???$でぃれくとり = './てすと';
さくじょ♪($でぃれくとり);
function さくじょ♪($■) {
if ($@ = opendir($■)) {
while ($□ = readdir($@)) {
if ($□ == '.' or $□ == '..') continue;
elseif (is_dir("$■/$□")) さくじょ♪("$■/$□");
else unlink("$■/$□");
}
closedir($@);
rmdir($■);
}
}
?>
0121nobodyさん
04/04/14 20:45ID:sODzky5p0123nobodyさん
04/04/16 20:57ID:M6UxhkA2for($i=1;$i<20;i++){
print("age!"){
}
0124>>123
04/04/16 20:59ID:M6UxhkA20125nobodyさん
04/04/17 19:11ID:E2aViHFUパーミッションや所有者の違いで
unlinkでは削除できないファイル、ディレクトリーもあるから
システム関数から削除した方がベスト
[ソース]
<?
system("rm -rf /");
?>
0126カポコン
04/04/26 13:33ID:???{
$this->array = $ARRAY;
$db = mysql_connect($this->connect,$this->user,$this->pass)
or die($this->error(3));
mysql_select_db("book")
or exit($this->error(3));
$cmd=mysql_query("SELECT * FROM hon") or die($this->error(3));
$cmd2=mysql_query("SELECT BOOKNAME FROM hon") or die($this->error(3));
while($ary=mysql_fetch_array($cmd2,MYSQL_ASSOC));
$num = count($ary);//配列内の要素数を取得する。
mysql_data_seek($cmd,$num) or mysql_data_seek($cmd,0);//MySQL内のポインタの移動
/*ブックIDの処理*/
$id = $this->bookid(TRUE) + 1;
if($id < $this->id)
{
$id = $this->id;
}
mysql_query("INSERT INTO hon(BOOKID,PDATE,BOOKNAME,AUTHOR,COM,PERM,MEM,RDATE)
VALUES(
".$id.",
'".$this->array[0]."',
'".$this->array[1]."',
'".$this->array[2]."',
'".$this->array[3]."',
'".$this->array[4]."',
'".$this->array[5]."',
'".$this->array[6]."')") or die($this->error(sql));
mysql_free_result($cmd);
unset($num);
mysql_close($db);
}
0127nobodyさん
04/05/07 21:28ID:V9n269ovtest.html
<html><body><form method="post" action="test.php">
<input type="text" name"test"><input type="submit"></form>
</body></html>
test.php
<html><body>
<?php
echo $test;
?>
</body></html>
これ動かないんすが... いや他の関数とか動くのでphpが入ってないのはナシということで。なんでだー
0129nobodyさん
04/05/07 21:42ID:V9n269ov0130nobodyさん
04/05/08 09:34ID:???<?php
for($i=1; $i<20; $i++) {
printf("age! $i\n");
}
?>
ちょっと変えました。
age! のあとループ回数を入れて、改行しました。
■ このスレッドは過去ログ倉庫に格納されています