【PHP】下らねぇ質問はここに書き込みやがれ 53
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2007/08/25(土) 22:11:08ID:???PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。
過去スレ、関連スレ、FAQなどは>>2-10辺り
◆前スレ
【PHP】下らねぇ質問はここに書き込みやがれ 52
http://pc11.2ch.net/test/read.cgi/php/1186794483/
◆質問する時の注意
・ 自分のIDを表示させること。(メール欄に何も記述しないこと。空白も入力しちゃダメ)
・ サーバーのOS(Linux、Windows他)、WebサーバーとPHPの種類やバージョン等を明記すること。
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
◆質問後の注意
・偽者防止に必ずIDを表示させること。(メール欄に何も記述しない)
・2回目以降は最初に質問した際のレス番号を名前欄に入れること。
・解決しなくても回答をもらった場合はお礼を言うこと。
(荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)
◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
【その他諸注意】
・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
・SQLについての質問はデータベース板(PCカテゴリ)の各スレで
0512nobodyさん
2007/09/01(土) 21:00:50ID:???少なくとも俺はPHPはじめてglobal宣言はサンプル以外で書いたことはない。
全部関数に引数与えて処理してるし、スコープ考えて処理してる。
main()て書いて、いきなりスコープかましてるわけではないけど、
入力したデータはなにで、どこでしてるか
加工はどこでしているか
出力してるとこはどこか
ぐらいは簡単になるまで関数化、引数として何が必要か明確にしてるけど。
つか、そうそうソースの中のルートに書いた変数を関数内で扱う事に抵抗が無いわけ?
それじゃ簡単なものは作れても後々こまってくるとおもうんだが?
0513nobodyさん
2007/09/01(土) 21:26:07ID:???関数に引数として渡すこと=ローカル変数化、って言ってるの?
だったらこっちも同じだよ。
ってかふつーそんなの「とりあえず変数に叩き込む」って言わないだろう。
0514506,509,512
2007/09/01(土) 21:38:22ID:???ほぼオレの書いたソースはこれに近い形になってる(してる)んだが。
やっぱオレ間違ってる?なんか説明まちがった?よろしくw
<?php
//入力
$a=$_POST[〜]; //←変数に叩き込み
//処理
$b=process($a);
//出力
output($b);
function process($aa){
〜
}
function output($ab){
〜
}
?>
0515nobodyさん
2007/09/01(土) 21:42:29ID:???確かに「とりあえず”グローバル変数に”叩き込んでる」のね。
> $a=$_POST[〜]; //←変数に叩き込み
> $b=process($a);
…これって意味あるのか?($a代入)
セキュリティ以前に開発ミスを防ぐって意味でも。
セキュリティ的な意味合いでは「それが外部から来たデータであること」を
常に意識できる形になってないと極めて危険、というのが俺の経験則。
0516nobodyさん
2007/09/01(土) 21:45:27ID:???global宣言したものをグローバル変数というのではなく、
グローバルスコープの変数をグローバル変数というのだよ。
$_POSTのままの方がユーザー入力だと解りやすいと思うけどね。
0517nobodyさん
2007/09/01(土) 21:54:34ID:???もちろんprocess関数内では「グローバルとしては扱ってない」よ。
$aが外からきた変数の明示 ($a=_POST[〜];)と
加工部内でその$aが使われている証明($b=process($a);)
があるからいいんじゃね?
もしprocess内で$_POST[]がつかわれたらそれこそどこの環境の
どのデータとってきてるんだってことになるとおもうが?
どのデータを処理に使ってるか処理順序で明示してやるほうが分かりやすかろう
とおもってこうしてるわけだが。
>>516 んではサンプルのprocess内でも$_POSTで値とってきたほうが分かりやすいのか?
0518nobodyさん
2007/09/01(土) 22:00:47ID:???0519nobodyさん
2007/09/01(土) 22:03:40ID:???もし$_POSTをprocessにかける前に加工する必要性がでたら・・・・
おまえらソース書き換え大変だろwwwww
0520nobodyさん
2007/09/01(土) 22:10:14ID:???なんで関数内からグローバル変数を参照することを前提に書いているのか謎だが、
>>501が質問したのは$a=$_POST[〜];が必要かどうかってことでしょ。
>>502の直接参照出来るってのは利点として挙げただけでそうしろってことではないでしょ。
それに関数内からグローバル変数を参照することはほとんどないといってもケースバイケースだし。
0521nobodyさん
2007/09/01(土) 22:14:31ID:qAbTQU9wこのレスに来て、俺にも間違えが生じることがあることに気付かせてくれた。
悔しいけど、ありがとう。
0522グローバルは馬鹿っていってごめんなさい。とはいうものの
2007/09/01(土) 22:28:54ID:???> なんで関数内からグローバル変数を参照することを前提に書いているのか謎だが、
ああ、これはオレのグローバル変数の取り違え。正直すまんかった。
わざわざスーパーグローバルと同じ動きさせるために global $a; $a=$_POST[]なんてやんのか?
とかおもったんでアホか!っておもって書いた^^;
> >>501が質問したのは$a=$_POST[〜];が必要かどうかってことでしょ。
>>519で論破でいいか?
> >>502の直接参照出来るってのは利点として挙げただけでそうしろってことではないでしょ。
べつにおれもそうしろとはいってないよ。アホだとはいってしまったけど。^^;
プログラムはうごきゃいいんだよ。保守性なんて保守する必要なければ必要ないしね。
でも分かりやすく、ミスなく、とかおもったら俺の経験則でこうなったが。
> それに関数内からグローバル変数を参照することはほとんどないといってもケースバイケースだし。
ケースがないわけないじゃない。globalが用意されてんだから。
でも明示してないものを関数内で入力として使う危険性のほうがおれは経験則で怖いんで俺は明示するよ?
というかんじかな。
>>521 >>519で論破でOK?
0523nobodyさん
2007/09/01(土) 22:33:07ID:???0524nobodyさん
2007/09/01(土) 22:44:58ID:VWNhFO8zソースを見て勉強したいと思っています。
0526nobodyさん
2007/09/02(日) 00:23:30ID:???global宣言した変数ってコード追ってるときに判別しづらくて
バグの元にならない?
0527グローバルは馬鹿っていってごめんなさい。とはいうものの
2007/09/02(日) 01:20:55ID:???変数名$gblABCとかって接頭文字くっつける
かもしれない。
0528nobodyさん
2007/09/02(日) 01:44:25ID:???変数名にプリフィックス付けるなんて、VBじゃないんだから止めろよバカ
お前の頭は、10年前から進歩ないのかよ
0529nobodyさん
2007/09/02(日) 02:02:17ID:???お前、まさかハンガリアン記法とプリフィックスを
ごっちゃにしてないよな?
型を示すプリフィックスのハンガリアン記法は否定されているが、
スコープを示すプリフィックスは否定されてねーよ。
Javaだってメンバ変数の前かあとに _ をつけたりしてるだろ。
0530nobodyさん
2007/09/02(日) 02:14:22ID:QvprOJVvアクセス解析をつくっているのですが、ユニークをどうやって取得・カウントすればいいか検討もつきません
つまらない素人質問で恐縮ですが、ご教示願います
0531nobodyさん
2007/09/02(日) 02:26:42ID:???0532nobodyさん
2007/09/02(日) 02:32:34ID:QvprOJVvそこまでは自力でわかりましたが、具体的にどのようにすれば良いのでしょうか?
0533nobodyさん
2007/09/02(日) 02:36:52ID:???そこまでわかってんなら書け
0534nobodyさん
2007/09/02(日) 03:05:17ID:t27ykBXAシステムユーザを作らないとユーザが作成できません。
rootユーザでapacheを動かせば作れるんですが。。。。。
一時的にrootで動かすにはやっぱりsudoを使わなければならないでしょうか?
宜しくお願いします。
0536nobodyさん
2007/09/02(日) 03:26:09ID:???0537534
2007/09/02(日) 03:27:06ID:t27ykBXA( ゚д゚)ダレニモメールシテナイヨ
0538nobodyさん
2007/09/02(日) 03:40:21ID:QvprOJVvありがとうございました
0539nobodyさん
2007/09/02(日) 03:45:09ID:???webmail とシステムユーザの作成に何の関係が?
たぶんシステムのユーザのメールボックスを使いたいのだろうが、
エイリアスで不足な理由は?
やっぱり使わなきゃダメかなぁみたいなノリでroot権限を使わない方がいいよ。
0540534
2007/09/02(日) 03:49:52ID:t27ykBXAWeb上でユーザの作成、削除をしたいんです。
formにて必要な情報を管理メールアドレスへ送ればいいのでしょうけど、
リアルタイムで作成したいと思っています。(yahooやgmailのような仕組み)
なのでやっぱりsudoとshellscript又はsystem()関数を使わなければいけないかなと思ったんですが。。。
0541nobodyさん
2007/09/02(日) 03:54:37ID:???いやいや、だからメールボックスだけが必要なら、
システムのユーザを作る必要はどこにもないんだよ?
エイリアスで十分でしょ。
postfixなどには、エイリアスをデータベースに格納する設定があるから、
まずはそいつを調べるんだ。
0542nobodyさん
2007/09/02(日) 04:06:36ID:???連番の配列を作るにはどうしたらいいですか?
0547nobodyさん
2007/09/02(日) 04:55:15ID:???0548nobodyさん
2007/09/02(日) 11:59:26ID:IAvjtU3B・HTMLのフォームに初期値を表示したい。
・初期値は別のテキストファイルからphpで呼び出したい。
・下記のソースではフォームに「$file_data[0]」,「$file_data[0]」と表示されてしまいます。
・本当に表示させたいメッセージは「名前を入力してください」,「問い合わせ内容を入力してください」です。
【data2.txtの中身】
名前を入力してください
問い合わせ内容を入力してください
【環境】
サーバーのOS:CentOS 4.5
Webサーバー:Apache 2.0.52
PHP:5.1.6
0549nobodyさん
2007/09/02(日) 12:00:44ID:IAvjtU3B【index.htmlの中身】
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>フォームに初期値を表示する</title>
</head>
<body>
<?php
$file_data = file("data2.txt");
?>
<form method="post" action="form.php">
お名前:<input type="text" name="name" value="$file_data[0]">
<br>
問合せ:<input type="text" name="contact" value="$file_data[1]">
<br>
<input type="submit" value="送信">
</form>
</body>
</html>
0550nobodyさん
2007/09/02(日) 12:09:48ID:???お名前:<input type="text" name="name" value="<?php echo $file_data[0] ?>">
問い合わせも同様
0551nobodyさん
2007/09/02(日) 12:22:39ID:IAvjtU3Bありがとうございます。
正常に動作する事を確認しました。
※補足
>>550さんの記述+index.htmlをindex.phpにする事で動作しました。
何となく過去の経験上、phpは拡張子がhtmlでも動作した気がしたのですが、htmlのままでは動きませんでした。
0553nobodyさん
2007/09/02(日) 12:44:03ID:3ZNK8eVt$file = fopen("xxx.txt","r");
while (!feof($file)) {
$line = fgets($file,1024);
if ($line == 5){
fseek($file, $get);
$line = fgets($file,1024);
echo ("$line<br>");
}
$get = ftell($file);
}
fclose( $file );
これじゃできないんです。どうすればいいでしょうか
0554nobodyさん
2007/09/02(日) 13:33:02ID:???0555nobodyさん
2007/09/02(日) 13:37:02ID:IAvjtU3Bありがとうございます。
ググッて意味が理解でき、htmlでも動作するようになりました。
0556nobodyさん
2007/09/02(日) 15:36:12ID:bbqIMTHDhttp://allabout.co.jp/internet/database/closeup/CU20050321A/index5.htm
まあ読み込むたびに手動でエンコード変えればちゃんと見れるのだが・・・
どうすりゃデフォルトでShift-JISやEUC-JPで読み込んでくれるのよ?
0557nobodyさん
2007/09/02(日) 15:50:42ID:???0559nobodyさん
2007/09/02(日) 16:06:39ID:bbqIMTHDFFxだとうまく表示されるんだがIEだとなぜか西ヨーロッパ言語(ISO)になっちまうんだよ
ちなみにFFxだとエンコードはうまくいってるのにPHP5がちゃんと動作しない
どうすりゃいいのさ
0560nobodyさん
2007/09/02(日) 16:10:25ID:???0561nobodyさん
2007/09/02(日) 16:11:35ID:???>ちなみにFFxだとエンコードはうまくいってるのにPHP5がちゃんと動作しない
なんでPHPがブラウザに依存するんだよ
0562nobodyさん
2007/09/02(日) 16:15:54ID:???どこかに落ちてませんか?
0563nobodyさん
2007/09/02(日) 16:16:38ID:???0564nobodyさん
2007/09/02(日) 16:25:36ID:cq55lstZ$jikan = time();
$_SESSION['jikan'] = $jikan;
}
jikan();
echo $_SESSION['jikan']
jikan関数を定義して、$jikanに現在の時間を入れて、$getに$jikanを代入したのですが、
ブラウザを更新するたびに$getの値が変わってしまいます。
$getにはtime()って関数がそのまま代入されてるからでしょうか?
$getにはじめに取得した時間のまま値を変えずにするにはどうしたらいいのでしょうか?
0566nobodyさん
2007/09/02(日) 16:34:15ID:cq55lstZなんども定義関数を呼び出してました。
ありがとうございました。
0567nobodyさん
2007/09/02(日) 16:37:14ID:???高速化できますか?
0568nobodyさん
2007/09/02(日) 17:06:14ID:???0569nobodyさん
2007/09/02(日) 17:08:25ID:???1GhzのCPUは一秒間に1000000000の命令を実行できるから
改行一つ当たり0.00000001秒ぐらい。
0573nobodyさん
2007/09/02(日) 17:22:33ID:???ネットで調べろとは、また無茶なことを言うな。
ほれみろ、反論できやしない。
0575nobodyさん
2007/09/02(日) 17:25:48ID:???たかが改行を一つ飛ばすぐらい。
機械語でも、比較命令・アドレス加算、ジャンプの
数命令程度ですむわけだが?
0576nobodyさん
2007/09/02(日) 17:26:27ID:???0578nobodyさん
2007/09/02(日) 17:28:14ID:???もっとかかると言いたかったのだろうが、
改行を飛ばすコードなんて機械語でもほんの数命令でしか
ないことに気づかなかった馬鹿ということでFA?
それ以外に何を言いたいのかわからない。
0579nobodyさん
2007/09/02(日) 17:29:36ID:???0580nobodyさん
2007/09/02(日) 17:29:40ID:???お前さ、自分で反論していて、
その反論の理由をいえないなんて恥ずかしくないの?
私はあなたの意見の反論する。
その理由はお前がググレ。
これを議論の場で言ったら恥をかくだけだと思うよ。
0582nobodyさん
2007/09/02(日) 17:33:18ID:???スクリプトの解析処理がどういう仕組みになってるかによって
改行コードの有無による処理コストは変わってくるし、
そこを調べずに論議してもまるで無意味。
でも多分、改行コードは単独で判定されてるわけじゃなく、
正規表現での構文解析で他の記号とまとめて処理されてると思うので、
構文解析としては改行があっても無くても速度はまるで変わらず、
差が出るのはディスクから読み込むときにバッファが小さくて済み、
サイズが数十〜数100バイト小さい分だけディスクI/Oが早く完了する、
という点に尽きると思う。
この速度差はCPUのクロックだけじゃなく、ディスクのI/O速度にも依存する。
0583nobodyさん
2007/09/02(日) 17:36:40ID:7yTluSfaできればデファクトスタンダードになりそうなので
0585nobodyさん
2007/09/02(日) 17:37:49ID:???正規表現といっても、結局は最終的には
単純な機械語による比較とループとして実行されるわけで、
結局改行一つで増加するコードは10命令文にもならないだろうな。
0.00000001秒は妥当なんじゃね?むしろそれ以下。
0586nobodyさん
2007/09/02(日) 17:40:01ID:cq55lstZ$arrayに格納された値に含まれる1を削除したいのですが、
以下のコードよりももっと良い書き方ありませんでしょうか?
foreach($array as $k => $v) {
$hairetu[] = str_replace("1", "", $v);
}
0587nobodyさん
2007/09/02(日) 17:41:55ID:???> 今更PHP4がデファクトスタンダードになるわけないじゃん。
デファクトスタンダードになりそうな
フレームワークを聞いてるんだろ。
お前は日本語もわからんのかw
0589583
2007/09/02(日) 17:47:43ID:7yTluSfaZend FrameworkのようにPHP5のみじゃなくて
現状でPHP4が使えて今後デファクトスタンダードになりそうなフレームワークということです。
0590nobodyさん
2007/09/02(日) 17:49:19ID:???1割くらいは高速化するだろう
0591nobodyさん
2007/09/02(日) 17:50:01ID:???0592nobodyさん
2007/09/02(日) 17:50:17ID:7yTluSfaありがとうございます
試してみます
0597nobodyさん
2007/09/02(日) 18:37:55ID:SjqAaNKw初心者です 参考書を片手に勉強中なんですが
PHP mysqlでチェックボックスを使い フォームでチェックされた名前のも
のだけを取り出したいのですが 上手くいきません
チェックボックス側
<form method="GET" action="./hoge.html" >
<table width="778" border="0" cellpadding="0" cellspacing="1" bgcolor="#999999">
<tr> <td width="70" height="32" valign="top" bgcolor="#FFFFFF" class="unnamed2"><b>名前</b></td>
<td valign="top" width="229" bgcolor="#FFFFFF" class="unnamed2">
<?php
for ($si = 1; $i <=10; $i++) {
echo <input type=\"checkbox\" name=\"c1[]\" value=\"{$row['id']}\">{$row['id']};
}
?>
表示側
//データーを受け取る
$c1 = @$_POST["c1"];
$sql = "SELECT * FROM hoge";
//データーが選択されているときはWHERE以下を組み立てる
if (count($c1) > 0) {
//分割されたここのキーワードをSQLに反映
$where = "WHERE (id IN (";
for ($i = 0; $i < count($c1); $i++) {
$where .= $c1[$i];
if ($i < count($c1) - 1) {
$where .=","; }
else {
$where .= "))"; } } }
for ($i = 0; $i < count($c1); $i++) {
echo "$c1[$i]"; }
echo "<p>e".$sql.@$where;
0598nobodyさん
2007/09/02(日) 18:38:39ID:SjqAaNKw0599nobodyさん
2007/09/02(日) 18:44:42ID:???何を教えてほしいんだよ
ひどい質問だ
0600nobodyさん
2007/09/02(日) 18:46:15ID:???" 1 )); delete * from hoge; --"
とか送ってこられたら楽しいことになるぜ。へっへっへと
関係ないことを指摘しておく。
0601nobodyさん
2007/09/02(日) 18:47:16ID:???.@$where;
何言語?
0603602
2007/09/02(日) 18:50:51ID:???0605nobodyさん
2007/09/02(日) 20:57:00ID:lMwXxY/uあと、PHPでのファイル・クラスのネーミングルールとか。
0606nobodyさん
2007/09/02(日) 22:08:55ID:???として、
echo "$a ちんちん";
と
echo $a." ちんちん";
のどっちが速いっすかね?
0608nobodyさん
2007/09/02(日) 22:37:36ID:O0vZytK1http://pc11.2ch.net/test/read.cgi/php/1188731930/
これわかる人いませんか?
ぜんぜん表記されないのですが、かいてもよまれないと
言われたんですが、なんとかしたいんです。
0610nobodyさん
2007/09/02(日) 23:00:17ID:???検索するとたくさんヒットしたので試してみたけど上手くいかず
誰かセットアップ方法の解説願います
0611nobodyさん
2007/09/02(日) 23:18:10ID:pKjcWHTrなんでろだにあげなかったの?バカなの?
■ このスレッドは過去ログ倉庫に格納されています