5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

【PHP】自作スクリプト発表会

1 :nobodyさん:02/03/30 11:55 ID:M/C/V7hb
自分が書いたPHPスクリプトを発表するスレ。
初心者が書いた入門スクリプト、ベテランが書いたすげースクリプト。
発表してね。
予めスクリプトの内容を明記してURLを貼り付けるのがよろしいかと。
マターリ進行でいきませう。

PHPが使える無料サーバ情報(レッツPHP!):
http://php.s3.to/php/

2 :nobodyさん:02/03/30 12:13 ID:???
宣伝板でも逝け

3 :nobodyさん:02/03/30 12:32 ID:???
まず>>1から晒してね。

++++++++++++++++++++ 終了 ++++++++++++++++++++

4 :nobodyさん:02/03/30 17:14 ID:???
はずかしいのでsageで晒すことにしよう。
ttp://www.orb-2.info/other/source.php?sql_img_bbs.php

厨なスクリプトかもしれないけど、どんなもんでしょう?
ちなみに画像掲示板です。

5 :nobodyさん:02/03/30 22:45 ID:???
talksstpが(・∀・)イイと思った

6 :なると:02/03/31 03:05 ID:???
昨日はじめたようなプログラム初心者ですが、
晒していいのかなぁ、、

7 :nobodyさん:02/03/31 12:20 ID:e940DqcP
>>なるとさん
Hello world!でもいいですよ!

8 :nobodyさん:02/03/31 20:50 ID:BQ+/DH6N
ポマエラ!こんなロジック組んでくれ。おながいします

CSVデータの変更プログラム

列A,列B,列C
11,22,33
44,55,66
  ・ 
  ・
  ・

これを

列A,列B,列C
11,22,33
44,XX,66
  ・ 
  ・
  ・

55のところをXXに変更。

つまり、指定した列の指定した行を任意に変更できるロジック。
もちろん、なるべくメモリを食わないように。

9 :nobodyさん:02/03/31 21:47 ID:???
うるせースレ違いバカ。

10 :どっかであぷろだ晒し中:02/03/31 22:18 ID:???
>>4
フォームを echo で表示してるとこ、
「"」をいちいちエスケープするくらいなら「'」で書きゃいいのに、
と思った。
あと、他の表示の部分も、毎回変わる内容じゃなければ
上の方に変数にして固めておけば、少しはさっぱりするんじゃないかな。

それか、かちゅ〜しゃみたいに他のファイルにしとくとか。

他は、なんか自分よりコード綺麗でいいなと思ったり。

11 :nobodyさん:02/03/31 22:52 ID:???
>>4
書き方のスタイルの違いかもしれないけど、
echoじゃなくて、?>で閉じて普通に出力したほうが
見やすいと思った。
Dreamweaverで編集もできるし。

12 :11:02/03/31 23:17 ID:???
みんなに聞きたいんだけど、タグとか文字とか出力するときってどうしてる?

echo "<a href=\"xxx.php?a=$a\">$a</a>";

?>
<a href="xxx.php?a=<?= $a ?>"><?= $a ?></a>
<?

俺は後者。

13 :10:02/03/31 23:30 ID:???
>>12
げ、、、こんな書き方始めて知った。
?>で外すとき、いつもこう書いてたよ。

?>
<a href="xxx.php?a=<? echo $a; ?>"><? echo $a; ?></a>
<?

面倒、面倒と思ってたのに、そんなことが出来たとは・・・

14 :4:02/03/31 23:34 ID:???
レスついてますな。
10&11氏の意見は参考になるのでどうもありがとうございます。
エスケープするのは'だとなんか自分的にややこしいので\"使ってます。
12のは見てもらえばわかる通り前者です。

15 :11:02/04/01 00:49 ID:???
>>13
どのバージョンからできるようになったかは知らんが、
最近のはできる。
俺は<?= ?>より<? echo $a ?>のほうがいいだと思う。
互換性だけでなく見た目的にも。


16 : ◆AngelBlk :02/04/01 11:03 ID:???
自分はXMLのこと考えて
<?php echo $a; ?>
にしてるなぁ・・・。
面倒とは思うんだけど。

あと、タグとかは外に出す方かな。


17 :なると:02/04/01 21:49 ID:???
よくわからないけど、他人のソースとか、マニュアルとか読んで
カウンタを作ってみました。
自分でもわからないことが多いけど、とりあえず動くみたいです、、

<?
$file = "log.txt";

if(!($fp = fopen($file, "r"))){
/* ファイルが開けないときは終了 */
echo " ファイルが開けません!!";
exit;
}
$count = fgets($fp, 256);
fclose($fp);
$count = (int)$count;
$count++;

if(!($fp = fopen($file, "w"))){
echo " ファイルが開けません!";
exit;
}
fputs($fp, "$count");
fclose($fp);

?>

あなたは、<font color=#ff0000> <? echo $count; ?></font> 人目のPHPマニアです。。。
<br>

18 :なると:02/04/01 21:52 ID:IORYSc+w
さげちゃったです。。

19 :nobodyさん:02/04/01 22:20 ID:???
exit ("ファイルが開けません!!");とかは?
あと
$count = fgets($fp, filesize($file));
とかの方がいいのかもしれない。
あとflockとかも入れたほうがいいのかな。

20 :なると:02/04/01 22:50 ID:IORYSc+w
>>19
アドバイスありがとうございます!
$count = fgets($fp, filesize($file));ってことは、
つまり、漏れのやつだと256バイトを読み込んでるんだけど、
これだとファイルのサイズに合わせて読み込めて、軽くなるってことかな。。

flockはファイルロックですよね。。

21 :なると:02/04/01 22:53 ID:IORYSc+w
あれ。$count = fgets($fp, filesize($file));に変えたら
カウンタが1から動かなくなってしまった。

22 :nobodyさん:02/04/01 23:12 ID:???
ごめん折れにもわからなかった
逝って来る

23 :apacheuserさん:02/04/01 23:46 ID:???
>>20
一応マニュアルにはfgetsの二つ目の引数の大きさは
ファイルサイズを越えても問題ない、とあった気がする。

個人的にはエラーが出て終了するんじゃなくて、$countに
エラーを代入して数字の代わりにエラーメッセージを出力、
ってほうが好き。

24 :なると:02/04/02 00:53 ID:SHbCbPK7
>>23
おお、なるほど。
じゃあ、これでも問題はないと。。ありがとうございます。

というか今見てみると、
if(!($fp = fopen($file, "r")))の
if(!
の意味がわからない、、、調べてきます。。

25 :nobodyさん:02/04/02 02:21 ID:???
しかし、こうして見るとPHPは本当に簡単そうだな。

26 :apacheuserさん:02/04/02 07:38 ID:???
>>21
>あれ。$count = fgets($fp, filesize($file));に変えたら
>カウンタが1から動かなくなってしまった。

以下php.netより。

>string fgets ( int fp [, int length])
>Returns a string of up to length - 1 bytes read from the file
>pointed to by fp.

freadのほうは長さいっぱいまで読んでくれると書いてある。
>string fread ( int fp, int length)
>fread() reads up to length bytes from the file pointer
>referenced by fp.

試しにログファイルに2バイト以上のデータを突っ込んでみれ。
何かわかるかも。

27 :なると:02/04/02 12:55 ID:4fz1y7Df
>>24
自己レス。「!」は否定の演算子なので、
この場合は、ファイルが開かなかった場合、という意味っぽい。

>>25
初心者にもわかりやすくて、楽しいですよヽ(´ー`)ノ
>>26
わかったような、わからないような…。

28 :nobodyさん:02/04/02 17:51 ID:???
>>21
fgetsだと-1バイトで終わるからfreadに変えるのが正解かな
例えばlog.txtに1バイトしか入ってないと
fgetsだと1-1で0になるから
次の$count++で1になっていつまでたっても1から進まないのでは?

つうか分かりづらいので
fgetsの後に$count2とか作って、後で表示させた方が分かりやすいかもん

29 :28:02/04/02 17:55 ID:???
そもそも分かりづらいので最初からこれ出せば良かった>>26の日本語訳
fgets
http://jp.php.net/manual/ja/function.fgets.php
fread
http://jp.php.net/manual/ja/function.fread.php

30 :なると:02/04/02 18:22 ID:4fz1y7Df
簡単な掲示板に挑戦してみました。

<html>
<body bgcolor="#EEEEFF">
<blockquote>
<form method="post" action="<? echo $PHP_SELF; ?>"><b>名前</b><input name="name" type="text" size="20">
<b><br>内容</b><input name="mes" type="text" size="40"><input type="submit" value=" Send "><P>
<?

$lines = file("log.txt");
for($i = 0; $i < 10; $i++) {
echo $lines[$i];
}
if($name && $mes){
$mes = htmlspecialchars ($mes);
$name = htmlspecialchars ($name);
}

if(!($name)){
$name = "名無しさん\n";
}

$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);

?>
</form>
</blockquote>
</body>
</html>

31 :なると:02/04/02 18:23 ID:4fz1y7Df
>>28-29
おお!ありがとうございます。
今からじっくり読んでちょっと改良したものを作ってみますね。

32 :なると:02/04/02 18:55 ID:4fz1y7Df
>>28
おお!できた!すげぇ!
freadっていうのは、最高lengthバイトまで読み込んでくれるから、
ファイルのサイズの全部を読んでくれるってことなのかな。。

33 :apacheuserさん:02/04/03 01:59 ID:???
>>29
そういや日本語版があったな・・・。
鬱出汁脳・・・。

34 :apacheuserさん:02/04/03 02:03 ID:???
>>30
閲覧と書き込みの分岐が無くない?
あとログの出力がログの記入より前にあるから
書き込んでもすぐ反映されないのでは?

35 :なると:02/04/03 03:54 ID:p/YLm2dW
>>34
ほんとうだ!!
通りでおかしいと思った!!
直してみます。

あと、分岐がなくても掲示板としては動いているのですが、
分岐していたほうが都合がいいのでしょうか?

36 :nobodyさん:02/04/03 09:48 ID:???
>>35
書き込んだ後にF5押すと2重書き込みになっちゃう気配。
まぁ対策はいくらでもあるだろうけどね。

37 :nobodyさん:02/04/03 10:37 ID:???
>>30
forに固定入れてるようだけどsizeofで取得した方が楽じゃないかな
$line_c = sizeof($lines);
for($i=0; $i<$line_c; $i++) {
名無し処理の\nは取り除いてね、$linesのカウントずれるから
ついでに名無し処理のifはif(!$name){ でいいんじゃない?

38 :なると:02/04/03 18:16 ID:0xPsQVu6
>>35
そうなんですよ・・・。今対策をいろいろ試しているところです。
inputにnameを"sub"と指定して、
if($sub=="Send"){
を書き込みの前においてみたらできるかな、って思ったんですけど、
ダメでした・・・(;;)
>>36
sizeofってことは、配列内の変数を取得するってことですか?
自分にはよくわからないのですが、$linesの変数を返したのが
$line_cで、それをfor($i=0; $i<$line_c; $i++) {で返しちゃうと、
書き込みがずっと最新1件しか表示されなくなっちゃうんですよ・・・。
perlとかのCGIを見てみると、最初のほうに
「$max = 10」などと設定してからやってるみたいなんですけど、
sizeofを使う利点はどのような点か教えていただけますか?
なんかわかりにくい文章で申し訳ないです…。

39 :nobodyさん:02/04/03 20:52 ID:???
>>38
forで回す必要ある?aで開けばいいんじゃない

$fp = fopen("log.txt","a");
fputs($fp,$dat);
fclose ($fp);

40 :apacheuserさん:02/04/03 23:50 ID:???
ちょっと遅いけど、さっきfputの速度を計ってみますた。
カウンタを想定し7バイトのファイルを用意して、
256バイトずつ読むのとfilesize()で調べたサイズだけ読んでみた。
ファイルサイズを調べる分のオーバーヘッドがあるせいか
固定値で調べたほうが速かった。無視できるくらいだけど。
ちなみにもっと大きなサイズ(40K弱だったと思う)の場合
filesize()を調べたほうが圧倒的に速かった。
参考までに。

>>37,38
$maxが固定なのは恐らく表示件数・保存件数を一定にしたいからだと思う。
ただ、保存する件数が$max+1になってるけどな。

>>39
それをやるとファイルの一番後ろに書いてしまうことにならない?

41 :あぼーん:あぼーん
あぼーん

42 :なると:02/04/05 02:29 ID:OTHB+g89
>>39
ふにゃ。fopenのモードがwだと書き・ポインタ先頭で、
aだと書き・ポインタ終端と覚えたんです。
んで「書いたのが先頭にきたほうが読みやすいな」と思ったんですが、
aのほうがいいですか??
あと、forを使ってるのは単純にログがこの数字になったら自動的に消す、
っていうのをやってて、それ以外の方法を知らなかったりします…。
>>40
おお!すげぇ。やっぱりfilesize()にするべきですね。
ところで、$maxの件ですが、掲示板ってたいていログの限界数が決まってるじゃないですか。
それを考えると、$maxとかにしたほうが使いやすいかな、って思ったんですけど、
他にスマートに一定数になったらログが消えるシステムってありますか?


43 :なると:02/04/07 13:37 ID: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>

44 :なると:02/04/07 13:39 ID:b5XtSahI
ソースをそのまま書き込むのはさすがにうざいので、
どこかにUPしてきます(´д`)y-~~

45 :apacheuserさん:02/04/07 15:40 ID: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];
}
?>

46 :apacheuserさん:02/04/07 15:41 ID:5JNffQ+t
改行が多すぎ、と言われたので少し分割。
基本的になるとさんのと同じ。
"おい、ここはちょっと・・・"
って思ったところだけ変えて見ますた。

47 :apacheuserさん:02/04/07 15:48 ID:???
分割してねぇよ。
HTML部だけ省略だ。
HTMLの部分は>>43を参照。

48 :nobodyさん:02/04/07 16:55 ID:???
したの</form>はいらん。

49 :nobodyさん:02/04/07 22:29 ID:???
  $mes = str_replace("\r", "", $mes);
  $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);


50 :nobodyさん:02/04/08 01:35 ID:???
$mes = str_replace("\r\n|\r|\n", "<br>\n", $mes);


51 :apacheuserさん:02/04/10 23:54 ID:???
>>49
orで検索できるんですか。知らんかった。

>>50
それって改行入るからだめなんじゃ・・・。

52 :rootさん:02/04/28 19:19 ID:6TJDtFTq
ageてみる

53 :nobodyさん:02/04/28 22:04 ID:???
>>51
str_replaceの引数は全て配列でいけるのって
あまり知られてないのよね・・・

54 :nobodyさん:02/04/28 22:45 ID:???
>>53
配列?こういうこと?

$str[0] = "\r";
$str[1] = "\n";
$str[2] = "\r\n";

$mes = str_replace ($str, "<br>", $mes);

55 :nobodyさん:02/04/28 23:23 ID:???
>>function.str-replace.html
>>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>にならない?
ただ、展開される順番確認してないので確実ではない。
オネムナノ (-_ゞゴシゴシ

56 :東山 ◆tmcSEEZE :02/04/30 02:06 ID:???
今実験場が無いんで設置してないんだけど、
YAIGって海外の画像ギャラリースクリプトを改造してたりする。

いちおう特色はこんなん(オリジナルへの付加要素)
・スキン(埋め込むだけ)
・5つまでのアルバムに対応、それぞれに分別表示(強化予定)

ちょい作成に行き詰まったので、殆ど最初っから書き直そうと思ってる。
…まぁ自分のサイト用だから、公開するのはかなり先になるけど。

57 :nobodyさん:02/06/22 07:58 ID:???
PHPのコードは疑問だらけですね


58 :nobodyさん:02/06/23 15:02 ID:???
http://www.kensu.com/plywood.php

59 :nobodyさん:02/06/27 14:15 ID:???
>>58
ソースきれい

60 :nobodyさん:02/06/27 17:13 ID:???
ifとかwhileとか{}を省略できる場合でも、
やっぱり見た目的にはつけたほうがいいんでしょうか?

自分は省略して書いてるけど…
while(1)
  $hoge = 1
こんな感じ

61 :nobodyさん:02/06/27 17:23 ID:???
一人でやるなら好きな方で良いんでない?

62 :nobodyさん:02/06/27 20:43 ID:???
1人じゃなかったら?
例えばその、仕事とかで書くなら。

63 :nobodyさん:02/06/28 02:54 ID:???
>62
プロジェクトマネージャーの指示に従う。

64 :nobodyさん:02/06/28 08:35 ID:???
>>60
その辺の是非についてはちょっと前にこんな議論があったりしました。
参考にしてみては?

この会社辞めようと思ったソースコード#4 @マ板
http://pc.2ch.net/test/read.cgi/prog/1021560641/118-

65 :nobodyさん:02/10/22 18:04 ID:Dc8ZNLM6
age

66 :65:02/10/22 18:04 ID:???
うわー、誤爆スマソ

67 :山崎渉:03/01/15 13:48 ID:???
(^^)

21 KB
■ このスレッドは過去ログ倉庫に格納されています

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)