くだすれ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:dQkRWDmkApache: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でも駄目でした)
0613nobodyさん
2009/07/10(金) 02:07:39ID:???(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はプログラム選択で起動させています。
0616nobodyさん
2009/07/10(金) 02:32:26ID:???まず、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:???早速のレス有難うございます。
出来ました。<?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:???前提知識を書いてないのは確かに親切じゃないけど、
http と、http サーバーのメカニズムはWebプログラム
をするなら前提として知っておく必要があると思うぞ。
0619nobodyさん
2009/07/10(金) 02:59:36ID:???0621nobodyさん
2009/07/10(金) 03:19:19ID:???はじめてのPHPプログラミング基本編 5.3対応 (TECHNICAL MASTER)
です。
localhostに関しては、スクリーンショット図内のURL欄に小さく印刷しているだけです。
0622nobodyさん
2009/07/10(金) 03:24:53ID:???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:???Chapter07に来るまで apache が出て来ないから
そこからずーっとCLIで練習させる本なのかなと思い込んでみた。
0626nobodyさん
2009/07/10(金) 03:34:39ID:???0628nobodyさん
2009/07/10(金) 14:15:33ID:???だめだぜ。
ちゃんとした本を買わないと。
今すぐそんな本を捨てて
新しい本とマニュアルを読みなさい。
後秀和さんの本はあんまりよくないから
0630nobodyさん
2009/07/15(水) 10:16:05ID:???ついに読む本がなくなってきた。
25冊は読んだ。
0631nobodyさん
2009/07/15(水) 10:19:59ID:???0632nobodyさん
2009/07/15(水) 10:28:57ID:???はじめに出版社に話をするの?
0633nobodyさん
2009/07/15(水) 13:12:38ID:???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:???1)$data_fileの中身を別ファイルなりメモリ上なりに退避させて、
新規でform内容を書き込んでから、退避しておいたデータを追記する。
2)$hensu1 = '1だよ';
$i = '1';
$hensumei = "hensu".$i;
echo $$hensumei;
0636634
2009/07/15(水) 14:23:24ID:???ありがとうございます。
なるほど!1の考え方は思いつきませんでした。
後で試してみます。
2なんですけど、すいません、私の説明がよくなかったですね。
ご教授頂いた方法をforに組み込むと、$hensumeiの中身が「1だよ」〜「5だよ」
と増やせそうですね。
ですが今回やりたいのは、「変数名」の番号を増やしたいんです。
例えば、ループ後に記述された
echo("変数1の中身=". $hensu1 ."<br />\n");
echo("変数2の中身=". $hensu2 ."<br />\n");
echo("変数3の中身=". $hensu3 ."<br />\n");
の結果が、
変数1の中身=犬
変数2の中身=猫
変数3の中身=鳥
といった答えになるようにしたいです。
せっかくご教授頂いたのに、申し訳ありません。
でもそのやり方は、何か別の機会に使わせてもらおうと思います。
0637635
2009/07/15(水) 14:37:09ID:???よく見てご覧。
$iを増やすと、$$hensumeiが「$hensu1」「$hensu2」「$hensu3」に変わっていくんだよ。
0638nobodyさん
2009/07/15(水) 15:57:46ID:???0639635
2009/07/15(水) 18:45:54ID:???ははは・・・
最初は
$hensumei = "hensu{$i}";
って書こうとしたんだけど、混乱させると思って書き直した。
その名残だわ。
小さいことは気にしない、それ♪
0640634
2009/07/16(木) 19:16:32ID:???出来た!出来ましたよ!
すごい!ありがとうございます!
お礼が遅くなってしまい、申し訳ありません。
分かりやすい書き方も助かりました。
正直、639の書き方でしたら、まだ理解出来てなかったかもしれません。
まぁ実際には何回か実験→失敗を繰り返してしまいましたが、
仕組みもなんとなく理解して来ました。
それにしてもPHPは楽しいですね。
手品やパズルみたい。
解き方が分かれば、なるほど〜って納得するけど、解き方を見つけるのが難しい。
先週末もそうだったんですが、今週末も家にこもりっきりになりそうです。
0641nobodyさん
2009/07/16(木) 22:39:32ID:???なあなあ君、初心者だろ?
それ、「可変変数」っていうんだけど初心者が使うもんじゃないよ。
ある程度慣れた人がちょっと技巧的に書く時に使うの。
配列使っとくのがおすすめだよ。
0642nobodyさん
2009/07/17(金) 01:15:50ID:???0643nobodyさん
2009/07/17(金) 01:53:47ID:???こういう 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:???0647634
2009/07/18(土) 20:33:15ID:???そんな自己中じゃないです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]
みたいな感じにしたかったのです。
色々試しましたが、残念ながら上手くいきませんでした。
というより、$$の仕組みがよく理解出来てないみたい…。
0648634
2009/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:???ブラウザに出力した時点で、それはタグと見なされます。
0650nobodyさん
2009/07/19(日) 00:18:36ID:???$fline = fgets($fp);
$naka = explode(",",$fline);
foreach ($naka as $i => $value) {
echo "配列での実験 中身{$i}={$value}<br />\n";
}
}
0651nobodyさん
2009/07/19(日) 00:34:44ID:???foreach (explode(",",fgets($fp)) as $i => $value) {
echo "配列での実験 中身{$i}={$value}<br />\n";
}
}
0652nobodyさん
2009/07/19(日) 02:32:15ID:???$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:???switch(true)
とすればできるけどあまりお勧めはしない
0654nobodyさん
2009/07/19(日) 09:49:52ID:???ここがまちがいだときづけ。
できるできないのもんだいではない。
0655nobodyさん
2009/07/19(日) 10:27:29ID:???それを安全に見るにはどうしたらいいの?
エディターで見るのは多分安全だと思う。
いきなりアパッチ起動して、ブラウザで見るのは危険?
なぜなら、ファイルを削除されたりするから。
0656nobodyさん
2009/07/19(日) 10:30:20ID:???スパムで送ってきたの?
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コマンドを実行
するようなソースだった。
ここをコメントアウトしてから実行しないと
そこのメールアドレスにメール飛んじゃう><
0662nobodyさん
2009/07/19(日) 12:26:28ID:???コードを発見した場合、
中味を見ずにいきなり
コピペで実行してたんですが、
(なぜなら安心だから)
こんどからは、まずエディターでじっくり
ソースを眺めて、安全かどうかを確認して、
もし安全でない部分があったらコメントアウトするなり
対処して、それからブラウザで実行、ってしないと
ヤバイ、ってことに気付きました。
他人のコードをさわるってこういうことなのね。
0663nobodyさん
2009/07/19(日) 12:35:07ID:???普通、そうしないか・・・?
自分で書いたコードでさえ、ブラウザで実行する前には一応目を通すのに。
0664nobodyさん
2009/07/19(日) 12:49:51ID:???0665nobodyさん
2009/07/19(日) 12:57:31ID:???エラーレベルを最強にして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:???それの書き込みデーターを、
ノートンが間違ってウイルスと誤認して、
データーを全部削除してしまうという
事件が以前、ありました。
このような事故を防ぐためには、
どのような対策を取ったら
いいのでしょうか?
0671nobodyさん
2009/07/23(木) 11:56:20ID:???0672nobodyさん
2009/07/23(木) 12:15:51ID:???有名な事件です。
0673nobodyさん
2009/07/23(木) 12:18:59ID:???0674nobodyさん
2009/07/23(木) 12:19:01ID:???0675nobodyさん
2009/07/23(木) 12:57:47ID:???意味です
0676nobodyさん
2009/07/23(木) 13:15:49ID:???0677nobodyさん
2009/07/23(木) 14:17:25ID:???を出力するのって、どうやるの?
0678677
2009/07/23(木) 14:19:27ID:???もういいです。
0679nobodyさん
2009/07/23(木) 14:20:17ID:???0680nobodyさん
2009/07/23(木) 14:23:29ID:???0681nobodyさん
2009/07/23(木) 14:51:55ID:???0683nobodyさん
2009/07/23(木) 16:11:36ID:WhUpMqXo数値が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>なんか特別な関数があるかもしれんが
ありそうですね・・・色々探したのですが。。。
0687635
2009/07/23(木) 20:21:37ID:???0688687
2009/07/23(木) 20:24:42ID:???0689nobodyさん
2009/07/23(木) 20:32:06ID:???0690nobodyさん
2009/07/24(金) 00:12:39ID:???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:???1.美人でガバガバ。
2.ブスでミミズ千匹。
0699nobodyさん
2009/07/25(土) 08:40:22ID:???0700nobodyさん
2009/07/25(土) 09:38:35ID:???0704nobodyさん
2009/07/26(日) 20:24:07ID:???変換は省略してます)、sessionではtime()は最後のスタンプしか取れない(残らない)ようで、
"time1"の情報が消えて、"time2"の方の値しかとれず、計算できません。
どうしたらいいでしょうか?
$_SESSION["time1"] = time();
$_SESSION["time2"] = time();
$keika = $_SESSION["time2"] - $_SESSION["time1"];
0705nobodyさん
2009/07/26(日) 20:26:33ID:???0706nobodyさん
2009/07/26(日) 20:36:59ID:???0707nobodyさん
2009/07/26(日) 21:24:39ID:???var_dumpでみました(null)。
あと、開始時刻を日時表示すると1970/01/01 09:00:00となります。
>>706
ビンゴでした。
session_start()の位置が悪かったようです。
<html>より上に移動させれば期待通り動きました。
お二方ともありがとうございました。
0709nobodyさん
2009/07/30(木) 19:12:20ID:???$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:???■ このスレッドは過去ログ倉庫に格納されています