トップページphp
1001コメント296KB

くだすれPHP(超初心者用)6

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2009/04/05(日) 22:04:26ID:???
このスレッドは、他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。
PHP使いが優しくコメントを返しますが、
お礼はPHPの布教と初心者の救済をお願いします。

PHP Home Page
ttp://www.php.net/
ttp://jp.php.net/

前スレ
くだすれPHP(超初心者用)5
http://pc11.2ch.net/test/read.cgi/php/1227303362/

関連スレ
PHP総合雑談スレ
http://pc11.2ch.net/test/read.cgi/php/1200314111/
PHP初心者勉強会やらんかね!
http://pc11.2ch.net/test/read.cgi/php/1209137730/
0611nobodyさん2009/07/10(金) 01:56:05ID:dQkRWDmk
OS:WinXP-Pro(SP2) ブラウザ:FieFox3.0.11
Apache:2.2.9,PHP:5.2.6

書籍の動作が再現できません。下記コード(抜粋)は
http://uproda11.2ch-library.com/186009Ms1/11186009.jpg 
の表示になりますが、上のtext1フォームに入力してボタンを押しても「」内に表示されません。
※同じくPOSTも駄目です。


コード(専ブラでこのコード自体が実行されるのでJPG化しました)
http://uproda11.2ch-library.com/186010y2f/11186010.jpg

フォームに入力した文字列はFireFoxのURLバーに追記されるだけです。
どこが間違っているのでしょうか? (IEでも駄目でした)
0612nobodyさん2009/07/10(金) 02:02:08ID:???
>>611
そのバーに出てるアドレス(追記前)を書いてみましょう。
0613nobodyさん2009/07/10(金) 02:07:39ID:???
>>611
(1)アパッチ起動してる?

(2)urlにはlocalhostって入力してる?
phpファイルをダブクリでは動かないよ
0614nobodyさん2009/07/10(金) 02:22:30ID:???
どうも。

>>612
file:///C:/php5/hajimete_php5/07-03_01.php?text1=〜
です(『〜』が追記部分)


>>613
アパッチは起動してますが、「urlにはlocalhostって入力してる?」の意味が分かりません。
PHPはプログラム選択で起動させています。
0615nobodyさん2009/07/10(金) 02:29:17ID:???
>>614
ブラウザを開いて、
URL欄に、
localhost
って入れないとダメなのよ。
0616nobodyさん2009/07/10(金) 02:32:26ID:???
URLとWebサーバーのメカニズムを勉強しよう。

まず、URLの記述。 file:// で始まるURLは、HTTPによる
通信を伴わないファイル本体の参照だよ。つまり、Explorer
でファイルを開くのと同じこと。だからソースが表示される。

http:// で始まるURLは、HTTPというプロトコルを通して、
通信先のWebサーバーに接続、それ以降の記述によって、
得るデータは、Webサーバーの処理の任せるということなんだ。

http://www.yahoo.co.jp:8080/movie/
~~~~~ ~~~~~~~~~~~~~~~~    ~~~~~~
@    A            B

@がプロトコル。 Aがホスト名(:がついてるとポート番号指定) 
B以降は、Webサーバー側が勝手に解釈する。

上のレスで localhost 、というのは、同じマシンの中のApacheを
参照するときのホスト名だよ。なので、まずは http://localhost
と書かないと、Webサーバー経由のアクセスにならない。

それから、PHPのメカニズム。
url で、xxxx.php で終わるものをApacheが受け取ると、Apache
は、自分が参照できるPHPファイルを開き、PHPで処理してから
ブラウザに結果を渡すんだ。なので、ソースとは違う表現になる。

1) 自分のコンピュータで正しくApacheが構成されているか確認
  しよう。(http;//localhost:xxx/で確認できる)
2)問題なかったら再度、自分の設置したPHPファイルをApache
 経由で見ることができるか確認しよう。

問題の解決の糸口はここからだ。 たぶん。
0617nobodyさん2009/07/10(金) 02:45:39ID:???
>>615-616
早速のレス有難うございます。

出来ました。<?php phpinfo(); ?> は
http://localhost/hajimete_php5/phpinfo.php で実行できています。
これから、http://localhost/hajimete_php5/07-03_01.php 
とするとOKでした。

なお、本には、「URLにlocalhostを含めましょう」とは一行も書いていません。
プンプン(怒
0618nobodyさん2009/07/10(金) 02:47:14ID:???
>>617
前提知識を書いてないのは確かに親切じゃないけど、
http と、http サーバーのメカニズムはWebプログラム
をするなら前提として知っておく必要があると思うぞ。
0619nobodyさん2009/07/10(金) 02:59:36ID:???
書いてないわけないだろ。なんていう書籍?
0620nobodyさん2009/07/10(金) 03:08:47ID:???
>>617
どの本?
0621nobodyさん2009/07/10(金) 03:19:19ID:???
>>619
はじめてのPHPプログラミング基本編 5.3対応 (TECHNICAL MASTER)
です。

localhostに関しては、スクリーンショット図内のURL欄に小さく印刷しているだけです。
0622nobodyさん2009/07/10(金) 03:24:53ID:???
amazonでも説明不足っていう評価だね
0623nobodyさん2009/07/10(金) 03:25:47ID:???
これなのね。
ttp://www.amazon.co.jp/dp/4798020826/

目次を覗いてみるとChapter07-01に
「ブラウザからプログラムを実行する」って項目があるけどダミーなんだろうか。
0624nobodyさん2009/07/10(金) 03:27:24ID:???
第一章に
 01-01 PHPの世界へようこそ [PHPって?]
 01-02 PHPが動作する環境を準備しよう [PHPのインストールと設定]
 01-03 PHPの動作確認 [PHPの動作確認]
とあるけど俺の幻覚なんだろうか。
0625nobodyさん2009/07/10(金) 03:32:21ID:???
>>624
Chapter07に来るまで apache が出て来ないから
そこからずーっとCLIで練習させる本なのかなと思い込んでみた。
0626nobodyさん2009/07/10(金) 03:34:39ID:???
ttp://www.amazon.co.jp/gp/reader/4798020826/ref=sib_dp_srch_bod?__mk_ja_JP=%83J%83%5E%83J%83i&v=search-inside&keywords=localhost&go.x=14&go.y=8
0627nobodyさん2009/07/10(金) 04:36:31ID:???
>>626
関係ないけど、最近の尼はすごいな!
感動した。
0628nobodyさん2009/07/10(金) 14:15:33ID:???
>>611
だめだぜ。
ちゃんとした本を買わないと。
今すぐそんな本を捨てて
新しい本とマニュアルを読みなさい。
後秀和さんの本はあんまりよくないから
0629nobodyさん2009/07/10(金) 14:18:57ID:???
>>628
Tim、乙
0630nobodyさん2009/07/15(水) 10:16:05ID:???
PHPの本読みまくってたら、
ついに読む本がなくなってきた。
25冊は読んだ。
0631nobodyさん2009/07/15(水) 10:19:59ID:???
自分で本を書け
0632nobodyさん2009/07/15(水) 10:28:57ID:???
自分で本を書くのってどうやるのかな?
はじめに出版社に話をするの?
0633nobodyさん2009/07/15(水) 13:12:38ID:???
PHPのプロの方ですか?
0634nobodyさん2009/07/15(水) 13:27:44ID:???
最近始めた初心者です。
ネットを頼りに独学でやってるのですが、行き詰ってしまいました。
2つ質問させて下さい。

1.formからの入力内容をtxtファイルに書き込む時、ファイルの先頭に追加書き込みする方法を教えて下さい。
2.for文の中で同一の名前の末尾に連番を加えた変数名を作る方法を教えて下さい。$hensu1、$hensu2みたいな感じです。

1に関しては、今はtxtファイルを開くときに、
$fp = fopen($data_file, "a");
としているので、ファイルの最後に追加書き込みされてしまいます。
ファイルを開いた後に
rewind($fp);
と記述してみましたが、意味は無かったみたいです。

2に関しては、
for($i=1; !feof($fp); $i++) {//ファイル最後まで読み込む
$fline = fgets($fp);//1行読み込む
//3パターンどれか当たれ!
 $hensu.$i = explode(",",$fline);
$hensu[i] = explode(",",$fline);
$hensu[$i] = explode(",",$fline);
}
上の3パターンを試してみましたがダメでした。
すいませんが、ご教授お願いします。
0635nobodyさん2009/07/15(水) 13:36:09ID:???
>>634
1)$data_fileの中身を別ファイルなりメモリ上なりに退避させて、
 新規でform内容を書き込んでから、退避しておいたデータを追記する。

2)$hensu1 = '1だよ';
 $i = '1';
 $hensumei = "hensu".$i;
 echo $$hensumei;
06366342009/07/15(水) 14:23:24ID:???
>>635さん
ありがとうございます。
なるほど!1の考え方は思いつきませんでした。
後で試してみます。

2なんですけど、すいません、私の説明がよくなかったですね。
ご教授頂いた方法をforに組み込むと、$hensumeiの中身が「1だよ」〜「5だよ」
と増やせそうですね。
ですが今回やりたいのは、「変数名」の番号を増やしたいんです。

例えば、ループ後に記述された
echo("変数1の中身=". $hensu1 ."<br />\n");
echo("変数2の中身=". $hensu2 ."<br />\n");
echo("変数3の中身=". $hensu3 ."<br />\n");
の結果が、
変数1の中身=犬
変数2の中身=猫
変数3の中身=鳥
といった答えになるようにしたいです。

せっかくご教授頂いたのに、申し訳ありません。
でもそのやり方は、何か別の機会に使わせてもらおうと思います。
06376352009/07/15(水) 14:37:09ID:???
>>634
よく見てご覧。
$iを増やすと、$$hensumeiが「$hensu1」「$hensu2」「$hensu3」に変わっていくんだよ。
0638nobodyさん2009/07/15(水) 15:57:46ID:???
なんで3行目ダブルクオーテーション?
06396352009/07/15(水) 18:45:54ID:???
>>638
ははは・・・

最初は
$hensumei = "hensu{$i}";
って書こうとしたんだけど、混乱させると思って書き直した。
その名残だわ。

小さいことは気にしない、それ♪
06406342009/07/16(木) 19:16:32ID:???
>>635さん
出来た!出来ましたよ!
すごい!ありがとうございます!
お礼が遅くなってしまい、申し訳ありません。
分かりやすい書き方も助かりました。
正直、639の書き方でしたら、まだ理解出来てなかったかもしれません。

まぁ実際には何回か実験→失敗を繰り返してしまいましたが、
仕組みもなんとなく理解して来ました。

それにしてもPHPは楽しいですね。
手品やパズルみたい。
解き方が分かれば、なるほど〜って納得するけど、解き方を見つけるのが難しい。
先週末もそうだったんですが、今週末も家にこもりっきりになりそうです。
0641nobodyさん2009/07/16(木) 22:39:32ID:???
>>640
なあなあ君、初心者だろ?
それ、「可変変数」っていうんだけど初心者が使うもんじゃないよ。
ある程度慣れた人がちょっと技巧的に書く時に使うの。
配列使っとくのがおすすめだよ。
0642nobodyさん2009/07/17(金) 01:15:50ID:???
解決したのでもう結構です
0643nobodyさん2009/07/17(金) 01:53:47ID:???
>>642 = >>640
こういう eval 系処理は初心者に絶対覚えさせたくないよな・・・

>>641 にあるように、配列を使え。java も c++ もできない糞プログラマになるぞ。
いや、PHP 以外、と言ったほうが正しいか。
専用のロジックを使え。たいていの場合、そっちのほうが高速だ。
0644nobodyさん2009/07/17(金) 14:21:40ID:???
行く末を心配する程の有望な新人でない限り、ほっとくのが吉。
0645nobodyさん2009/07/18(土) 03:03:04ID:???
初歩的なことだと思うのですが教えて下さい
変数iに<form method="POST" action="toiawase3.php">を
代入したいのですが
<?php
$i='<form method="POST" action="toiawase3.php">';
echo $i;
?>
とやると空白しか入ってくれません
どなたか入れ方を教えて下さい
0646nobodyさん2009/07/18(土) 03:31:41ID:???
var_dump($i);
06476342009/07/18(土) 20:33:15ID:???
642は私じゃないですよ。
そんな自己中じゃないですw

あれから、635さんに教わったやり方で、変数名を連番化する事は出来たのですが、今度はその変数を表示させる部分でつまづきました。
上手く言葉で表せないので、ソース載せます。

for($i=1; !feof($fp); $i++){//$$の実験
$fline = fgets($fp);//1行読み込む
$hensumei = "hensu".$i;
$$hensumei = explode(",",$fline);
}
echo "jjの実験=". $hensu2[0] ."<br />\n";

この書き方ですと、$hensu2[0] は期待通りに表示されますが、本当は最後のechoでの$hensu「2」の部分を変数化して、例えば
$hensu.$i[0]
みたいな感じにしたかったのです。
色々試しましたが、残念ながら上手くいきませんでした。
というより、$$の仕組みがよく理解出来てないみたい…。
06486342009/07/18(土) 20:34:10ID:???
(つづき)

そこで皆さんがおっしゃっている、配列でのやり方を考えました。
そしたら、そもそもの仕様が間違っていた事に気付いてしまいました。

今回やりたいのは、テキストの上から順に1行読みとった内容を「,」で区切り、
それをその順番のまま表示させるというものですので、以下のソースで対応出来ました。
for($i=1; !feof($fp); $i++){//配列での実験
$fline = fgets($fp);
list($naka1,$naka2,$naka3) = explode(",",$fline);
echo "配列での実験 中身1=". $naka1 ."<br />\n";
echo "配列での実験 中身2=". $naka2 ."<br />\n";
echo "配列での実験 中身3=". $naka3 ."<br />\n";
}

もちろん$$を使ったやり方でも出来るのでしょうが、私にはまだ早かったみたいです。
それにしても、解決方法にも、色々なやり方があるんですね。
配列を使った方法に気付けたのも、みなさんのおかげです。
ありがとうございました!
そして今日もPHPが楽しい!
0649nobodyさん2009/07/18(土) 21:35:33ID:???
>645
ブラウザに出力した時点で、それはタグと見なされます。
0650nobodyさん2009/07/19(日) 00:18:36ID:???
while (!feof($fp)) {
  $fline = fgets($fp);
  $naka = explode(",",$fline);
  foreach ($naka as $i => $value) {
    echo "配列での実験 中身{$i}={$value}<br />\n";
  }
}
0651nobodyさん2009/07/19(日) 00:34:44ID:???
while (!feof($fp)) {
foreach (explode(",",fgets($fp)) as $i => $value) {
echo "配列での実験 中身{$i}={$value}<br />\n";
}
}
0652nobodyさん2009/07/19(日) 02:32:15ID:???
switch文で1つのcaseに2つの条件としたいのですが、うまくいきません。
$tL $init $tLvとあり、if文の場合は

if(($tL == init->a) && ($tLv == 0)) {
・・・
}

これをswitch文で表すにはどうすればいいでしょうか?

switch($tL) {
case ($init->a && $tLv == 0) :
・・・
}
}

などとしましたが、うまくいきませんでした。お願いします。
0653nobodyさん2009/07/19(日) 03:36:46ID:???
またブラウザーゲーかw

switch(true)
とすればできるけどあまりお勧めはしない
0654nobodyさん2009/07/19(日) 09:49:52ID:???
>> switch文で1つのcaseに2つの条件としたい
ここがまちがいだときづけ。
できるできないのもんだいではない。
0655nobodyさん2009/07/19(日) 10:27:29ID:???
知らんやつがPHPコード送ってきた場合、
それを安全に見るにはどうしたらいいの?

エディターで見るのは多分安全だと思う。

いきなりアパッチ起動して、ブラウザで見るのは危険?
なぜなら、ファイルを削除されたりするから。
0656nobodyさん2009/07/19(日) 10:30:20ID:???
知らんやつがPHPコード送ってくる状況がないからわからん
スパムで送ってきたの?
0657nobodyさん2009/07/19(日) 10:36:28ID:???
いや、子分。
知らんヤツという言い方は悪かった。
ようは自分以外が書いたコードを
安全に見る方法が知りたいの。
0658nobodyさん2009/07/19(日) 10:39:42ID:???
なにかあっても損害賠償請求できる範囲の人間ならいきなりブラウザで見てもいいんじゃない?
ソースが読めるならその限りではないけど
0659nobodyさん2009/07/19(日) 10:39:48ID:???
子分から恨みを買ってるかどうかぐらいエディタで見ればいいじゃない。
0660nobodyさん2009/07/19(日) 10:52:45ID:???
エディタでみてみた。
実行するといきなりmailコマンドを実行
するようなソースだった。

ここをコメントアウトしてから実行しないと
そこのメールアドレスにメール飛んじゃう><
06616352009/07/19(日) 10:55:01ID:???
>>660
子分、フルボッコだね
0662nobodyさん2009/07/19(日) 12:26:28ID:???
いままで参考書とか解説サイトとかで
コードを発見した場合、
中味を見ずにいきなり
コピペで実行してたんですが、
(なぜなら安心だから)

こんどからは、まずエディターでじっくり
ソースを眺めて、安全かどうかを確認して、
もし安全でない部分があったらコメントアウトするなり
対処して、それからブラウザで実行、ってしないと
ヤバイ、ってことに気付きました。

他人のコードをさわるってこういうことなのね。
0663nobodyさん2009/07/19(日) 12:35:07ID:???
>662
普通、そうしないか・・・?
自分で書いたコードでさえ、ブラウザで実行する前には一応目を通すのに。
0664nobodyさん2009/07/19(日) 12:49:51ID:???
PHPの勉強なのにソース読まないでまず実行して何が勉強になるんだ・・・?
0665nobodyさん2009/07/19(日) 12:57:31ID:???
PEARのエラー制御ですが、
エラーレベルを最強にしてPEARを実行すると、エラーが
たくさん出まくるので、

(1)エラーレベル0にする
(2)PEAR読み込む
(3)エラーレベル最強にする
(4)本体のコード書く

こういう順番にすればいいんじゃないか?
っておもったのですが 、これであってますか?
0666nobodyさん2009/07/19(日) 13:03:16ID:???
オレ竜は、エラー警告レベル最強にしたぐらいで出まくるのは使わないことにしてる
0667nobodyさん2009/07/19(日) 13:31:56ID:???
エラー出まくるのは開発理念がおかしいので許容できないなら使わない
0668nobodyさん2009/07/22(水) 13:08:49ID:p7cs3Pfv
受信してきた画像ファイルを保存したいのですが
バイナリに戻したデータを単純に保存すると
ヌルバイトの部分が5c80に変えられてしまいます
どうしたらうまく保存できますか?
0669nobodyさん2009/07/22(水) 22:31:57ID:???
その部分のソースかけよ
0670nobodyさん2009/07/23(木) 11:50:25ID:???
「ひとり用wiki」ってソフトがあって、
それの書き込みデーターを、
ノートンが間違ってウイルスと誤認して、
データーを全部削除してしまうという
事件が以前、ありました。

このような事故を防ぐためには、
どのような対策を取ったら
いいのでしょうか?
0671nobodyさん2009/07/23(木) 11:56:20ID:???
それほんとにワームか何か入ってたんだろ
0672nobodyさん2009/07/23(木) 12:15:51ID:???
ノートンの誤認です。
有名な事件です。
0673nobodyさん2009/07/23(木) 12:18:59ID:???
それPHP関係あんの?
0674nobodyさん2009/07/23(木) 12:19:01ID:???
スタンドアローンにしてノートン入れない方法があります
0675nobodyさん2009/07/23(木) 12:57:47ID:???
データーの保存をMySQLにしたPHPアプリの場合、という
意味です
0676nobodyさん2009/07/23(木) 13:15:49ID:???
そういう意味だったのか。
0677nobodyさん2009/07/23(木) 14:17:25ID:???
;セミコロン
を出力するのって、どうやるの?
06786772009/07/23(木) 14:19:27ID:???
わかったから
もういいです。
0679nobodyさん2009/07/23(木) 14:20:17ID:???
普通に出せないか?
0680nobodyさん2009/07/23(木) 14:23:29ID:???
php5.3ってimagejpeg使える?
0681nobodyさん2009/07/23(木) 14:51:55ID:???
print ";";
0682nobodyさん2009/07/23(木) 14:54:51ID:???
>>679
あるよ。
以上。
はい次の方。
0683nobodyさん2009/07/23(木) 16:11:36ID:WhUpMqXo
数値が120,121,122,123,124の時は120を、
数値が125,126,127,128,129の時は125を返したい
(5の倍数に切り下げる)場合は、ドウすれば良いのか?

エクセルでは=FLOOR(数値,5)とすればスグに決着が付くンだが・・・
0684nobodyさん2009/07/23(木) 16:13:21ID:???
人に物を聞く時の態度を先に学びましょう
0685nobodyさん2009/07/23(木) 16:28:28ID:???
なんか特別な関数があるかもしれんが

$n = 124;
print $n - ($n % 5);
0686nobodyさん2009/07/23(木) 16:49:36ID:WhUpMqXo
数値を5で割った余りを数値から引く、ということですね。

>なんか特別な関数があるかもしれんが

ありそうですね・・・色々探したのですが。。。
06876352009/07/23(木) 20:21:37ID:???
普通にfloor()じゃだめなのか?
06886872009/07/23(木) 20:24:42ID:???
忘れてくれ。orz
0689nobodyさん2009/07/23(木) 20:32:06ID:???
roundがあるだろうんぽ
0690nobodyさん2009/07/24(金) 00:12:39ID:???
round でできるならやってみてくれ
0691nobodyさん2009/07/24(金) 00:46:52ID:???
関数使わなくても普通に>>685でいいだろう
0692nobodyさん2009/07/24(金) 00:52:45ID:???
自演乙
0693nobodyさん2009/07/24(金) 04:39:09ID:???
わかったから
もういいです。
0694nobodyさん2009/07/24(金) 09:37:22ID:???
俺の嫁
0695nobodyさん2009/07/24(金) 10:12:22ID:???
ブサイクって
0696nobodyさん2009/07/25(土) 00:23:56ID:???
生きてる意味ないよね
0697nobodyさん2009/07/25(土) 07:56:09ID:???
でも名器
0698nobodyさん2009/07/25(土) 08:30:26ID:???
Q.あなたならどっち?

1.美人でガバガバ。
2.ブスでミミズ千匹。
0699nobodyさん2009/07/25(土) 08:40:22ID:???
1に握りこぶしでも埋めてやる。
0700nobodyさん2009/07/25(土) 09:38:35ID:???
言いたいことも言えないこんな世のなんちゃらって隆が言ってたよ
0701nobodyさん2009/07/25(土) 21:38:49ID:???
>>700
藤井?
0702nobodyさん2009/07/26(日) 11:36:31ID:???
>>700
岡村?
0703nobodyさん2009/07/26(日) 16:45:15ID:???
>>700
高島?
0704nobodyさん2009/07/26(日) 20:24:07ID:???
下のような感じで、sessionでtime()を使って経過時間を出したいんですが(分・秒などへの
変換は省略してます)、sessionではtime()は最後のスタンプしか取れない(残らない)ようで、
"time1"の情報が消えて、"time2"の方の値しかとれず、計算できません。
どうしたらいいでしょうか?

$_SESSION["time1"] = time();
$_SESSION["time2"] = time();

$keika = $_SESSION["time2"] - $_SESSION["time1"];

0705nobodyさん2009/07/26(日) 20:26:33ID:???
time1の結果が取れないってどう確認したの?
0706nobodyさん2009/07/26(日) 20:36:59ID:???
1行目と2行目の間でセッションをまたいでるなら、session_start()が抜けてるとかの初歩的なセッションの使い方ミス。
0707nobodyさん2009/07/26(日) 21:24:39ID:???
>>704
var_dumpでみました(null)。
あと、開始時刻を日時表示すると1970/01/01 09:00:00となります。

>>706
ビンゴでした。
session_start()の位置が悪かったようです。
<html>より上に移動させれば期待通り動きました。

お二方ともありがとうございました。
0708nobodyさん2009/07/26(日) 21:25:17ID:???
>>704じゃなくて>>705
0709nobodyさん2009/07/30(木) 19:12:20ID:???
<?php
$a=0;

if($a){
?>

<p>hello</p>


<?php
}

else {
?>

<p>bye</p>

<?php
}
?>

--------------------------------------
こういうコードって普通なの?
0710nobodyさん2009/07/30(木) 19:47:29ID:???
多く使われてるかどうかは知らん。
けど、PHPの使い方の一つではある。
0711nobodyさん2009/07/30(木) 20:37:46ID:???
普通はテンプレートエンジン
■ このスレッドは過去ログ倉庫に格納されています