来年こそは無職を脱したいと思ってる前向きな人いますか

このエントリーをはてなブックマークに追加
1家族で初詣
俺にできる事はプログラム組むことを教えるくらいだが
2金魚と初詣:2006/12/30(土) 04:16:21.20 ID:2NE8x6AE0
そうですね
3猪(倉庫係り):2006/12/30(土) 04:16:39.34 ID:pOicW/5S0
そうなんですか?
4家族で初詣:2006/12/30(土) 04:17:22.72 ID:Wv9W/nmQ0
いませんかー
5あいつと初詣:2006/12/30(土) 04:18:51.56 ID:yWsx7LuP0
HTML組めても就職は無理だよ
6家族で初詣:2006/12/30(土) 04:20:18.39 ID:Wv9W/nmQ0
まぁ、HTMLだけじゃねぇ
7家族で初詣:2006/12/30(土) 04:20:46.58 ID:Wv9W/nmQ0
つか、HTMLはプログラムではないんだが
8おせつ:2006/12/30(土) 04:21:14.38 ID:K/fc7f6K0
保育士の資格だけ持っててもねぇ・・・_| ̄|○
9猪(カビ):2006/12/30(土) 04:21:28.53 ID:cf+MuXMx0
お前がまず就職しろよ
10家族で初詣:2006/12/30(土) 04:22:15.75 ID:Wv9W/nmQ0
>>8
いいじゃないか
最近は働く女性が増えたので、保育施設がどこもたりなくて大変みたいだし
働き口なんていくらでもありそうだけど
11家族で初詣:2006/12/30(土) 04:22:57.79 ID:Wv9W/nmQ0
>>9
してるよ
SIベンダに6年ほど
12おせつ:2006/12/30(土) 04:23:38.32 ID:K/fc7f6K0
>>10
子どもと遊ぶ分にはいいんだ
ただ他の先生とか親とか給料とかね
児童福祉は賃金安くてもうぬるぽ
13おみくじ(ひく金ねー):2006/12/30(土) 04:23:45.16 ID:YtpjMOWi0
おしえてくれ!
14おせち(30,000円):2006/12/30(土) 04:24:58.60 ID:CetveIKPO
C♯って、C++から変わったトコある?
15家族で初詣:2006/12/30(土) 04:25:17.38 ID:Wv9W/nmQ0
>>12
安いのか・・?
実態は知らないけど、俺の姉が1歳と4歳の子供二人いて、月8万保育園にかかってると聞いた
しかも二人いるから割引になってその値段だと聞いて、保育施設は儲かるんだなと思ってた
16家族で初詣:2006/12/30(土) 04:26:37.44 ID:Wv9W/nmQ0
>>13
おぉ
よかったよ
雑談だけで終わったらどうしようかと思ってた
ちょい待ってね
>>14
質が違うよ
C#はGUIの開発環境ベースだから
17おせつ:2006/12/30(土) 04:29:29.50 ID:K/fc7f6K0
>>15
地域にもよるだろうが近場で探そうとすると
初任給が高くて14〜15
税金とか保険とかを考えると手取り12がいいとこ

東京あたりに出ればちょっとは高くなるんだろうが
それでも一人暮らしするにはどう考えても足りない

('A`)ウボアー
18初詣でかつあげされた:2006/12/30(土) 05:02:07.92 ID:Wv9W/nmQ0
Cの話題が出てたのでC関連にしようかと思ったんですが。
とっつきやすいPHPでやることにします。
前回もPHPだったので、そのときのリソースが使えるし。

プログラムの初歩から始め、簡単な掲示板を作れるようになる事を目指します。
フリーのWEBサーバスペースを登録したので、そこで練習用プログラムを動かして見ます。

対象者:プログラムなんて書いたことないですってヒトで全然いいです

講習手順:
1.WEBページが表示される仕組みを簡単に解説
2.ファイルをWEBサーバーに送る、FTPの説明
3.FTPソフトの設定(必要ならダウンロード)
4.PHPプログラムとは
5.PHPで文字を表示させる
6.繰り返し命令
7.条件分岐命令
8.入力された文字を取得
9.サーバ上のファイルのデータを取得
10.サーバ上のファイルにデータを入力
11.アクセスカウンターを作ってみる
12.掲示板を作ってみる
19初詣でかつあげされた:2006/12/30(土) 05:05:36.38 ID:Wv9W/nmQ0
基本的に、このスレにレスをする形で書いていきます。
5番以降の実作業段階では、質問とかもあると思うので、メッセやメールで質問を受け付けます。
大体、8時くらいまでに掲示板ができればいいなぁと思っています。
難しく考えず、興味がある方は参加してみてください。
20給食のおばさんと初詣:2006/12/30(土) 05:06:33.82 ID:yWsx7LuP0
昔、PHP&MYSQLでオークションサイト作ったな。

まぁ。ガンガッテクレ
21初詣でかつあげされた:2006/12/30(土) 05:08:05.73 ID:Wv9W/nmQ0
では、まずWEBページが表示される仕組みについて

2chに来るヒトなら大体はわかっているかもしれませんが。
まず、WEBページを表示する為には、IEなどのWEBブラウザが必要ですね
WEBブラウザが何をしているかと言うと、WEBサーバーにHTTPというプロトコルで通信を行い、HTML
ファイルの内容を取得し、それを表示しています。

プロトコルというのは、通信をする際の決まりのようなものです。
例えば、電話をする時、決まり事がないと、自分が話し出したときに相手も一緒に話し出して、
どちらのハナシをすればいいかわからなくなる事がありますね
こう言うことがないように、例えばAさんが「以上です」というまではBさんは話せないようにし、同じように
Bさんが「以上です」というまではAさんは話せない、という決まりを決めておけば、スムーズに会話が出来ますね
まぁ、人間同士だと無味乾燥すぎますが。コンピュータ同士だと、この方が便利なんです。
そういう決まりを、プロトコルと呼び、HTTPというのはその一つなんですな

ブラウザとWEBサーバも、HTTPというプロトコルで通信を行い、HTMLファイルを送受信しています。
あるURLのHTMLをくれ、と、ブラウザがサーバにリクエストし、サーバは指定されたHTMLを返します。
そのHTMLにかかれているとおりにブラウザが画面を作る、というわけです。
22初詣でかつあげされた:2006/12/30(土) 05:09:08.16 ID:Wv9W/nmQ0
簡単に絵で書くと、こんな感じです
ttp://www.0yen-web.com/usr/vip2ch/image/server.jpg
23給食のおばさんと初詣:2006/12/30(土) 05:10:36.11 ID:yWsx7LuP0
随分基本からなんだな。。。
24初夢(声優とデート):2006/12/30(土) 05:10:52.09 ID:jN10wOO10
なるほど。先生続きを!!
25初詣でかつあげされた:2006/12/30(土) 05:11:38.82 ID:Wv9W/nmQ0
では次に、FTPについて

HTTPは、指定されたURLの情報を取得するプロトコル(通信の決まりごと)でしたが。
FTPも、やはりプロトコルの1つです。
FTPは、WEBサーバに接続し、WEBサーバ上のファイルを取得したり、逆に自分のパソコンの中のファイルを
サーバに送ったりすることが出来ます。
HTTPとどう違うかと言えば、HTTPは1つのリクエスト(要求)に対して1つのHTMLファイルの送信を行う事で
完結するのに対し、FTPはサーバに一度ログインすれば、その後色んなファイルをサーバとやり取りする事が
可能になります。
自分のPC内のファイルをサーバにアップロードする時などによく使われます。

サーバ上で動くプログラムを書く場合は、
1.まず自分のパソコンでプログラムを書く
2.FTPでサーバにプログラムの書かれたファイルを送る
3.動作を確認する
というような手順になります。

これ以外にも、直接サーバにログインしてサーバ上のファイルを扱ったりするプロトコルもありますが、
今回は自分のパソコンで作業し、FTPを使ってサーバに送る手順を取る事にします。
26初詣でかつあげされた:2006/12/30(土) 05:12:42.02 ID:Wv9W/nmQ0
では、さっそくFTPでサーバにつないで見ましょう

FTPでサーバと通信をする為には、FTPクライアントと呼ばれるソフトウェアが必要になります。
クライアントと言うのは、サーバと対になるコトバで。
作業などの要求を行うモノをクライアント、その要求に応えて作業などを行うモノをサーバと呼びます。
HTTPプロトコルで言えば、ブラウザがクライアントで、WEBサーバがサーバとなりますね。
電話で保険の資料を請求する時は、電話をかけたヒトがクライアント、電話を受けて資料を送るスタッフが
サーバになりますね。
27初詣でかつあげされた:2006/12/30(土) 05:13:24.64 ID:Wv9W/nmQ0
では、FTPソフトについてですが。
使いやすくて無料のFTPクライアントはいくつもありますが、今回はその中でFFFTPというソフトを使います。
勿論、既に何かFTPクライアントソフトウェアを持っている方はそれを使っていただいて結構です。

FFFTPは、vectorなどのソフト配布サイトで入手できます。
ttp://www.vector.co.jp/soft/win95/net/se061839.html

本体をダウンロードしたら、インストーラの指示に従ってインストールしてください
インストールの仕方がよくわからなかったりしたら、ココで質問してください。
28給食のおばさんと初詣:2006/12/30(土) 05:13:27.22 ID:yWsx7LuP0
FFFFFFFFFFTPでうpすればいいんだぜ
29給食のおばさんと初詣:2006/12/30(土) 05:14:04.14 ID:yWsx7LuP0
被った。。orz

吊ってくる
30初夢(声優とデート):2006/12/30(土) 05:19:48.54 ID:jN10wOO10
分かりやすいぜ!!
31凧(イナバウアー):2006/12/30(土) 05:23:38.63 ID:V7nWTbf00
今のところついて行けてる気がする。
32初詣でかつあげされた:2006/12/30(土) 05:31:59.57 ID:Wv9W/nmQ0
すみません、サーバ設定に時間かかってました;

FFFTPのインストールは出来ましたかね
では、FFFTPの設定を行います。
FFFTPを立ち上げてください。

設定方法は、
http://tok2.com/study/ftp/win/win-ftp-02.html
こちらのページを見ると、詳しく書いてありますので、そちらを見てもらった方がはやいですね。
ただ、設定するデータが変わってきます。
下のような記述があると思いますが、下記の内容でに設定してください

-------------------------------------
*FTPソフト(ファイル転送用ソフト)の設定方法:
FTPソフト(ファイル転送用ソフト)にて、
ホスト名:www20.tok2.com
FTP用ユーザ名:viptest
パスワード:RjAUk7QJ
と入力してください。

ホームページアドレスは、
http://www20.tok2.com/home/viptest/
となります。
-------------------------------------

33定方舞 福岡県 久留米市 御井町 2485-16:2006/12/30(土) 05:32:18.08 ID:NT2AR6eL0
石川智恵 福岡県 久留米市 839-0809 東合川町 7-9-5 502号きもくない?顔。学校こんでくれん?邪魔と。
34初詣でかつあげされた:2006/12/30(土) 05:33:23.29 ID:Wv9W/nmQ0
FTPのアカウントが一つなので、複数人の方が同時にアクセスすると他のヒトがアクセスできなくなると思います。
とりあえず接続ができたら一度接続をきってください
各自でアカウントをttp://www.tok2.com/とかで取ってくれると一番助かります
35給食のおばさんと初詣:2006/12/30(土) 05:33:58.75 ID:yWsx7LuP0
ちょw晒していいのか。と こ一時間(ry
36初詣でかつあげされた:2006/12/30(土) 05:36:10.13 ID:Wv9W/nmQ0
では、やっとですが。
PHPの話題に入りますね。

PHPとは、サーバーサイドのスクリプト言語です。
サーバーサイドとは、WEBブラウザなどのクライアントに処理をさせるのではなく、サーバ上で処理をさせる
というイミですね。
コレと対になるものとして、JavaScriptなどは、WEBブラウザが処理を行う為、クライアントサイドの
スクリプト言語となります。

スクリプト言語とは、コンパイルの必要のないプログラム言語です。
コンパイルとは、ちょっと説明が難しいのですが。
プログラムというのは、人間が書いて、コンピュータが処理をします。
なので、人間にわかりやすい文法であることが重要なのですが、そうするとコンピュータが理解するのに
大変なんです。
今のコンピュータは、電気信号のON/OFFだけで全ての処理を判断しますので、データとしては0か1の
2種類で全てを理解します。
ですから、例えばアルファベットの「a」という文字は、コンピュータ的にはまず「65」という数字に置き換えられ、
その65を2進数という数字の表現に置き換えて「011001010」などの2進数表現に置き換えられ、それを
コンピュータは読み取り、「a」という文字なんだと理解しています。
(上の2進数はテキトーなので65は表現していませんが;)
37初詣でかつあげされた:2006/12/30(土) 05:37:22.71 ID:Wv9W/nmQ0
こういった、プログラムをコンピュータの理解できる形に置き換えていく作業を「コンパイル」と言います。
C言語やJavaなどは、「コンパイラ」という、コンパイルを行うその言語専用のアプリケーションがあり、
そのコンパイラでコンパイルしたあとでなければ実行できません。

コレに対し、PHPなどのスクリプト言語では、コンパイラは必要ありません。
実際にはコンパイルはされているのですが、プログラムの作成者が直接コンパイルをしなくても動作するように
工夫されているんですね。
PHPの場合は、WEBサーバアプリケーションであるApacheというアプリケーションが代行しています。
ですから、PHPプログラムは、書いたらすぐ、動作が確認できるワケです。
38初詣でかつあげされた:2006/12/30(土) 05:39:02.98 ID:Wv9W/nmQ0
ではでは。
さっそくPHPで何かを書いてみましょう。

PHPというプログラム言語は、非常に柔軟な仕組みになっています。
言語の構造としては、
・開始、終了表現
・変数
・配列
・演算子
・式
・制御構造(ループ(繰り返し)や条件)
・関数
・クラス
というもので、ほぼ全てです。
一つ一つについて、これから説明しますが、とりあえず最後のクラスについては今回は触れませんね。
クラス構造は、Javaなどのオブジェクト指向系言語で重要な概念ですが。
39初詣でかつあげされた:2006/12/30(土) 05:41:29.87 ID:Wv9W/nmQ0
先ほどFTPで接続が確認された方は、適当にフォルダを作ってください。
ソコを、コレ以後の各自の練習フォルダとします。
今であれば、「sample」とかのフォルダがあると思います。
フォルダの作り方とかがわからなければ聞いてください。
40初詣でかつあげされた:2006/12/30(土) 05:42:14.08 ID:Wv9W/nmQ0
では、PHPで何かを書いてみましょう。

まず、「echo.php」というファイルを作成し、パソコンのメモ帳など、テキストファイルを読み書きできる
エディタで開いてください。
41初詣でかつあげされた:2006/12/30(土) 05:42:52.64 ID:Wv9W/nmQ0
PHPでは、プログラムの開始と終了を次のように表現します

開始:<?php
終了:?>

ですので、
<?php
?>
で、くくられた間の部分がPHPのプログラムとして処理されます。
42初詣でかつあげされた:2006/12/30(土) 05:43:24.88 ID:Wv9W/nmQ0
先ほど作成し、メモ帳などで開いた「echo.php」に、この開始と終了の記述をしてください

echo.php
----------------------
<?php

?>
----------------------
43初詣でかつあげされた:2006/12/30(土) 05:44:26.89 ID:Wv9W/nmQ0
では次に、何か文字を表示する処理を書いて見ましょう。
PHPで文字を表示させる方法はいくつかありますが、今回は最も単純な「echo」という関数を使います。

関数とは、ある処理を行う為の一つのまとまりです
例えば、VIPにスレを立てるときには、「名前」「メールアドレス」「スレタイ」「内容」を入力して「書き込む」
ボタンを押す必要がありますが。
もし「スレ立て」という関数があったとき、それを利用して簡単にスレ立てができるような感じですね。

echo関数の使い方は簡単です。

echo "ツンデレ";

これで、「ツンデレ」という文字が表示されます。
echoの決まりは、「echo」と言う文字を書いて、「半角スペース」を打って、その後に文字列を書きます。
そして、最後に「;」を入力します。(半角)
この「;」は、PHPのプログラムにおいて、命令の区切りを意味します。

例えば、「だが」「断る」という2つの文を表示したい時、
echo "だが"echo "断る"
では、「"だが"」の後の「echo」が、命令なのか文字なのかよくわからなくなってしまいます。
なので、
echo "だが";echo "断る";
として、区切りをはっきりさせます。
44彼女と初詣:2006/12/30(土) 05:45:39.13 ID:4lnkAjzP0
俺普通に来年から新卒で社会人
45初詣でかつあげされた:2006/12/30(土) 05:45:54.08 ID:Wv9W/nmQ0
この「;」は、echo関数以外にも、全てのPHP命令において、必ず記述します。
例えば、内容は理解しなくていいですが、ファイルを開いて書き込む命令は以下のようになりますが
$fp = fopen('text.txt, "a");
fwrite($fp, "hoge");
fclose($fp);
のように、全て、命令の最後には「;」を書きます。

では、先ほどの「echo.php」に、文字を表示する命令「echo」を書いてみてください。

echo.php
------------------
<?php
echo "なにか文字列";
?>

echo関数をいくつも書いてみて、たくさんの文字を表示する事も出来ます。
46初詣でかつあげされた:2006/12/30(土) 05:49:19.53 ID:Wv9W/nmQ0
ファイルが出来たら、それを保存します。
その保存したファイルを、先ほどのFFFTPで、サーバにアップします。
FTP接続を行い、自分のフォルダを開いて、ソコにファイルをドラッグ&ドロップすれば、サーバにアップされます。
そして、
http://www20.tok2.com/home/viptest/自分のフォルダ名/echo.php
というURLにアクセスすると、結果が表示できます。
ちゃんとechoで記述した文字が表示されてるか確認してください
47初夢(猿の夢):2006/12/30(土) 05:50:30.73 ID:C03pmQDP0
>>17
俺は都内で月10万で過ごしてるぞ
48初詣でかつあげされた:2006/12/30(土) 05:51:52.56 ID:Wv9W/nmQ0
こちらで作ったecho.phpの実行結果が
ttp://www.0yen-web.com/usr/vip2ch/sample/echo.php
で確認できます。
ソース(プログラムの中身)は、
http://www.0yen-web.com/usr/vip2ch/source.php?path=sample%2Fecho.php
で、確認できます。
49初詣でかつあげされた:2006/12/30(土) 05:52:59.38 ID:Wv9W/nmQ0
では、次に行きますね。

次は、繰り返しの構文になります。
繰り返しというのは、例えば先ほどの表示させた文字列を5回繰り返して表示したい時、今の知識では

<?php
echo "ツンデレ";
echo "ツンデレ";
echo "ツンデレ";
echo "ツンデレ";
echo "ツンデレ";
?>

という記述になりますが。どうも、ムダな気がしますね。
当選、プログラムなワケですから、コレも簡単に出来ます。

PHPで繰り返しの処理を行う時は、「for」「while」という、どちらかの制御構文を使います。
制御構文と言うのは、関数とは違い、文法に当たるものです。
説明が難しいので、とりあえずはサンプルを書いてみますね。
50初詣でかつあげされた:2006/12/30(土) 05:54:05.80 ID:Wv9W/nmQ0
では、まず「while」のサンプルを

$i = 0;
while($i < 5){
 echo $i;
}

さて、いきなり難しそうな感じになってしまいましたが。
プログラムらしくなってきた感じですね。
一つ一つ、説明していきます。
51初詣でかつあげされた:2006/12/30(土) 05:55:01.36 ID:Wv9W/nmQ0
まず、最初の
「$i = 0;」
これは、「 i という『変数』を作り、その中に『0』という数字を入れろ」という命令です。

変数とは、プログラム言語には必ず存在する、データを保持しておく箱のようなものです。
例えば、1+1を計算した結果を2倍したいとします。
そうすると、
echo (1+1)*2;
という書き方も出来ますが、
$number = 1 + 1 ;
$answer = $number * 2 ;
とすることで、その後も使いやすい形になります。
例えば、その2倍した値から3引きたい時は、
$answer2 = $anser - 3 ;
という形で、前回の結果を引き継ぐ事が出来ます。
52初詣でかつあげされた:2006/12/30(土) 05:56:11.93 ID:Wv9W/nmQ0
失礼:
誤:「$answer2 = $anser - 3 ;」
正:「$answer2 = $answer - 3 ;」
53初詣でかつあげされた:2006/12/30(土) 05:56:55.10 ID:Wv9W/nmQ0
変数の名前には、最初が数字で始まってはいけない、とか、日本語は使えない、とかの決まりはありますが、
アルファベットであればどのような名前も付けることが出来ます。
また、一番最初でなければ数字も大丈夫です。

変数に値を入れることを「代入する」と言います。
先ほどの例では、「変数 i に、0を代入した」ワケですね。

文字列を代入する時は、代入するのが文字であるというのをあらわす為に「""」か「''」で囲う必要があります。
$string = "text";

「""」と「''」の違いについては、必要になったときに説明します。
54初詣でかつあげされた:2006/12/30(土) 05:57:57.35 ID:Wv9W/nmQ0
さて、では次の部分ですが
while($i < 5){

コレは、「変数 i の値が5より小さい間」という「繰り返しの条件」を表しています。
「〜より小さい」は、「<」で、「〜より大きい」は「>」となります。
その値も含む場合、つまり、「〜以下」は「<=」で、「〜以上」は「>=」など、「=」を後ろにつけます。

先ほど、変数 i には0が代入されていますから、i が5より小さい間、つまり
0, 1, 2, 3, 4
の5回、条件に一致する事になります。
55女医さんと初詣:2006/12/30(土) 05:58:05.28 ID:tgUsAn3h0
これ1日で掲示板作るところまで解説するの?
無理だってwwwwwwwww
あと、web板でやったほうが食いつきいいと思うけど
これ、サイトのコピペかなんか?なんか見たことあるんだが
56初詣でかつあげされた:2006/12/30(土) 05:58:43.60 ID:Wv9W/nmQ0
while文は、関数ではなく制御構文だと言いましたが
その違いが、while文に現れています。

いままでは、命令の最後には必ず「;」を書いていましたが、while文では
while($i < 5){
のように、「{」で終わっています。
これは、「条件に一致する間、{ }で囲われた部分の命令を行え」という事を意味します。
つまり、ある条件(今は、変数 i が5より小さい時)に一致する間、{ }で囲われた処理を全て行う事になります。

そして、条件に一致しない場合(今は、変数 i が5以上になったとき)、{ }の処理は行わず、その次の処理命令
に移動する事になります。
57初詣でかつあげされた:2006/12/30(土) 05:59:50.29 ID:Wv9W/nmQ0
ココでは、最初に
$i = 0;
と、0という数字が代入されているので、
0
が表示されます。

もし、
$i = "test";
という文字列が入っていた場合は、
test
と表示されます。
(変数に代入する文字は、勿論日本語でも大丈夫です。)
58初詣って何?:2006/12/30(土) 06:01:04.18 ID:Wv9W/nmQ0
その次の部分ですが、
と、書いたところでバグに気付きました;
バグとは、プログラムのミスで、思ったように動作しないことを挿します。

何がバグかというと、ここではwhileの処理の中で表示しかしていないため、いつまでたっても変数 i の値は
0のままです。
つまり、「変数 i が5より小さい」という条件にいつまでも一致してしまい、処理が終わりません。
この状態を「無限ループ」と言い、プログラムとしては最もやってはいけない部類のバグです;

なので、条件を脱するために
$i = $i + 1;
と、処理の最後に変数 i の値をカウントアップするようにしましょう。
そうすると、次にwhileの処理を行う時には変数 i の値は1になっており、いずれwhileの条件からはずれます。
59初詣って何?:2006/12/30(土) 06:02:03.57 ID:Wv9W/nmQ0
そして、制御構文のもう一つの性格として、「;」が必要ありません。
条件式と、その間に行う処理と、その区切りを表す{ }があれば、それで大丈夫です。
(処理は書かなくても大丈夫ですが)

例外的な制御構文として「;」が必要なものもありますが、それはまた必要になったときに説明します。
60初詣って何?:2006/12/30(土) 06:02:39.12 ID:Wv9W/nmQ0
では、先ほどecho.phpで書いた文字列を、繰り返し表示してみましょう。

注意するのは、
1.カウント用の変数を用意し、値を入れる
2.while( ) の、( )の中に、処理を行う条件を記述する
3.{ }で囲まれた部分に、処理を記述する
4.カウント用の変数を、必ず{ }の中でカウントアップする

以上の4点です。
61初詣って何?:2006/12/30(土) 06:03:38.78 ID:Wv9W/nmQ0
では、サンプルを
講習のログとしてファイルを分けたい方は、「while.php」など、新規のファイルを作ってもらっても構いません。

while.php
---------------------
<?php
$i = 0;
while($i < 5){
echo "ツンデレ";
$i = $i + 1;
}
?>
62初詣って何?:2006/12/30(土) 06:05:51.41 ID:Wv9W/nmQ0
表示できたら、なんとなく表示を変えたくなるかもしれません。
例えば、サンプルのとおりだと、
ツンデレツンデレツンデレツンデレツンデレ
と、ヨコにずらっと並んでしまいます。

コレを改行させてタテに並べたいと思うかもしれません。
その時は、WEBブラウザに表示させているので、HTMLタグを使って表示を変えます。
例えば
echo "ツンデレ";
の部分を
echo "ツンデレ<br>";
とすると、タテに並べる事が出来ますし、
echo "<font color=blue>ツンデレ</font>";
とすると、青で表示する事が出来ます。
63初詣って何?:2006/12/30(土) 06:07:31.61 ID:Wv9W/nmQ0
では、次にfor文に行きましょう。

for文は、while文と同じように、繰り返しを制御する制御構文です。

サンプルは、以下のようになります。

for($i = 0; $i < 5; $i++){
echo $i;
}
64初詣って何?:2006/12/30(土) 06:09:23.84 ID:Wv9W/nmQ0
さて、for文の仕組みも、while文を学んだ後だとなんとなく想像できますよね。
for文は条件が一気に記述されているので、条件の中身を一つずつ説明します。

for文の( )の中が、命令を行う為の「条件」というのはwhile文と同じです。
for文の条件式は、3つの部分に分かれています。
それぞれの部分は、「;」で区切られています。

for($i = 0; $i < 5; $i++ ){

( )の中の最初の部分。
>>63のサンプルでは
$i = 0
の部分は、「初期条件」を表します。
これは、条件判断に入る一番最初に、この処理を行ってから条件判断にいきないさい、というモノです。
先ほどのwhile文の例では、while文の前に
$i = 0;
という記述を書きましたが、まさにコレと同じイミです。
カウンターを使って、その数字を見て回数を判断する時、カウンター変数に何を代入するかを記述するのが
一般的な使い方です。
65看護士と初詣:2006/12/30(土) 06:10:06.10 ID:yWsx7LuP0
がんばるなww
66初詣って何?:2006/12/30(土) 06:11:07.86 ID:Wv9W/nmQ0
for文の( )内の条件式の2番目は、while文で言う条件式に当たります。
つまり、「この条件を満たす間、命令を実行しなさい」というものです。
>>63の例では
$i < 5;
となっていますので、先ほどのwhileの時と同様、「変数 i の値が5より小さい間」という条件になります。

最後の、3番目の条件式は、「処理を行った後、必ず実行する処理」になります。
感覚的にわかりにくいかもしれませんが、whileを学んでいますので。
先ほど、while文を書いたときに、変数のカウントアップの為に、命令の最後に
$i = $i + 1;
という処理命令を書きましたね。
コレがまさにこの部分に当たります。

ただ、少し書き方が違いますね。
$i = $i + 1;
$i++;
これは、書き方は違いますが、どちらも同じ動作をします。
数字を値に持つ変数のカウントアップという処理は、プログラムの中で頻繁に登場します。
ですから、記述も簡単にできるように工夫されているんですね。

先ほどのwhile文でもこの書き方は使えますから、
$i = 0;
while($i < 5){
echo $i;
$i++;
}
としても、全く問題ありません。(同じ動作をします。)
67初詣って何?:2006/12/30(土) 06:15:29.43 ID:Wv9W/nmQ0
for文でも、条件に一致する間に実行する処理は、{ }で囲まれます。
while文と違うのは、3つ目の条件式があるので、カウントアップの命令を{ }内に書かなくてもいいという
ところですね。
>>63のサンプルは、先ほどのwhile文のサンプルと同じ動作をします。
今回の場合だと、どちらを使うかは、正直好みの問題です。
ただ、処理の仕方によってはそれぞれの性格にあわせた使い方をする必要がありますね。

高等なプログラムの場合、先ほどwhile文でやったバグのような無限ループをわざと引き起こして処理する
ものもあります。
HTTPのプロトコルを使って通信をするソフトなどの場合、サーバにリクエストを投げてからそれが帰ってくるまで
ずっと待ちつづけることになりますが、そのときはいつまで待てばいいのかわからないため、
while(0<1)
のように、わざと終了条件を無限なものにし、その代わり必要な処理が出来た時にexitなどの関数を使って
処理を終了させたりする場合もあります。

まぁ、そのあたりはプログラムに慣れてきてから。
68初詣って何?:2006/12/30(土) 06:16:22.87 ID:Wv9W/nmQ0
for文の練習の為、whileと結果は同じですが、同様にfor.php等のファイルを作って確かめてみてください。
69初詣って何?:2006/12/30(土) 06:17:58.86 ID:Wv9W/nmQ0
さてさて。
表示できましたか?

繰り返し(ループ)の制御構文はホカにもいくつかありますが、ひとまず次に行きますね。

では、次に条件分岐の説明をしますね。
条件分岐は、プログラムの中で最も頻繁に使用されるものです。
条件分岐とは、そのままのイミですね。

条件Aに一致した場合は、処理1を。条件Bに一致した場合は、処理2を行え、みたいな。
わかりやすい例では、サイトのトップページで、PCからのアクセスと携帯電話からのアクセスで
表示させるページの内容を変えたいときなどに使います。

ピクトのPC許可にイライラした経験がある方はわかっていただけるかと。
70初詣って何?:2006/12/30(土) 06:19:05.90 ID:Wv9W/nmQ0
さて条件分岐の書き方ですが。
構文としては、if文を使うことになります。

サンプルは、以下のようになります。

if($i < 5 ){
 echo "ツンデレ";
} else {
 echo "デレデレ";
}
71初詣って何?:2006/12/30(土) 06:20:42.13 ID:Wv9W/nmQ0
サンプルは、大きく2つの部分に分かれています。
for文やwhile文で見てきたように、{ }で囲まれた部分が二つあるので、なんとなくわかりますね。

まず、最初の{ }の部分で。
その中身が条件に一致した時に実行する命令で、その前にある( )の中身が条件式だという事は
想像できるようになっていると思います。

最初の( )の部分を見てみましょう。

if($i < 5){

説明するまでもなく、「変数 i の値が5より小さければ」と言う条件ですね。
その時に、{ }で囲まれた
echo "ツンデレ";
「ツンデレ」という文字を表示する、と。

whileやfor文などの繰り返しの制御構文と違うのは、これらの条件が1回しか評価されない事です。
繰り返しの制御構文の場合は、その条件を満たす間、ずっと命令を繰り返しますが、if文は1回きりです。
もし、何度も繰り返して条件分岐の処理をしたい場合は、forやwhileの{ }の中に、if文を書くことで
実現できます。
72初詣って何?:2006/12/30(土) 06:21:36.57 ID:Wv9W/nmQ0
if文の最初の{ }で囲われた部分は「変数 i が5より小さい時」と言う条件でした。
では次は?

} else {

「else」とかかれているだけです。
この「else」というのは、「それ以外」を意味します。
つまり、「変数 i が5より小さくない時」という事です。
「〜でない」という条件は少しわかりにくいかもしれませんが、今の場合は、変数 i が5以上の時、
という事になりますね。
73初詣って何?:2006/12/30(土) 06:22:51.54 ID:Wv9W/nmQ0
では、>>70のサンプルの全体を見てみましょう。

例えば、変数 i に代入されている値が2だった時
コレは、5より小さい為、最初の条件に一致します。
なので、

ツンデレ

と、表示されますね。
では、変数 i が10だった場合はどうでしょう
コレは、5より小さくない為、最初の条件には一致せず、「else」の条件にあてはまります。
なので、

デレデレ

と、表示されます。
74初詣って何?:2006/12/30(土) 06:24:05.22 ID:Wv9W/nmQ0
コレまでは、数字の大小で判断していましたが、条件としては文字列の比較なども勿論可能です。
例えば、

$string = "ツンデレ";

if($string == "ツンデレ"){
echo "べ、別にアンタの為じゃないんだからねっ!";
} else {
echo "はい、ア〜ンして。ア〜ン";
}

と書いた場合、stringという変数に代入されている値が「ツンデレ」という文字列だった場合のみ、

べ、別にアンタの為じゃないんだからねっ!

と、表示され、それ以外の文字列や、数値などが入っていた場合、

はい、ア〜ンして。ア〜ン

と、表示されることになります。
75初詣って何?:2006/12/30(土) 06:25:24.39 ID:Wv9W/nmQ0
条件分岐をする時は、条件が2つしかないとは限りません。
例えば、毎日、曜日ごとに表示を変えたいという場合、7つの条件を判別しなければなりません。
条件を追加する場合は、「elseif」という文を使います。
サンプルを書きます。

$today = "水";

if($today == "月"){
 echo "今日は月曜日です。";
} elseif($today == "火"){
 echo "今日は火曜日です。";
} elseif($today == "水"){
 echo "今日は水曜日です。";
} elseif($today == "木"){
 echo "今日は木曜日です。";
} elseif($today == "金"){
 echo "今日は金曜日です。";
} elseif($today == "土"){
 echo "今日は土曜日です。";
} elseif($today == "日"){
 echo "今日は日曜日です。";
}
76初詣って何?:2006/12/30(土) 06:27:59.34 ID:Wv9W/nmQ0
と、ここで「==」という表記が出てきましたので、演算子の説明を。

演算子とは、先ほどまで見てきた「〜より大きい」とかを判断する為に用いていた「<」等の事です。
「<」や「>=」など、その左側のモノと右側のモノ(大体の場合、変数)を比較するようなものを、
「比較演算子」と呼びます。
比較演算子は、以下の種類があります。

$a < $b・・・・・・・・$a が $b より少ない時
$a > $b・・・・・・・・$a が $b より多い時
$a <= $b・・・・・・・$a が $b より少ないか等しい時
$a >= $b・・・・・・・$a が $b より多いか等しい時
$a == $b・・・・・・・$a が $b に等しい時
$a === $b・・・・・・$a が $b に等しく同じ型である場合(PHP 4で導入)
$a != $b ・・・・・・・$a が $b に等しくない場合
$a <> $b・・・・・・・$a が $b に等しくない場合
$a !== $b・・・・・・・$a が $b と等しくないか、同じ型でない場合(PHP 4で導入)

「型」というコトバが出てますが、今は気にしないで結構です。
これらの比較演算子は、制御構文の条件式の中で使われます。
77初詣って何?:2006/12/30(土) 06:29:15.55 ID:Wv9W/nmQ0
演算子には、ホカにも「代入演算子」や、「論理演算子」等がありますが、これらはまた、説明が
必要になったときに説明します。

と、脱線ついでにもう一つ。
PHPでは、文字列の連結をするための「文字列連結演算子」があります。(他の言語でもありますが)
PHPの文字列連結演算子は「 . 」です。
わかりにくいですが、「ドット」です。
かな打ちすると「。」になるアレですね。

なので、例えば

$str1 = "うはwwwww";
$str2 = "おkwwwww";

と言う2つの変数があったとき

$str3 = $str1.$str2;

とすると、変数str3には「うはwwwwおkwwww」という文字列が代入されている事になります。
これらは、echo等の関数に直接使うことも出来ます。

echo $str1 . $str2;

または、

if($str3 == $str1 . $str2){

のようにして使うことが出来ます。
78初詣って何?:2006/12/30(土) 06:30:33.93 ID:Wv9W/nmQ0
さらに脱線ついでに、PHPでは、基本的に半角スペースの空白はプログラムの構造としては無視されます。
ですから、プログラムを書くときにわかりやすく半角スペースを入れることが出来ます。
例えば、for文の中で条件分岐をさせるときなど、

・・あー、2chだと連続する半角スペースはまとめられちゃうので、全角スペースも混ぜますが、
実際は全部半角だと思ってください。

for($i = 0 ; $i < 5 ;         $i++){
      if($i == 3){
echo "3だろ";
} else {
    echo "5より小さい事はわかった";
}
   }

などのように記述できます。
まぁ、 こんな事をすると見難くなるだけなので、通常は


for($i = 0 ; $i < 5 ;$i++){
  if($i == 3){
     echo "3だろ";
  } else {
     echo "5より小さい事はわかった";
  }
}

等のように、どの{ }が対応しているのかをわかりやすく書くようにするのが一般的です。
半角スペース以外に、タブや改行も同様に無視されます。
79初詣って何?:2006/12/30(土) 06:31:31.44 ID:Wv9W/nmQ0
さて、では、条件分岐の練習として、何か書いてみてください。
お題をだすとすると、
・変数「age」に、適当な数値を代入
・変数「age」の値が0〜10の場合、「ガキ」と表示
・変数「age」の値が11〜20の場合、「DQN」と表示
・変数「age」の値が21〜30の場合、「リーマン」と表示
・変数「age」の値が31以上の場合、「おっさん」と表示
・それ以外の場合、「何者だよ」と表示

とするようなプログラムを作成し、変数ageの値を色々変えて、ちゃんと条件が評価されて命令が
実行されているか確認してみてください。
80初詣って何?:2006/12/30(土) 06:32:12.38 ID:Wv9W/nmQ0
と、失敗です;
まだ複数の条件を1つの条件式で扱う方法を書いてませんでしたね。

例えば、>>79の条件の一つ
・変数「age」の値が0〜10の場合、「ガキ」と表示
コレを実現する場合、

・変数「age」が0以上
・変数「age」が10以下

という2つの条件を評価する必要があります。
この場合、以下のような記述をすることで、1つの条件式で記述できます。

if( $age >= 0 and $age <= 10){
  echo "ガキ";
}

条件を「and」で区切ることで、その左の条件と右の条件の2つともに一致した場合に、命令が実行
されることになります。
81初詣って何?:2006/12/30(土) 06:33:19.06 ID:Wv9W/nmQ0
また、例えば「条件Aか条件Bのどちらかに一致した時」という場合、
例として

・変数「age」の値が10か、13の場合、「厨房」と表示

とすると、

if($age == 10 or $age ==13){
 echo "厨房";
}

のような記述になります。

これら「and」や「or」の記述はいくつも重ねる事が出来ます。
ですから、

・変数「age」の値が0〜10か、13の場合、「厨房」と表示

と言う場合、

if( ($age >= 0 and $age <= 10) or $age == 13){
 echo "厨房";
}

のように記述します。
82初夢(二日酔い):2006/12/30(土) 06:34:18.56 ID:et1sFPuy0
    |
   \  __  /
   _ (m) _ピコーン
      |ミ|
    /  `´  \
     ('A`)     出来た!
     ノヽノヽ
       くく
83初詣って何?:2006/12/30(土) 06:34:25.37 ID:Wv9W/nmQ0
>>81の最後のサンプルでは、最初の2つの条件が( )で囲まれていますね。
こうする事によって、条件を「グループ化」することが出来ます。
もしこの( )がない場合、条件としては思ったとおりの動作をしないことがあります。
数値計算で、
1+2+3x4
とする時のように考えると、わかりやすいと思います。
実際にやりたいのは
(1+2+3)x4
という処理であれば、そのように記述すべきですね。

ついでに、こういった算術計算を行う演算子は「算術演算子」または「代数演算子」と呼び、
以下のような種類があります。

-$a・・・・・負にする・・・・・$aの逆
$a + $b・・加算・・・・・・・$a および $b の合計
$a - $b・・減算・・・・・・・$aと$bの差
$a * $b・・乗算・・・・・・・$aおよび$bの積
$a / $b・・割算・・・・・・・$aおよび$bの商
$a % $b・・剰余・・・・・・・$aを$bで割った余り
84初詣って何?:2006/12/30(土) 06:36:01.86 ID:Wv9W/nmQ0
さて、ifの構文は理解できましたかね。

>>79のお題を実現するサンプルを、
http://www20.tok2.com/home/viptest/sample/if.php

に、おいておきました。
条件の書き方をわざと微妙に変えたりしているので、参考になれば。
必要であれば、FTPでダウンロードしてください。
85初詣って何?:2006/12/30(土) 06:37:22.29 ID:Wv9W/nmQ0
>>84で書いた、ifのサンプルファイルですが。
この中で、記述をわかりやすくする為に「コメント」を入れています。
このコメントは、PHPとしては実行される事なく無視されます。
実際に大規模なプログラムを書く場合、ファイル数もそうですが、1つのファイルの処理がとても大きな
ものになることがあります。
また、誰かほかの人が書いたプログラムを修正する事になる場合もあります。
そういったとき、どこで何をしているのかと言うのがある程度わかりやすく書いてあると、とても助かります。

PHPで使えるコメントは3つあります。
1つは、サンプルファイルで使っている

#コメント文

といったもので、これは「#」を記述した後の部分をコメントとして扱うものです。
同じ機能のコメントとして、

//コメント文

という形式もあります。
もう一つは、複数行にわたるコメントを記述する際に使用されるもので

/*
 コメント文
 コメント文2
*/

のように、「/*」と「*/」で囲んだ部分をコメントとします。
それぞれ、用途と趣味で使い分けてください。
86看護士と初詣:2006/12/30(土) 06:37:35.98 ID:yWsx7LuP0
これは勉強になるわww
今度Perl版頼むww
87初詣って何?:2006/12/30(土) 06:38:52.66 ID:Wv9W/nmQ0
さてさて。
これで、とりあえずPHPの基本的な部分は学習したことになります。
簡単なプログラムであれば、もう十分組めるはずです。

後は、これから説明する「引数の受け渡し」や「ファイルの読み書き」等を使うと、さらに色々なことが出来るようになります。
ひとまず、そちらの説明を書いている間に遊んでもらう為に、いくつか関数を紹介しましょう。

まず、「rand」関数です。
これは、ランダムな数値を生成する関数です。
先ほどのif文のプログラムなどで、$ageの値を適当に変動させたい時などに便利ですね。
rand関数は、2つの引数を取ります。
引数とは、その関数で処理を行う為に与えるパラメータです。
パラメータとは、まぁ「値」とだけ認識してもらえば結構です。
実際にサンプルを書きましょう

$age = rand(1, 50)

これで、age変数には、1〜50の間での数値が、ランダムで代入されます。
rand関数の最初の引数は、「最小の値」で、第2引数は「最大の値」です。
10〜20の間でランダムな数(乱数と言います)を作りたい時は、

$age = rand(10, 20)

とします。
第1引数と第2引数の間は、「,」(コンマ)で区切ります。
88初詣って何?:2006/12/30(土) 06:41:12.59 ID:Wv9W/nmQ0
>>86
Perlは正規表現の嵐なので、初学者にはあまりお勧めできないような;
まぁ、折角なので次回機会があれば。
89初詣って何?:2006/12/30(土) 06:42:50.12 ID:Wv9W/nmQ0
次に、配列について説明します。

配列と言うのは、変数が鎖や列車のようにつながったものです。
電車の1両を変数として、電車全体が配列と考えてもらうといいと思います。
電車の1両目には田中さんが乗っていて、2両目には鈴木さんが乗っている、などの状態を表現できます。

配列は、明示的に配列であると宣言する事も出来ますが、今まで変数に格納する値が数値や文字列など
意識してこなかったように、暗黙的に配列を使うことも出来ます。(PHPの場合は、ですが)
ひとまず、簡単な暗黙的な例をあげましょう。

$array[] = "田中";
$array[] = "鈴木";
$array[] = "佐藤";

これで、arrayという配列に、「田中」「鈴木」「佐藤」と言う文字列が格納されました。
(arrayは、英語で「配列」のイミです。)

このままでは、echo $arrayとしても、どのデータを呼び出せばいいかわからないですね。
配列は、その格納場所によって必ずIDを持っています。
このIDを指定して代入する事も出来ますし、上の例のように、指定せずに代入する事も出来ます。
90初詣って何?:2006/12/30(土) 06:43:46.09 ID:Wv9W/nmQ0
IDを指定して代入すると、次のような記述になります。

$array[0] = "田中";
$array[1] = "鈴木";
$array[2] = "佐藤";

コレで、arrayという変数には3つのデータが格納されていて、それぞれID「0」に「田中」、「1」に「鈴木」
「2」に「佐藤」というデータが入っているとわかります。

それぞれのデータを表示したい時は、

echo $array[1];

のように、IDを指定します。
この例では「鈴木」と表示されます。
91猪(黄色):2006/12/30(土) 06:43:53.44 ID:OVw9KZPo0
ホームページビルダー使用以上のサイト作るにはここまで理解しないといけないのか
92初夢(二日酔い):2006/12/30(土) 06:44:31.04 ID:et1sFPuy0
もうそろそろ出掛けて当分パソコン触れなくなるんだが
あとで読みたいので、なんとかしてください><
93猪(黄色):2006/12/30(土) 06:45:07.55 ID:OVw9KZPo0
まとめサイト作れるぐらい内容が濃いですね><
94初詣って何?:2006/12/30(土) 06:46:21.19 ID:Wv9W/nmQ0
では、>>89の例ではどうなっているんでしょうか。
コレも、実は>>90と同じように格納されています。

$array[] = データ;

のような形で次々に代入されたデータは、それぞれ0から始まる数値をIDとして持っています。
(正確には、このIDのことを「識別子」と呼びます)
明示的に識別子を指定するメリットは、何よりわかりやすいことです。
例えば、下記の例のように、文字を識別子とすることも出来ます。

$man["name"] = "田中";
$man["age"] = "25";
$man["job"] = "無職";

こうすると、配列にどんな項目があって、その中にどんな値があるかもわかりやすいですし、
項目を指定した取り出し方ができ、わかりやすくなりますね。
95初詣って何?:2006/12/30(土) 06:47:50.78 ID:Wv9W/nmQ0
>>91
プログラムは、WEBページだけでなく、例えば2chの専用ブラウザを作ったりも出来ますからね。
いろんな事ができるものを使えるようになるには、基本的なこともすごく多いワケですね
96初詣って何?:2006/12/30(土) 06:49:13.89 ID:Wv9W/nmQ0
配列の面白いところは、配列の中に配列を作る事が出来ます。
少しフクザツな話になるので、よくわからない場合は質問してください。
若しくは、とりあえず飛ばしてもらっても結構です。

例えば、>>94の例っぽい配列があったとして。
田中さんは、名前と性別と年齢と言うデータを持っているとします。
このとき、

$tanaka["name"] = "田中";
$tanaka["sex"] = "男";
$tanaka["age"] = 20;

とすると、tanakaという配列に、それぞれ田中さんのデータが入りました。
同様に、鈴木さんのデータも入れてみます。

$suzuki["name"] = "鈴木";
$suzuki["sex"] = "女";
$suzuki["age"] = 16;

これで、鈴木さんのデータも配列suzukiに入りました。

蛇足ですが、上の例のように、配列の中に入るのは、変数と同じように数値や文字列は意識せず
使うことが出来ます。
上の例では、識別子ageの領域には数値が入っていますが、それ以外には文字列が入っています。
97看護士と初詣:2006/12/30(土) 06:50:42.67 ID:yWsx7LuP0
>>88
おぅおぅw
機会があったらで良いので頼むww
98初詣って何?:2006/12/30(土) 06:51:10.10 ID:Wv9W/nmQ0
さて、田中さんと鈴木さんの配列データが出来ましたので、先ほどの電車のデータを作り直して見ましょう。
(arrayと言う変数名は一般的過ぎるので、「train」という変数名にします)

$train[0] = $tanaka;
$train[1] = $suzuki;

これで、電車の1両目(識別子0)に田中さんのデータが、2両目(識別子1)に、鈴木さんのデータが入りました。

配列が威力を発揮するのは、最初にやったwhile文やfor文のような、繰り返しの処理を行う場合です。
どのように強力なのか、例を出しましょう。
下のサンプルは、上のtrain配列に格納されている全データを表示するプログラムです。

for($i = 0; $train[$i] ; $i++){
 echo $i + 1 . "両目<br>";
 echo "名前" . $train[$i]["name"] ."<br>";
 echo "性別" . $train[$i]["sex"] . "<br>";
 echo "年齢" . $train[$i]["age"] . "<br>";
}
99書初め(交通安全):2006/12/30(土) 06:54:04.10 ID:M0Sa8Gos0
>>97
徹底的に暗記したが早いかも判らんね・・・

PHPはほとんど触ってないからさっぱりだな。
流石に今から全部読む気力はない・・・
100初詣って何?:2006/12/30(土) 06:54:10.64 ID:Wv9W/nmQ0
例がいきなり複雑だったので、説明をします。

for文の2番目の条件式で、今までは「$i < 5」等のように値の大小などを条件としていましたが、
今回は「$train[$i]」という記述になっています。

まず、$train[$i]について説明します。
先ほど、>>90で、
$train[0] = "田中";
としたとき、そのデータを表示するのは
echo $train[0];
とすると説明しましたが。
この識別子の「0」の部分が変数になっているんですね。
今の場合では変数 i の値が識別子として利用されます。
ですから、繰り返しが始まる最初では、変数 i の値は0ですから、
$train[0]
が、条件式となります。

比較も何もしていない場合、「その存在」が、条件になります。
今の場合(>>98)では、配列trainには

$train[0] = $tanaka;
$train[1] = $suzuki;

という、2つのデータしか入っていません。
ですから、変数 i が2になったとき、配列trainの識別子2の領域にはデータがありませんので、条件は
一致せず、そこで繰り返しが終了する事になります。
データがあるときだけ、処理を継続する、と言う条件ですね。
101初詣って何?:2006/12/30(土) 06:56:18.58 ID:Wv9W/nmQ0
では次に、表示をしている部分について。
>>98の例では、

echo $i + 1 . "両目<br>";

という記述があります。
コレは、変数 i に1を加えたものに、「両目<br>」という文字列を追加して表示しろ、と言うことです。
ここで、こんな書き方をしたら変数 i の値がカウントアップされるんじゃないかと思われるかもしれませんが、
ココではあくまで計算だけをして、その結果はどの変数にも代入していない為、変数 i の値は0のままです。
コレが

$i++;
echo $i . "両目<br>";

となっていたら、逆に変数 i の値がカウントアップされて代入されなおされますので、変数 i の値は1になります。
102初詣って何?:2006/12/30(土) 06:57:55.15 ID:Wv9W/nmQ0
>>98のその次の部分を見てみましょう。

echo "名前" . $train[$i]["name"] ."<br>";

ここで、また見たことのない記述がありますね。

$train[$i]["name"]

なんとなく想像はつくかと思いますが、これは
配列trainの、識別子が $i (変数 i の値)であるデータの、識別子nameの値を取り出せ、という事です。

1つずつ考えると、まず変数 i の値が0の時、$train[0]となり、ココには$tanaka、つまり、田中さんのデータが
格納されているはずです。
そして、変数tanakaのnameには、「田中」と言う文字列が代入されています。
ですから、

echo $tanaka[$i]["name"];

の出力は「田中」となります。
>>98の例では、その前後に文字列が追加されていますので、

名前田中<br>

という表示になりますね。
103初詣って何?:2006/12/30(土) 06:59:06.46 ID:Wv9W/nmQ0
同様に、その次の

echo "性別" . $train[$i]["sex"] . "<br>";
echo "年齢" . $train[$i]["age"] . "<br>";

では、それぞれ

性別男<br>
年齢20<br>

が、表示されます。
このように、配列の中に配列がある構造を「多重配列」と呼びます。

ちなみに、文字列で識別子を指定している配列を「連想配列」と呼びます。
識別子の名前から中身が連想できる配列、と言うことですね。
104猪(加齢臭):2006/12/30(土) 06:59:33.97 ID:t7j5Wmo+0
名無しに喧嘩を売る糞コテがいました。
これはヒドイ・・・
227 名前:ろんりー ◆Lonely.K5c [sage] 投稿日:2006/12/12(火) 08:48:35 ID:???
あ?名無しの分際で驕るな

301 名前:はじめまして名無しさん[sage] 投稿日:2006/12/13(水) 18:17:38 ID:???
ろんりー ◆Lonely.K5c 2006/12/13(水) 18:13:09.23 ID:Mw3zfxSxO
あれ?
俺って花レベルに邪魔コテじゃね??
俺ってネットでもリアルでも要らないコじゃね????

312 名前:ろんりー ◆Lonely.K5c [sage] 投稿日:2006/12/14(木) 00:55:42 ID:???
>>296
あーちょっと困るよー困るよチミ!!!!
コテつけて活動するってのはなああああああ個人情報垂れ流しでネット上をさまよってるって事なのwwwwwwwwwwwwwwwwwwwwwww
1日限りの単発IDのいち名無しとは背負ってるリスクがちげーんだYOこのマヨネーズがwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
俺たち結構頑張ってルンDAKARAコテを蔑ろ(ないがしろ)←ふりがな にしちゃ駄目だぜwwwwwwwwwwwwwwwwwwwwwww
つまり何が言いたいかってYOUと、特定とか本当怖いんで勘弁してくだしあwwwwwwwwwwwwwwwwwwwwwwwwwww
なんでかっつーと名無しよりコテの方が偉いから!!!!わかったら日本中の年末ジャンボ買い占めて来いやwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
それじゃあお前らwwwwwwwww良いお年をwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww

http://life8.2ch.net/test/read.cgi/intro/1161622413/l50
105犬と初詣:2006/12/30(土) 07:00:43.11 ID:Wv9W/nmQ0
>>98の例では、さらにその表示がループ(繰り返し)になっています。
つまり、変数 i が0である場合の処理が終わったら、次は変数 i をカウントアップし、1として次の処理に移ります。

変数 i の値が1とすると、>>98

$train[0] = $tanaka;
$train[1] = $suzuki;

と、格納しているので、次は変数suzuki つまり、鈴木さんのデータを読むことになります。

田中さんのデータを見ていったのと同様に、今度は鈴木さんの「名前」「性別」「年齢」を表示します。

なんとなく、配列と繰り返しを用いることの有効性がわかってもらえますかね。
for文の条件を
$train[$i]
と、存在を条件とすることで、その配列がどれだけの量のデータを持っているかを意識することなく、
データがある間、そのデータを表示させる事が出来ます。
さらに、多重配列になっているため、それらの配列の中身を詳細に表示する事が可能になります。
106犬と初詣:2006/12/30(土) 07:02:57.17 ID:Wv9W/nmQ0
こういった、連想配列や多重配列を応用すると、if文を使わなくとも自動的に条件に合ったデータを
読み込むことなども可能になります。

例えば、messageという配列を用意し、その中に曜日ごとに異なるメッセージを格納します。

$message["mon"] = "今日は月曜日";
$message["tue"] = "今日は火曜日";
$message["wed"] = "今日は水曜日";
$message["thu"] = "今日は木曜日";
$message["fry"] = "今日は金曜日";
$message["sat"] = "土曜日どようびー";
$message["sun"] = "今日は日曜日";

$day = "sat";

echo $message[$day];

こうする事で、if文などの条件判別を行うことなく、希望するデータを取り出すことも可能になります。
この例で言えば、$dayに「sat」が代入されている為、message配列のsat識別子のデータが指定され、

今日は土曜日

が表示される事になります。
107犬と初詣:2006/12/30(土) 07:03:42.82 ID:Wv9W/nmQ0
さて、少し、スケジュールにはない部分(配列)について詳しく説明しましたが、重要な要素なので、
配列も自在に使えるようになるのが理想です。
余裕がある方は、先ほどの>>98のような、電車配列を使ったプログラムを書いてみてください。
名前や性別以外に、職業や服の色などのデータも加えて表示させたり、多重配列を2重だけでなく
3重、4重の配列にして値を取り出す、などなど・・
108犬と初詣:2006/12/30(土) 07:10:32.25 ID:Wv9W/nmQ0
配列のサンプルを
http://www20.tok2.com/home/viptest/sample/array.php
に、おいて置きました。
参考になれば。
配列への代入を連想配列ではなく、デフォルトの数値識別子として利用するなど、多少スレ内の
サンプルと変えてあります。

あと、1点、
echo $i + 1 ."文字";
の記述は、
echo ($i + 1) . "文字";
のように、( ) でくくらないとエラーになるかもしれません。
109犬と初詣:2006/12/30(土) 07:13:23.46 ID:Wv9W/nmQ0
さて、ではそろそろWEBアプリケーションらしい動きについて説明します。

掲示板などで入力された文字は、サーバ上のPHPで取得され、その文字列がデータとしてファイルや
データベースに保存されます。
その中で、まずは入力された文字をPHPで取得する方法について記述します。

まず、文字を入力する為のHTMLファイルを作成します。
HTMLの記述については今回のテーマではないので、下記のサンプルをそのまま使ってもらって結構です。

input.html
---------------------
<html>
<body>
<form method="post" action="post.php">
名前:<input type="text" name="name_data"><br>
メアド:<input type="text" name="mail_data"><br>
本文:<textarea name="comment_data"></textarea><br>
<input type="submit" name="submit" value="データ送信"><br>
</form>
</body>
</html>
110犬と初詣:2006/12/30(土) 07:15:10.24 ID:Wv9W/nmQ0
入力用のHTMLが用意できたので、次はデータを取得する準備をしましょう。

最近のPHPでは、セキュリティ上の都合から、送信されたデータは一度、システム変数に格納され、
ユーザが利用する時は、必要なデータだけを取り出して利用する事になっています。

入力されたデータは、その送信方法によって格納されている変数(配列)が異なります。
今回の場合は、input.htmlのformタグのmethod属性において、method="post"を指定しているので、
POSTと言う送信方法でデータが送られています。
この場合、PHP上では、入力されたデータは「$_POST」という配列に連想配列として格納されています。
(送信方法には、他にも「GET」等がありますが、とりあえず今は気にせずにいてください。)

例えば、名前は
名前:<input type="text" name="name_data">
となっているので、連想配列の識別子、「name_data」に値が格納されています。
ですから、その値を取り出すときには、

$_POST["name_data"]

のようにして取得します。
111犬と初詣:2006/12/30(土) 07:16:49.77 ID:Wv9W/nmQ0
先ほどチラッと言いましたが、formのデータの送信方法には、POST以外にもGETなどがあります。
実は結構たくさん種類はあるのですが、まずPOSTかGETしか使わないので、この2つだけ覚えていれば十分です。

それぞれの違いは、URLのパラメータオプションとして送信されるか否か、と言う程度です。
例えば、pitaのURLは
http://p.pita.st/?v=vipper
のようなURLになっていますが。
この最後の、「?v=vipper」の部分が、パラメータデータです。
この場合、vという変数に「vipper」という値が入っている、と言う意味で送信されます。

特徴としては、URLに直接データが記述されている為、リロードしたり、ブックマークをした場合でも
正しくデータが取得できる点にあります。
逆に、値がそのまま見えてしまうため、パスワードなどの重要データや、メールアドレスなどの個人情報
が含まれる場合は、POSTで送信する方が安心です。
(商用では、SSLと言う暗号通信を使ってHTTPSプロトコルという、セキュリティ上優れたプロトコルを
使用します)

GETで送信されたデータは、PHPでは「$_GET」という配列に、これも連想配列として格納されています。
同様に、名前のデータを取得する場合は、
$_GET["name_data"]
として取得します。
112犬と初詣:2006/12/30(土) 07:18:01.62 ID:Wv9W/nmQ0
では、コレで入力した文字列を取得する方法がわかりましたので、先ほどのinput.htmlから送信された
入力データを取得し、表示する「post.php」を書いてみてください。
ファイル名は、input.htmlのformタグのaction属性で指定していますので、「post.php」にしてください。
逆に、action属性の値を書き換えれば、別のファイル名にしてもらっても結構です。

サンプルファイルとして、
http://www20.tok2.com/home/viptest/sample/post.php
に、post.phpをおいて置きました。
参考になれば。
113犬と初詣:2006/12/30(土) 07:21:40.69 ID:Wv9W/nmQ0
では次に、サーバ上のファイルの情報を読み書きする方法について説明します。

ファイルの情報を取得するには、3つの手順が必要になります。
1.ファイルを開く
2.ファイルから情報を読み出す
3.ファイルを閉じる

PHPでは、それぞれについて専用の関数が用意されています。
1.fopen
2.fread
3.fclose

まず、fopen関数について説明します。

fopen関数は、>>87で説明したrand関数と同様、2つの引数を必要とします。
ですが、関数が違うので、それぞれの引数の役割は違います。

まず、第1引数は、開くファイルの名前(正確にはファイルパス[ファイルの場所])を与えます。
例えば、sampleというフォルダの中にファイルを読み込むPHPファイルがあり、同じフォルダの中に
data.txtというデータファイルがあった場合、第一引数には「data.txt」と、ファイル名を書くだけで結構です。
もし、sampleというフォルダの中にPHPファイルがあり、同じフォルダの中に「data」というフォルダがあり、
その「data」というフォルダの中に「data.txt」があった場合、引数の指定は「data/data.txt」と言うように、
フォルダの階層を加えて指定します。
114猪(筋肉質):2006/12/30(土) 07:22:05.31 ID:uIdkGvb10
や、やっと追いついたっ!111
まったくphpを触ったことのない漏れも参加させて下さいっ。
115毘沙門(びしゃもん):2006/12/30(土) 07:22:40.72 ID:SBB5TYYn0
本日のステキなVIPPER(19歳)さん・・・・ID:J2qxAvgrO

俺は
始解:風花              読:かざばな
卍解:風花闇紐鳳仙花       読:かざはなやみひもほうせんか

http://ex17.2ch.net/test/read.cgi/news4vip/1167428141/
116犬と初詣:2006/12/30(土) 07:23:31.13 ID:Wv9W/nmQ0
fopenの第2引数は、ファイルをどういう形で開くか、と言う指定になります。
選べるのは、
 ・読み込み専用
 ・書き込み専用
 ・ファイルを新規作成して書き込む専用
 ・読み書きどちらもできる
の4つと、その補助的な指定です。

これらの指定の方法は決まっていて、上の例にあわせて書けば、
 r
 w
 x
 a
となります。
補助的な指定は、それぞれ後ろに「+」をつけて記述します。
補助的な指定をした場合、読み込み専用の場合でも書き出しが出来たり、書き出し専用でも
読み込みが行えたりします。

今の場合は、ファイルの内容を読み込みたいので、「r」を指定します。

以上のことから、fopen関数の書き方は、

fopen("ファイルパス", "r");

と、なります。
117犬と初詣:2006/12/30(土) 07:24:24.30 ID:Wv9W/nmQ0
>>114
どーぞどーぞ
質問あれば言ってくださいね
118犬と初詣:2006/12/30(土) 07:27:00.48 ID:Wv9W/nmQ0
fopenの引数を説明しましたが、fopen関数には引数だけでなく「返り値」と言うものが存在します。
コレは、その関数を実行した時に値が返されるというものです。
先のrand関数の場合、生成された乱数の値(適当な数字)が返っていましたね。
fopen関数では、「このファイルをこう言う形で開きましたよ」という「ファイルポインタ」というモノが返されます。
コレによって、いくつかのファイルを一度にたくさん開いても、どのファイルから読み込むか、と言うときに
このファイルポインタを使ってPHPに指定する事が出来ます。

返り値の受け取り方は、普通に変数に代入する方法と同じです。
ですから、fopen関数の返り値を受け取る記述を含めると、以下のようになります。

$file_point = fopen("ファイルパス", "r");

次に、ファイルの内容を読み込むfread関数ですが、コレはfopen関数と比べると単純です。
fread関数も2つの引数を取ります。
第1引数は、先ほどのファイルポインタです。(リソースハンドラとも呼ばれます[厳密にはイミが違いますが])
ですから、上の例では、「$file_point」を指定する事になります。

第2引数は、ドレくらいのサイズのデータを取得するか、を指定します。
一般的には、ファイルサイズを指定しますね。

しかし、サーバ上にあるファイルのサイズなんてプログラムを書いてる時にはわかりませんから、
コレも関数で取得する必要がありますね。
ファイルサイズを取得する関数はfilesizeという、そのままの関数があります。
filesize関数は一つだけ、引数を必要とします。
その引数は、サイズを調べたいファイルのパス(ファイルの場所)です。

また、fread関数も返り値を持っており、その返り値は読み込んだファイルデータです。
以上のことから、fread関数では、以下のような記述になります。

$file_data = fread($file_point, filesize("ファイルパス"));
119猪(カレー味):2006/12/30(土) 07:27:16.73 ID:OVw9KZPo0
この場で理解するのは諦めてスレ保存しとくお
後でゆっくり見ます、わかると面白そう
120猪(筋肉質):2006/12/30(土) 07:29:15.51 ID:uIdkGvb10
>>117
ありがとうございます。

よければ質問させて下さい。
このfopen関数は追記書きこみはできないんですか?
あと、ファイルポインターみたいなのは意識する必要は?
121犬と初詣:2006/12/30(土) 07:29:39.97 ID:Wv9W/nmQ0
>>118の最後のfread関数の記述で、fread関数の中で、引数の指定にfilesize関数を使っていますね。
こういった関数の指定の方法も、PHPでは自由に書けます。
filesize関数の返り値は勿論ファイルサイズですが、それを直接fread関数の引数として利用しているんですね。
普通に書けば、

$size = filesize("ファイルパス");
$file_data = fread($file_point, $size);

と、2行書かなければいけないところを1行で済ませているワケです。

さて、最後にfclose関数です。
コレはとても単純な関数で、どのファイルを閉じるか、と言う指定をするための引数が1つあるだけです。
ここで指定するのはファイルパスではなく、fopenで開いた時に取得した、ファイルポインタになります。

ですから、fcloseの記述は以下のようになります。

fclose($file_point);
122VIP皇帝:2006/12/30(土) 07:32:16.37 ID:uIdkGvb10
>>120
すみません、質問するのがはやすぎましたorz
ファイルポインターの関数があるんですね。
これは、それぞれ時間がズレて取得することになるように見えるんですが、不特定多数がアクセスするサーバーの場合は、
時間がズレてしまい、ポインターがズレて致命的なことになったりしないんでしょうか?
123書初め(女優になるんだ):2006/12/30(土) 07:32:32.92 ID:ChUZr1J60
>>119
同じく!メモ帳開いてecho書くとこまではついてったが
ここのログとっておくのが先決だと判断し今は流し読みしている。
124犬と初詣:2006/12/30(土) 07:34:02.18 ID:Wv9W/nmQ0
>>119
わかんないところがあったら言って下さいよ。
独習だと本読むのとあんまり変わんないですよ。多分
>>120
何度でも読み書きできます。
fclose関数でファイルポインタを「閉じ」ない限りは。
逆に、そのためのfclose関数なんですね。
いつまでファイルをオープンしておけばいいのか、っていう。
ファイルポインタの意識は、1つのファイルだけを扱ってる時にはほとんど必要ないですが。
例えばA.txtというファイルとB.txtというファイルを同時に開く場合、
$fp_a = fopen("sample/A.txt", "r");
$fp_b = fopen("sample/B.txt", "r");
として、ファイルポインタを2つ用意します。
その上で、
$data_a = fread($fp_a, filesize("sample/A.txt"));
等として、それぞれのデータを読み込んだりするワケです。
125猪(筋肉質):2006/12/30(土) 07:34:55.22 ID:uIdkGvb10
>>119 >>123
いや、>>1さんすっごくわかりやすく書いてくれてるから、漏れは7時にこのスレに出会って、すぐ追いつけたおw
リアルタイムだと面白いおwww
126猪(筋肉質):2006/12/30(土) 07:36:20.93 ID:uIdkGvb10
>>124
あれ?
ファイルポインターがリソースハンドラ???
スミマセン、そのファイルポインターっていうのは、どこまでファイルを読んだか?ってポインターの位置を指し示す
訳じゃあなくて???
ワケワカラン
127犬と初詣:2006/12/30(土) 07:36:49.61 ID:Wv9W/nmQ0
>>122
ファイルには「ロック」という概念があります。
複数のヒトが同時に同じファイルに書き込みをしたりすると大変ですから、最初にアクセスしたヒトに
ファイルポインタを渡し、それ以後のヒトがアクセスしてきても、「ちょっと待ってもらう」ことが出来ます。
最初にファイルポインタを持ったヒト(ファイルをオープンしたヒト)が処理を終えてから、ファイルのロックを
解除し、次のヒトが処理できるようにするわけです。
128犬と初詣:2006/12/30(土) 07:38:33.39 ID:Wv9W/nmQ0
>>126
その通りの理解で結構です。
ファイルポインタ = ファイルのどこを読み書きしているか
リソースハンドラ = どのファイルをオープンしたりの処理をしているか

ちょっと込み入った話になるので、そのあたりの説明を省略してるので、識者のヒトにはわかりにくかった
かもしれません;
申し訳ない
129犬と初詣:2006/12/30(土) 07:40:12.91 ID:Wv9W/nmQ0
さて。>>121の続きです。

これで、ファイルの中身を取得する準備が整いました。

しかし、ファイルの中身を見るだけなのに、合計4つもの関数を使うのは、少々煩雑な気がします。
そこで、これらの作業を全てPHPに任せ、一つの関数を呼ぶだけで済ませる方法もあります。

1つは、file関数です。
コレは引数に読み込みたいファイルパスを指定すれば、ファイルの中身が1行ずつ配列に格納されて取得できます。

$file_data = file("ファイルパス");

上のように記述すると、$file_dataの識別子0の領域に、ファイルの1行目が、識別子1の領域にファイルの
2行目が、識別子2の領域に3行目が・・・と、いう形で取得できます。

ホカにも、file_get_contentsという関数もあります。
これもfile関数と同様、読み込みたいファイルパスを指定するだけですが、返り値が配列ではなく、
文字列になります。

$file_data = file_get_contents("ファイルパス!");

のように記述すると、ファイルの内容が全て、$file_dataという変数に文字列として代入されます。

どちらを使うかは、その時の用途によって使い分けてください。
130猪(筋肉質):2006/12/30(土) 07:41:13.84 ID:uIdkGvb10
>>127-128
すげーよくわかりました、勉強になります。

   \ | /
   ― Θ ―
   / °\
  ∧_∧  / ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ( ・∀・)<  そうだったノカー!
 ( つ  つ  \_______
  〈 〈\ \
  (__)(__)
131犬と初詣:2006/12/30(土) 07:42:35.53 ID:Wv9W/nmQ0
以上で、ファイルの中身を取得する方法がわかりました。

では、さっそくプログラムを書いてみましょう。
データを格納する「data.txt」と言うファイルと、読み込み処理を行うPHPファイル「fread.php」を作成します。
data.txtには、なんでもいいので適当な文字列なり数値なりアスキーアートなり、好きなものを書いて保存してください。
fread.phpには、上で説明した、4つの関数を使う場合、若しくはfile関数などで一括でファイルの内容を
取得する処理を書き、その情報を表示する処理を書いてください。
例えばfile関数を使った場合、配列にデータが1行ずつ入ってくるので、$file_data配列をfor文やwhile文で
ループさせながら表示する事になりますね。

2つのファイルをサーバにアップロードし、動作を確認してください。
132犬と初詣:2006/12/30(土) 07:45:06.85 ID:Wv9W/nmQ0
先ほどのファイル読み込みのサンプルファイルを
ttp://www20.tok2.com/home/viptest/sample/fread.php

ttp://www.0yen-web.com/usr/vip2ch/sample/fread.php
にアップしました。
ttp://www.0yen-web.com/usr/vip2ch/source.php?path=sample%2Ffread.php
で、ソースを見ることが出来ます。
133猪(カレー味):2006/12/30(土) 07:48:24.80 ID:OVw9KZPo0
初めてサイトの「表示」→「ソース」見てみたけど
こうやって組み立ててるのか〜ってわかるようになるのよね
wktk
134猪(筋肉質):2006/12/30(土) 07:48:33.45 ID:uIdkGvb10
あれ・・・うごかないorz
135犬と初詣:2006/12/30(土) 07:48:36.33 ID:Wv9W/nmQ0
それでは次に、サーバ上のファイルにデータを書き出す処理について説明します。

基本的には、先ほど関数を4つ使って読み出す処理と流れは同じです。(読むのが書くのに変わっただけですね)
1.ファイルを開く
2.ファイルにデータを書き出す
3.ファイルを閉じる

そのため、使う関数も先ほどのfopenとfcloseはそのままです。
唯一、機能が違う為、freadの代わりにfwriteという関数を、データの書き出し用に使用します。

fopenについては先ほど説明しましたが、今回は書き出し用にオープンするので、第2引数が「r」のままでは
都合が悪いですね。(「r」は読み込み専用でオープンするため)
書き出し用でオープンする際には、「w, a, x」のいずれかを使用します。
先ほどはこの3つについてはあまり詳しく説明しませんでしたので、ここで説明します。

まず、「w」を指定した場合、現在ファイルに記述されている内容を破棄し、新たにデータを上書きします。
例えばアクセスカウンタ用のアクセス数データなどではこちらの方が都合がいいですが、掲示板などのように
過去のデータを保持しておく事が大事な場合は、このオプションでは都合がよくないですね。

そういう時は、「a」オプションを使用します。
この指定では、ファイル内部のポインタがファイルの一番最後に置かれるため、書き出されたデータは
常に追記される形になります。
ですから、掲示板などのデータ書き出しには適していますが、逆にアクセス数のデータなどには向いてません。
「1」というデータが「12」になり、次には「123」になるなど、有り得ない増え方をすることになります( ;゚∀゚)

最後に「x」ですが、こちらはサーバ上にファイルが存在しない事を前提とし、新たにファイルを作成して書き出す
オプションになります。
例えば、会員専用のサイトなどを運用する際、会員のデータを個人別のファイルの中に記述する場合などに使えますね。
(佐藤さんのデータはsatou.txt、田中さんのデータはtanaka.txtとかにするような)
xオプションを指定すると、ファイルが既に存在した場合は返り値のファイルポインタの変わりにエラーが返ります。
136犬と初詣:2006/12/30(土) 07:50:48.03 ID:Wv9W/nmQ0
>>134
エラーが出ましたか?
何も表示されませんか?
>>132のソースなんかと比べてみて、おかしなところがないか確認してみてください。
ソースを書いてみていただけると、こちらでもチェックできますが。
137家族で初詣:2006/12/30(土) 07:52:19.83 ID:nleJSRBJ0
ばぁか


専門知識無く入社しても一日10時間以上、延々プログラム作らさせられ続ければ普通に覚える
ランブラリから作ったり、コンパイラ手がけるようなレベルでもなければ正直誤差
138犬と初詣:2006/12/30(土) 07:52:25.25 ID:Wv9W/nmQ0
次に、ファイルへのデータ書き出し用関数、fwriteについて説明します。

fwrite関数は、fread関数と同様、まずどのファイルに書き出すかということを示す為にファイルポインタを
第1引数とします。
第2引数は、書き出すデータになります。
第3引数として、書き出すデータの長さを指定する事も出来ますが、コレは指定しなくても結構です。

変数stringに書き出すデータが格納されていて、変数file_pointにファイルポインタが格納されているとすると、

fwrite($file_point, $string);

と、なります。


最後にfclose関数ですが、コレはfreadと同様です。
ファイルポインタを引数として実行するのみです。

fclose($file_point)
139猪(筋肉質):2006/12/30(土) 07:53:31.08 ID:uIdkGvb10
>>136
お手数をおかけしてスミマセン

fread.php
----------
<?php
$filedata = file("data.txt");
$i = 0;
for($i = 0; $filedata[$i] ; $i++){
echo $filedata[i]."<br>";
$i++;
}
?>
----------
実行すると<br><br><br><br>だけソースに表示されます。
data.txtには8行のAAが入ってるんだけど・・・orz
140猪(カレー味):2006/12/30(土) 07:54:05.49 ID:OVw9KZPo0
>>137
SEになりたいわけじゃなくて、娯楽の為に聞いてる人が殆どだと思う
141女医さんと初詣:2006/12/30(土) 07:55:06.92 ID:yWsx7LuP0
ファイルの実行権限とか大丈夫かね。。(−−)zzzzzz
142犬と初詣:2006/12/30(土) 07:55:46.66 ID:Wv9W/nmQ0
これで書き出しに最低限必要な処理については説明しましたが、実用的な処理とするためにはもう一工夫する必要があります。

1つのデータファイルを扱う場合でも、WEBブラウザによる書き込みは容赦なく行われます。
そのため、同時に複数のHTTPリクエスト(WEBブラウザからのHTTP通信によるHTMLデータ取得要求)があった場合、
つまり、同時にたくさんのアクセスがあって、同時にたくさんのデータ書き出しを行う場合、処理が衝突してしまう
可能性があります。
AさんとBさんがほぼ同時にデータの書き出しを行ったとすると、Aさんの書き出し処理の途中でBさんが書き出し処理を
はじめた為、Aさんの書き出し処理にBさんの処理が上書きされて、Aさんのデータはやみに葬られる事になります。

こういった事態を防ぐ為に、先ほど少し説明しました「ロック」という仕組みがあります。
これは、誰かが処理を行っている間はそのファイルにアクセスできないようにする仕組みです。
ファイルロックには2つのロックがあり、1つが「排他的ロック」という、書き込み処理の為のファイルロックです。
もう一つは、「共有ロック」と言い、読み込みのためのファイルロックです。
いずれのロックを行った場合も、ファイルを開いたら閉じたのと同じように、処理が終わったらロックを解除
しなければなりません。
そうしないと、いつまでたってもホカのヒトがそのファイルにアクセスできない状態(デッドロックと言います)になってしまいます。
これ系のバグを書いたプログラマは、しばらく同僚から白い目で見られることになります;

さて、ロックの仕方は、flockという関数を使い、その引数の値によってロックの種類を決定します。
第1引数は、やぱりファイルハンドラです。
第2引数に「LOCK_SH」を指定すると、シェアロック、つまり、共有ロックをかける事になります。
同様に、「LOCK_EX」を指定すると、エクスクルージブロック、つまり、排他的ロックをかけます。
同様に「LOCK_UN」を指定すると、アンロック、つまり、ロックが解除されます。

ところで、この「LOCK_UN」などの文字は、今までのような文字列とは違い、「定数」と呼ばれる特別な
使い方をするものです。
変数に格納された値は、$vip 等のように先頭に「$」をつけて表現しますが、定数ではその文字を書くだけで
値が参照されます。
例えば、ロックを解除する方法は、以下のようになります。
flock($file_point, LOCK_UN);
143猪(筋肉質):2006/12/30(土) 07:56:06.36 ID:uIdkGvb10
>>137
漏れも>>140さんの言うとおり、娯楽のためにスレにお邪魔してるおw
すげー勉強になるから、>>137さんも聞いてったらどお?
144猪(筋肉質):2006/12/30(土) 07:57:39.56 ID:uIdkGvb10
>>141
data.txtは644にしてます。
fread.phpは2行目に嘘ばっかりのファイルパスを指定すると『ファイルが無い』って怒ってくれるから、
phpとしては実行されてるっぽいんだけど・・・
145犬と初詣:2006/12/30(土) 07:57:51.74 ID:Wv9W/nmQ0
>>139
「echo $filedata[i]."<br>";」
ここがナニかヘンじゃないですか?
$filedataは配列の指定になってますが、その識別子は「i」という文字列で扱われてしまいますので・・?
146犬と初詣:2006/12/30(土) 07:59:51.00 ID:Wv9W/nmQ0
さて、それではファイルにデータを書き出す方法もわかりました。
早速、プログラムを書いてみましょう。

先程と同じように、データを書き出すためのデータファイル「data.txt」を用意します。
fread.phpとデータを分けたい場合は、ホカのファイル名でファイルを用意してください。
今度は、中身は何もなくて結構です。
(fread.phpで使ったデータファイルをそのまま利用すると、ファイルにデータが書かれたかどうかを
fread.phpで確認する事が出来ますね)

また、書き出しを行うPHPを「fwrite.php」などで用意します。
fwrite.phpの処理の流れは、以下のようになるはずです。

・ファイルを開く
・ファイルに排他的ロックをかける
・ファイルにデータを書き出す
・ファイルロックを解除する
・ファイルを閉じる
147おみくじ(いいのこいっ):2006/12/30(土) 08:00:23.19 ID:qoK/9RJk0
レンタルブログの更新を文字列で抽出して
題名、URL、記事をHTML形式で出力したいんですが、どうすればできますか?
ちなみに2ちゃスレもタイトルで抽出したいです。
よろしく御願いいたします
148ぬこと初詣:2006/12/30(土) 08:02:43.92 ID:Wv9W/nmQ0
一ついい忘れました。
>>141さん、どうもです。

PHPなどのプログラムからファイルへのデータ書き出しを行う場合、ファイルのアクセス属性を適切に
設定する必要があります。(パーミッションと言います)
パーミッションの設定方法は、FFFTP上でデータファイルを右クリックし、「属性変更」を選びます。
出てきたメニューの「書き込み」の項目にチェックを入れてください。
「ユーザ」だけでなく、「グループ」や、必要であれば「その他」にもチェックをつければ書けるようになります。
失礼しました;

サンプルファイルを
http://www20.tok2.com/home/viptest/sample/fwrite.php
http://www.0yen-web.com/usr/vip2ch/sample/fwrite.php
にアップしました。
特にたいした事はしてません。
説明したままで記述しています。
ソースを
http://www.0yen-web.com/usr/vip2ch/source.php?path=sample%2Ffwrite.php
で確認できますので、見てみてください。
149猪(汗かき):2006/12/30(土) 08:04:10.09 ID:uIdkGvb10
>>145
おっしゃる通り『echo $filedata[$i]."<br>";』でした、ボケてました、スミマセン。

ひとつ質問させて下さい。
>for($i = 0; $filedata[$i] ; $i++){
ここのまん中の『$filedata[$i];』の意味がどうしてもわかりません。

fread.php
----------
<?php
$filedata = file("data.txt");
echo "行数:".$filedata[0]."<br>";
$i = 0;
for($i = 0; $filedata[$i] ; $i++){
echo $filedata[$i]."<br>";
$i++;
}
?>
----------
のようにしても、1行目の『行数:』のところは、AAの1行目が表示されるだけでしたorz
150VIP皇帝:2006/12/30(土) 08:05:57.33 ID:Wv9W/nmQ0
>>147
かなり高度な処理になります・・
まず、「更新されたかどうか」を判断するには、古いデータを丸ごと持っておいて、それと比較するか、
対象となるブログから「更新しました」と言う情報を受け取る必要があります。
後者の方法として「RSS」と言う技術がありますが、RSSのリーダー等を作るには、プロトコルやら
通信やらXMLやらの知識が必要です。

2ちゃんのタイトル抽出はまだ比較的簡単ですが、それでも正規表現という、文字列の比較/抽出
の技術が必要になります。
今回の講義範疇を明らかに超えた内容になるので、簡単に説明を、と言うのは難しいですね・・
151猪(汗かき):2006/12/30(土) 08:07:02.18 ID:uIdkGvb10
>>147
そのレンタルブログがどんな仕様でデーター化されてるのかわからんけど、
楽にテキスト化したいのなら、htmlまるごとソースでもらってきて、プログラム内部でデーターによりわけたら?
2ちゃんねるのスレタイはsubject.txtだったかで一覧が鯖にあがってるから、わざわざ抽出する必要ないよ。
152ぬこと初詣:2006/12/30(土) 08:11:22.41 ID:Wv9W/nmQ0
>>149
条件としての「$filedata[$i]」は、「その存在自体」が条件という意味になります。
例えば
$array[0] = "a";
$array[1] = "a";
$array[2] = "a";
という配列があると、識別子が0-2までの間は「a」という値が代入されていますが、識別子3の領域
$array[3]には、値が代入されていません。
つまり、「値が存在しない」と言う事になります。
そこで、「存在する」という条件と一致しない為、ループが終了する事になります。

また、配列に格納されているデータ項目数を取得するには「sizeof」関数を使います。
先の$array配列が何個のデータを持っているかは
$kosuu = sizeof($array);
とすることで取得できます。

>>149の場合では、
echo "行数:".sizeof($filedata)."<br>";
とすることで、期待通りの動作をすると思います。
153ぬこと初詣:2006/12/30(土) 08:13:55.09 ID:Wv9W/nmQ0
では、実践編に移ります。

まずは、アクセスカウンターを作ってみましょう。
アクセスカウンターとは、そのサイトを訪れたヒトの数を記録し、表示するものですね。
本来であれば、同一IPアドレスからのアクセスは1日1回までしかカウントしない、などの制御を入れる
ものですが、今回はひとまず単純に、そのページにアクセスがあった数を記録するものとします。

アクセスがある、ということは、そのPHPが実行される、ということになりますから、カウントアップの条件は
特にありません。
ひたすらカウントアップするのみです。
ただ、今まで何人来ていたか(何回そのページが表示されたか)、というデータを記録する必要があります。
ですから、先程のように、「data.txt」と、「acount,php」と言うような、ファイル2本立てのシステムになります。
処理をするPHPのファイルと、データを保存するファイルですね。

data.txtには、初期値として「0」を入力しておけばいいでしょう。
154猪(汗かき):2006/12/30(土) 08:14:29.72 ID:uIdkGvb10
>>152
なるほど、よくわかりました。
ただ、さきほどのスクリプトが4行しかAAを表示してくれないのですが・・・これのデバッグの助けになるような
方法はありませんでしょうか?
155ぬこと初詣:2006/12/30(土) 08:15:42.32 ID:Wv9W/nmQ0
acount.phpは、アクセスカウントを行う実体ですね。
別にファイル名はなんでもいいんですが。

このプログラムの処理の流れとしては、以下のようなものが考えられます。

1.data.txtから、コレまでのアクセス数を取得
2.取得したアクセス数をカウントアップ(1を足す)
3.カウントアップした値でdata.txtを上書き
4.カウントした値を画面に表示

アクセスカウンターですから、ファイルロックが必要ですね。
とりあえず今の仕様では条件分岐やループは必要なさそうです。
(>>153でちょっと言った、同じIPアドレスはカウントアップしない、とかだと、条件分岐が必要ですが)

この条件で、アクセスカウンタを作成してみてください。
156ぬこと初詣:2006/12/30(土) 08:21:09.58 ID:Wv9W/nmQ0
>>154
データのAAがどんなものかわかりませんが。
実はこのループ、ループの継続条件が「存在」となっているため、一つ弱点があります。
$array[0] = "a";
$array[1] = "";
$array[2] = "a";
というような配列を作った場合、$array[1]には、「なにもない」値が代入されています。
この場合も、存在の条件からは外れてしまう為、ループが終了してしまう事になってしまいます。
ひょっとするとコレが原因かもしれません。
この場合は、ループの継続条件を「存在」ではなく、「配列の個数があるかぎり」とすることで回避できます。
先程、sizeofという関数を使って配列のデータ個数を取得する方法を知りましたので、
for($i = 0; sizeof($filedata) >= $i; $i++){
とすると、空白の行があったとしても、構わず次のループに処理が移ります。
変数$iが配列のデータ個数を超えれば、ループが終了します。
157ぬこと初詣:2006/12/30(土) 08:25:05.17 ID:Wv9W/nmQ0
>>155の続きです

単純仕様のアクセスカウントが出来た方は、IPアドレスを取得し、同一IPアドレスからのアクセスは
1日1回までしかカウントアップしない、という仕様を盛り込んでください。
(1日1回とかの回数はおまかせします。なんらか制限を入れるのが目的です。)

アクセスしてきたクライアント(PC)のIPアドレスを取得するには、getenvという関数を使います。
この関数は、「環境変数」を取得する為の関数です。
環境変数というのは、クライアントのIPアドレスやリモートホスト名、そのページに来る前のページなどの
アクセス情報です。

クライアントのIPアドレス(正確には、多くの場合、リモートホストのIPアドレス)は、「REMOTE_ADDR」
という名前の環境変数として送られます。
ですので、取得する際にはその名前を引数として、

getenv('REMOTE_ADDR');

とします。
同じように、リモートホスト名を取得するには「REMOTE_HOST」、ブラウザの種類(User_Agent)を取得
するには、「HTTP_USER_AGENT」を引数として用います。

これらの環境変数を利用して、何らかの制限を設けたり、表示を変えてみたりしてみてください。
よく、携帯用のページとPC用のページを同じURLで処理しているサイトがありますが、それらはこの
User_Agentを使って、携帯なのかPCなのかを判断しています。
携帯の場合、User_Agentに「DoCoMo」などの文字が入っているので、それがあれば「携帯」なければ
「PC」として、それぞれのページを表示しているんですね。
158猪(友達がvipper):2006/12/30(土) 08:25:09.73 ID:+YTry+p1O
とりあえず>>1同じスレタイで3日の夜あたりにもう一度スレ立てるから
再講義してくれ
159猪(汗かき):2006/12/30(土) 08:27:13.02 ID:uIdkGvb10
>>156
なるほど、よくわかりました、どうもありがとうございました。
あとでよくみてます。

それにしてもアクセスカウンターがうまくいかない・・・orz
data.txtの中身が011111111ってなってるwww
phpってすごく難しいんですね。
160ぬこと初詣:2006/12/30(土) 08:27:45.97 ID:Wv9W/nmQ0
ここまでで、PHPの基本的な処理と、サーバ上でのファイルの読み書きまで出来るようになりました。
最後に、簡単な掲示板を作ってみましょう。

掲示板となると、アクセスカウンタ程単純なプログラムというワケには行きませんね。
ざっとみて、以下のような機能が必要になります。

■ファイルの種類
・データ保存用ファイル
・文字入力画面用のHTML
・書き込まれた内容の表示画面のPHPファイル

入力画面と表示画面は1枚のファイルで、内容を見ながら書けると使いやすいですが。
ひとまずは、前に使った「input.html」等を使っていただいてもいいと思います。

■処理
・送信された入力文字があるかチェック
・入力データがあった場合、入力データをファイルに書き出し
・データファイルからデータを読み込み
・データの全件を画面に表示
161ぬこと初詣:2006/12/30(土) 08:32:00.11 ID:Wv9W/nmQ0
>>158
4日から仕事で、3日まで実家にいるんで、微妙ですがw
5日の夜とかだとかなり助かります。
今日の夜でも大丈夫かな。明日から実家に戻るので。
>>159
ファイルポインタがファイルの「最後」になってしまってるからじゃないですかね。
>>135で書きましたが、fopenの第2引数によって、ファイルポインタがドコに行くかが決まります。
今の場合は必ず上書きですから、
 1.現在の値を「file()」関数などで取得
 2.取得した値をカウントアップ
 3.データファイルを、第2引数「w」のオプション指定で開く(現在の内容を破棄して上書きモード)
 4.ファイルに値を書き込む
 5.ファイルを閉じる
このような処理であれば、必ず上書きされるので、以前のデータの後ろに値が来る事がなくなります。
162ぬこと初詣:2006/12/30(土) 08:35:37.06 ID:Wv9W/nmQ0
ところで、今回の掲示板では、データファイルのフォーマット(書式)も問題になりますね。
まず、書き込み1件ごとにまとめる必要があり、さらにその中で、名前とメアドと本文を別々に保存しなければ
ならない事になります。

こういった要求を実現する最も単純なデータフォーマットとして、CSVというものがあります。
コレは、データ1件を1行に記録し、細かな名前やメアドなどは、1行のなかで「,」(コンマ)で区切って
記録すると言うものです。
例えば、名前:田中、メアド:[email protected]、本文:ブーン だとすると、

data.txt
----------------
田中,[email protected],ブーン
鈴木,[email protected],10分で1000行ったらうpします
----------------

と言うような形になります。
こうする事で、データのグループ化と、それぞれのデータ部品の区別も出来ます。

ただ、単純なcsvでは、区切り文字である「,」が本文などに含まれているとバグとなる可能性があるなど、
いくつか困ったちゃんなところがありますが。
今回は「仕様」として、「,」は入力データに含めてはいけない、として無視しましょう。

カンマなど、何らかの区切り文字で区切られた文字を別々に取り出すには、explodeなどの関数を使うと便利です。
explode関数は、第一引数に区切り文字(ここでは「,」)、第2引数にデータ本体を指定します。
結果は配列で返り、カンマで区切られた文字列などのデータが、配列の一つ一つに格納されます。
上の例で、田中さんのデータが入った1行を$tanakaという変数に格納していたとすると、
$data = explode(',' , $tanaka);
で、$data[0]に名前が、$data[1]にメアドが、$data[2]に本文が格納されることになります。
163ぬこと初詣:2006/12/30(土) 08:39:13.27 ID:Wv9W/nmQ0
以上で、掲示板を作る為の全ての道具は揃いました。

詳しく処理を書くと、以下のようになります。
・送信された入力文字があるかチェック
・入力データがあった場合
 ・データファイルを開く
 ・書き込み用にファイルロック
 ・入力データを「,」で区切って連結
 ・連結した文字を1行としてファイルに書き出し
 ・ファイルロックを解除
 ・ファイルを閉じる
・データファイルからデータを読み込み
 ・データの1行ごとを取り出し
 ・1行のデータを「,」で区切られたデータごとに取得
 ・取得したデータをそれぞれ表示
・データの全件を画面に表示
 ・データがある間、ループ

上記の流れになると思います。
勿論、プログラムの方法は1つではありませんから、もっとフクザツにも、簡単にもできると思います。
ひとまず、書いて、読める、そんな掲示板を作ってみてください。
作って動いたものを見ていたら、ココはこう言う方がいいなぁなど、自発的に改修点が出てくるはずです。
既にそういった要望にある程度応えられる知識はあるはずですから、よく考えて、色々いじってみてください。
164猪(汗かき):2006/12/30(土) 08:39:50.29 ID:uIdkGvb10
あ゛ーーーー、もう駄目だ・・・授業についていけない・・・orz

みんなリアルタイムについていけてるの???
165ぬこと初詣:2006/12/30(土) 08:45:36.22 ID:Wv9W/nmQ0
アクセスカウンタのサンプルを
http://www.0yen-web.com/usr/vip2ch/sample/acount.php
におきました。
ソースは
http://www.0yen-web.com/usr/vip2ch/source.php?path=sample%2Facount.php
で、確認できます。
166猪(汗かき):2006/12/30(土) 08:46:58.08 ID:uIdkGvb10
>>165
ぜひファイルロックしてるスクリプトもお願いします。
167ぬこと初詣:2006/12/30(土) 08:47:29.65 ID:Wv9W/nmQ0
掲示板について、ファイルの1行にデータを書く、とありますが、データを改行するには、改行コードを
ファイルに書く必要があります。
改行コードは、CR-LFでは「\r\n」、「CR」が「\r」、LFが「\n」になります。
CR-LFとかLFとかは、まぁWindowsとLinuxなど、OSによって扱いが変わったりする、というだけです。

例えば、「田中さん」と言う文字列の最後に改行コードを書くには、以下のように「\n」などを連結します。
$name = "田中さん";
$data = $name . "\n";
168ぬこと初詣:2006/12/30(土) 08:52:16.53 ID:Wv9W/nmQ0
>>166
書き込み時にLOCKするようにしました。
http://www.0yen-web.com/usr/vip2ch/source.php?path=sample%2Facount.php
169黒豆(二粒):2006/12/30(土) 08:52:50.06 ID:DHMlnCDmO
VIPらしくないスレだな

真面目に聞いてるヤツがいて良かったな
ガンガレ
170ぬこと初詣:2006/12/30(土) 08:54:42.15 ID:Wv9W/nmQ0
掲示板は出来ましたかね。
サンプルを
http://www20.tok2.com/home/viptest/sample/index.php
http://www.0yen-web.com/usr/vip2ch/sample/index.php
においておきます。
こちらは、データの一括削除の機能などをつけています(ソースを見るとわかりますが、アホみたいに簡単です)
こういった簡単な機能など、色々付け足したりして遊んでみてください。
ソースは
http://www.0yen-web.com/usr/vip2ch/source.php?path=sample%2Findex.php
で、確認できます。
171猪(汗かき):2006/12/30(土) 08:55:05.21 ID:uIdkGvb10
>>168
わざわざありがとうございます。
さっきとおなじファイル名ですか?
172ぬこと初詣:2006/12/30(土) 08:56:18.77 ID:Wv9W/nmQ0
>>171
同じです。
表示が変わらない場合、「Ctrl」+「F5」でを押してみてください。
キャッシュの有無に寄らず更新されます。
173ぬこと初詣:2006/12/30(土) 08:58:01.60 ID:Wv9W/nmQ0
掲示板のサンプルの中で、このスレでは説明していない関数もいくつか使ったりしています。
また、PHPの関数で、こんな事ができる関数はないかなとか、他の制御構文や演算子を習得したい、など
ありましたら、以下のリファレンスを参考にしてください。
このスレでの演算子の説明では、このリファレンスを参考にしました。

実際に開発の仕事をすることになったときも、こういったリファレンスを見ながら作業を行う事になると思います。

http://www.php.net/manual/ja/
174猪(汗かき):2006/12/30(土) 08:59:58.21 ID:uIdkGvb10
>>172
ありがとうございます、無事に表示できました。
このロックのやり方だと、読み込み時にダブってしまうと、かなりの高確立でカウンターが1つ減ってしまうと思うのです。
それで、鯖の負荷の軽減のためにも、ファイルのオープンを1回にして、
オープン→ロック→読み込み→カウントアップ→ポインターを先頭に→書きこみ
という流れをやりたいと思ってるのですが・・・うまくいきません。
どうしてもポインターが移動しないような・・・orz

acount.php
----------
<?php
$rh = fopen("data.txt", "a");
flock($rh,2);
# $data = fread($rh, filesize("data.txt"));
$data = fread($rh, 10000);
$data++;
rewind($rh);
fwrite($rh, $data);
flock($rh,3);
fclose($rh);
echo "カウンターは".$data."です。<br>";
?>
----------
175女装して初詣:2006/12/30(土) 09:00:46.39 ID:Wv9W/nmQ0
何か質問などがあれば、勿論このスレで受け付けますが、dat落ちなどしたり、時間がたった後など、
メールをいただければできる範囲でお応えします。
(基本的に捨てアドなので、迅速な対応は難しいかもですが)

それでは、このスレを見てプログラミングを始めた方が、いつか自分が欲しいものを自分で作れるように
なれたりしたら、そんなヒトが一人でもいたらいいなぁと願っています。
176黒豆(一粒):2006/12/30(土) 09:01:58.70 ID:4vMq+tUgO
来年は働きながら通信大学で保育士と幼稚園教諭の免許とりたい
だがどんなとこで働けばいいのか見当もつかない
177塩ブリ:2006/12/30(土) 09:02:37.56 ID:fe5kHyf50
         ノ从 ノ  ,,===、
        ニニ=   〃    `ヾ'ヽ
       /    :.     _,,,,,,,,,、   i
       i===- )   ´      i
       ノ     /   、      ヽiヽ、,,,,r、
       i      (、 r ノヽ、        i__ノ
       ',     ノ: :    ヽ...      i
       ヽ   rニ===ニヽ         i
        ヽ  ー'ー'ー'ー' i       ノ
         ヽ  ヽ`ー'´ /       /
          ヽ ゝ,,,,,,,,ノ  :   /
           ヽ      ノ /
            ヽ    ノ-‐'
178家出娘と初詣:2006/12/30(土) 09:04:19.33 ID:yWsx7LuP0
ちょw
179女装して初詣:2006/12/30(土) 09:05:18.87 ID:Wv9W/nmQ0
>>174
その記述では、freadの後でfwriteをそのままやっているため、ファイルポインタが戻らないのが原因ですね。
それを解消するには、fseekと言う関数を使ってファイルポインタを移動させたり、今の用途で言えば
掲示板のサンプルで使っているようにftruncateという関数を使うと便利です。
ftruncate:http://www.php.net/manual/ja/function.ftruncate.php
fseek:http://www.php.net/manual/ja/function.fseek.php
おっしゃる通り、普通は2回ファイルを開く事はせず、1度のファイルオープンでやりたいことをやってしまいます。
180女装して初詣:2006/12/30(土) 09:08:57.47 ID:Wv9W/nmQ0
http://www.0yen-web.com/usr/vip2ch/
にアクセスすると、スレで提示してきたサンプルと、そのソースが一覧になるようにしました。
tok2では、サーバの設定により動作しないようですが、index.phpとして置いているので、ソースを
確認したいヒトはtok2にFTPで入って、ファイルをダウンロードしてみてください。
181猪(加齢臭):2006/12/30(土) 09:14:02.31 ID:uIdkGvb10
>>179
どうしてもファイルポインターが移動しませんorz
rewind($rh); と fseek($rh ,0); を試してみたのですが・・・
182女装して初詣:2006/12/30(土) 09:16:53.80 ID:Wv9W/nmQ0
>>179の書き方、ちょと不足してますね。
rewind関数でファイルポインタを先頭に持ってこようとされていますが、rewind関数には使用制限があります。
http://www.php.net/manual/ja/function.rewind.php
> 注意: 追記 ("a" もしくは "a+") モードでファイルをオープンした場合、 ファイル位置によらずファイルに書き込まれるデータは常に追加されます。
>>174では、fopenを[a]モードでopenされていますので、ファイルポインタの位置と書き込み位置が一致しない
という事になってしまっていたんですね。
http://www.php.net/manual/ja/function.fopen.php
などを参照し、「r+」モードなどで試してみてください。
183女装して初詣:2006/12/30(土) 09:17:43.22 ID:Wv9W/nmQ0
>>181
すれ違い失礼・・
rewindとaモードを見逃していたので、>>182に解説入れました
184おみくじ(既知):2006/12/30(土) 09:20:37.76 ID:qoK/9RJk0
>>183
メールが送れないぞ
185VIP皇帝:2006/12/30(土) 09:22:25.60 ID:Wv9W/nmQ0
>>184
失礼・・
しばらくアカウント放置してたんで無効になってました
今有効にしたんで、よろしくです
186おみくじ(既知):2006/12/30(土) 09:22:40.15 ID:qoK/9RJk0
>>1
>>175のアドレスあってますか?
187おみくじ(既知):2006/12/30(土) 09:24:05.36 ID:qoK/9RJk0
>>185
了解 送ったのでよろしく御願いいします
188女装して初詣:2006/12/30(土) 09:24:24.26 ID:Wv9W/nmQ0
>>186
アドレスに間違いはないけど>>185の原因だと思うので、もう一度よろしくす
189猪(加齢臭):2006/12/30(土) 09:24:52.03 ID:uIdkGvb10
>>183
無事に動きました、ありがとうございました。

acount.php
----------
<?php
$rh = fopen("data.txt", "r+");
flock($rh,2);
$data = fread($rh, filesize("data.txt"));
# $data = fread($rh, 10000);
$data++;
rewind($rh);
# fseek($rh ,0);
# ftruncate($rh ,0);
fwrite($rh, $data);
flock($rh,3);
fclose($rh);
echo "カウンターは".$data."です。<br>";
?>
----------
190猪(加齢臭):2006/12/30(土) 09:27:48.52 ID:uIdkGvb10
次は掲示板か・・・きっとついていけない気がする・・・
こんな簡単な例題だってのに、おじさんびぱーに新規な言語は無理だったか・・・
191猪(ようじょ):2006/12/30(土) 09:29:11.90 ID:1mUz3PIg0
>>1はIT関係の仕事に就きたいわけ?
止めたほうがいいと思うよ。俺も転職活動してるけど
転職活動で知り合った人がIT関係で働いててもうITでは働きたくないって
言ってた。納期が迫れば毎日徹夜で体力勝負みたいだし
友達も辞めたいって言ってるし。
192猪(加齢臭):2006/12/30(土) 09:33:36.20 ID:uIdkGvb10
>>191
たしかにIT土方って言葉はあるけれど、別にSEさんに限らなくてもどんな仕事にだってツライ部分はあるんだし、
今の時代、働けるだけマシって言い方もあるんじゃないかな?
偏った情報だけで判断するのは勿体ないと思うよ。
ちなみにここの>>1さんは働いてるって上の方で書いてあったような気が・・・
193おみくじ(既知):2006/12/30(土) 09:35:10.37 ID:qoK/9RJk0
>>1
1(名前)2(メアド)3(コメント)で投稿してるんですが、表示されてませんよ
index.phpのレス一覧のデータ表示にバグありますか?
194女装して初詣:2006/12/30(土) 09:37:10.73 ID:Wv9W/nmQ0
>>189
よかったぁ
自ら「こういう処理の方がいい」と考えるのはとても大事なので、ぜひ常にその姿勢で
>>190
やってる事はそんなにかわらないですよ
まぁ、一気にやろうとするとアレかもなので、ゆっくりどうぞ
>>191
IT関係と一言で言ってもピンからキリまでありますし。
もう7年ほど働いてますが、かなり満足してます。
最初の2年くらいは劣悪な職場環境でしたが、以後はしっかりした会社でもあるため、
就業時間も休暇も給与も、満足してます。
会社によってひどいところがあると言うのは、何もIT業界だけじゃないですよ。
195女装して初詣:2006/12/30(土) 09:39:53.30 ID:Wv9W/nmQ0
>>193
キャッシュが読まれてて更新されてない、ってコトはないですか?(POSTだからないと思うけど)
http://www.0yen-web.com/usr/vip2ch/sample/index.php
では、>>193の内容で書き込み出来てますが
196猪(加齢臭):2006/12/30(土) 09:47:54.76 ID:uIdkGvb10
ひさしぶりにシンタックスエラーなんて見たorz
Parse error: syntax error, unexpected ';' in /imouto/public_html/viplive/bbs.php on line 7
むっつかしいなーwwwwww

bbs.php
----------
<?php
$rh = fopen("bbs.txt", "r+");
flock($rh,2);
$data = file_get_contents($rh, filesize("bbs.txt"));
$j = 0;
for($i = 0; sizeof($data) ; $i++){
if ($data == "\r") { $j+; }else{ $bbsdata[$j] = $bbsdata[$j].$data; }
}
rewind($rh);
fwrite($rh, $_POST["name_data"].",".$_POST["mail_data"].",".$_POST["comment_data"]."\r");
flock($rh,3);
fclose($rh);
echo "内容は".$data."です。<br>";
?>
----------
197猪(加齢臭):2006/12/30(土) 09:49:48.49 ID:uIdkGvb10
ちょwww・・・よく考えたらバイナリーでファイル内容が全部配列に入ってる・・・
行単位でリードできたら簡単なのにorz
198女装して初詣:2006/12/30(土) 09:50:28.92 ID:Wv9W/nmQ0
>>196
7行目にエラーがあるよと教えてくれてますね。
7行目は
if ($data == "\r") { $j+; }else{ $bbsdata[$j] = $bbsdata[$j].$data; }
ですが、この「$j+;」のところが、ちょっとヘンですね。
足し算をする相手がいるか($j+1)、カウントアップ用の記述か($j++)どちらかでないと、構文として
おかしいぞと言う事に。
199女装して初詣:2006/12/30(土) 09:51:58.01 ID:Wv9W/nmQ0
>>197
そういうときにこそリファレンスを。
http://www.php.net/manual/ja/function.fgets.php
fgetという便利な関数があります。
200おみくじ(既知):2006/12/30(土) 09:52:09.65 ID:qoK/9RJk0
>>195
キャッシュの問題でした。
内部で更新されるからですかね・・・
201女装して初詣:2006/12/30(土) 09:53:12.78 ID:Wv9W/nmQ0
>>200
サーバの設定で、キャッシュを優先にしてるのかもですね。
無料のサーバでPHP使えるんで、文句は言えませんが;
202猪(加齢臭):2006/12/30(土) 09:54:46.36 ID:uIdkGvb10
>>198-199
ありがとうございます、試してみます。

>>200
つ <meta http-equiv="expires" content="0">
203おみくじ(既知):2006/12/30(土) 09:55:01.76 ID:qoK/9RJk0
>>201
なるほど・・・
204女装して初詣:2006/12/30(土) 09:56:03.97 ID:Wv9W/nmQ0
ではでは
年末年始に向けて髪切って来ますのでこのあたりで。
VIPらしからぬスレで失礼しました。
205猪(加齢臭):2006/12/30(土) 09:58:19.95 ID:uIdkGvb10
>>204
おじさんびぱーにもphpを習得するキッカケを作って下さって、そして色々と教えて下さってありがとうございました。
なんとかphpも組めるようになれるよう、あとは独学でがんばってみます。
206おみくじ(既知):2006/12/30(土) 09:59:27.28 ID:qoK/9RJk0
>>202
その処理はデータフルイルを優先する処理ですか?
207猪(アイドル):2006/12/30(土) 10:01:19.08 ID:uIdkGvb10
>>206
いえ、ブラウザにキャッシュを作らないようにさせて、さっきみたいな何にも表示されないとかの
トラブルを避けられるように・・・と思ったのですが。
208おみくじ(きち):2006/12/30(土) 10:01:23.32 ID:qoK/9RJk0
>>204
お疲れ様でした・・・
209書初め(謹賀新年):2006/12/30(土) 10:01:29.17 ID:xALcox4I0
勉強になりました
乙であります
210おみくじ(きち):2006/12/30(土) 10:02:48.49 ID:qoK/9RJk0
>>207
ふむ・・・
その処理を入れて作ってみます
211おみくじ(きち):2006/12/30(土) 10:15:06.51 ID:qoK/9RJk0
>>202
>>207
できました
どうもありがとう
212初夢(正月からアニメ)
>>1
お疲れ様でした〜。