【PHP】下らねぇ質問はここに書き込みやがれpart16
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2006/02/05(日) 22:35:34ID:sf8bx52Dここなら本スレで回答のないお前の下らない質問に回答があるかも知れません。
まず読め【PHP マニュアル】
http://www.php.net/manual/ja/
本スレ【PHP】質問スレッドpart32【php】
http://pc8.2ch.net/test/read.cgi/php/1136276300/
前スレ【PHP】下らねぇ質問はここに書き込みやがれpart15
http://pc8.2ch.net/test/read.cgi/php/1137236771/
過去スレは>>2
0771nobodyさん
2006/02/21(火) 10:27:36ID:???$nameにtestが入っていて送信すると、$_SESSION['test']=$testになるようにし、
↓
$nameにtestが入っていて送信すると、$_SESSION['name']=$nameになるようにし、
0772nobodyさん
2006/02/21(火) 10:34:45ID:???>$nameにtestが入っていて送信すると、$_SESSION['test']=$testになるようにし、
>header('Location')で次のページで表示します。
現在の$_SESSION['test']=="test1";
>再び前のページに戻って今度は$nameにtest2が入っているデータを選択して
>送信します。しかし、次のページではtestしか表示されません。
現在の$_SESSION['test']=="test2";
$_SESSION['item'] .= "test1,";
$_SESSION['item'] .= "test2,";
のように買い物籠のリストを作成してみては?
そんで$_SESSION['test1']が買い物かごの内容にすればいいんじゃないかな。
0773nobodyさん
2006/02/21(火) 12:25:16ID:???両者の違いは引数を羅列して渡すか、配列にして渡すかだけですか?
例えば、
function test($var1, $var2, $var3) {
return $var1 + $var2 + $var3;
}
関数testを呼び出して引数を渡したい場合、
$result = call_user_func('test', $a, $b, $c);
と、
$result = call_user_func_array('test', array($a, $b, $c));
は等しいという認識であってますか?
0774nobodyさん
2006/02/21(火) 12:27:14ID:nnE5DkIVその時に文字列のみをハイライトしようと思い、曖昧検索のため大文字,小文字は両方ハイライトしてもらいたいため
mb_eregi_replace
でやろうとしましたが、特定の文字列では正規表現されないのでエラーになります。(当たり前ですけど)
どうすれば英数小文字,大文字でも正確にハイライトできるでしょうか??
PHP4.4.2を使用しています。
0775nobodyさん
2006/02/21(火) 12:49:03ID:???call_user_func_arrayの方は引数は必ず二つでなくてはならない。
'function name'と'parameter(mixed)'
call_user_func はいくつでも引数を指定できる。
例えば
function hoge($a, $b)と
function hogehoge($a)
を使い分けたい場合は
call_user_funcでは引数の数が合わなくなってしまいますが、
call_user_func_arrayを使えば
call_user_func_array ('hoge', array('a_var', 'b_var'));
call_user_func_array ('hogehoge, array('a_var'));
とできるので、call_user_func_arrayの方が柔軟性があると言えるでしょう。
0776nobodyさん
2006/02/21(火) 12:53:23ID:???preg_match_all使ってみては?
例文としては。
<?php
$a = "abcdefg/hijklmn/opqrstu/vwxyz";
preg_match_all ("<[^/]*>i", $a, $b);
print_r ($b);
?>
0777773
2006/02/21(火) 13:09:52ID:???丁寧にありがd
call_user_func_array()の方が見栄えが良くていいな。書き換えるか。
レスサンクス。
0778774
2006/02/21(火) 13:24:41ID:???preg_match_allは始めてみましたがいまいち使い方がよくわかりませんでした。
とりあえずquotemeta()で一時的に対処しました。
0780nobodyさん
2006/02/21(火) 15:18:51ID:???0781nobodyさん
2006/02/21(火) 15:26:29ID:???0783774
2006/02/21(火) 17:39:23ID:nnE5DkIVエラーログには
PHP Warning: mb_eregi_replace(): mbregex compile err: premature end of regular expression in...
という記録が残されているのですが、どのような文字列が投稿されてるのかも解らず困ってます。。
0785nobodyさん
2006/02/21(火) 17:48:24ID:???入力された時刻を合わせて記録しとけばエラーログと突合せもできるだろ。
0786nobodyさん
2006/02/21(火) 17:55:50ID:???0787774
2006/02/21(火) 18:01:28ID:nnE5DkIVで使用しています。php.iniは
mbstring
Multibyte Support enabled
Japanese support enabled
Simplified chinese support enabled
Traditional chinese support enabled
Korean support enabled
Russian support enabled
Multibyte (japanese) regex support enabled
mbstring extension makes use of "streamable kanji code filter and converter", which is distributed under the GNU Lesser General Public License version 2.1.
Directive Local Value Master Value
mbstring.detect_order no value no value
mbstring.encoding_translation Off Off
mbstring.func_overload 0 0
mbstring.http_input pass pass
mbstring.http_output pass pass
mbstring.internal_encoding SJIS SJIS
mbstring.language neutral neutral
mbstring.substitute_character no value no value
となっていて、imodeでも使えるようにしているのでSJISコードです。
とりあえずログ吐かせてみます。
0788774
2006/02/21(火) 18:14:39ID:nnE5DkIV"ー"
でした。
0789nobodyさん
2006/02/21(火) 18:21:15ID:???「ゼ」とかどうよ
0790774
2006/02/21(火) 18:24:02ID:nnE5DkIVおっしゃるとおりです。
0791nobodyさん
2006/02/21(火) 18:31:24ID:???0792774
2006/02/21(火) 18:42:15ID:???ただこうなるとは思わず、ちょっとやっかいです・・
0793nobodyさん
2006/02/21(火) 18:43:04ID:???> mbstring.language neutral neutral
これJapaneseに設定してみて
0794nobodyさん
2006/02/21(火) 18:49:01ID:???となりましたが、やはりエラーです。。
んー困った。。。
0795nobodyさん
2006/02/21(火) 19:02:01ID:???$result = mb_ereg_replace ($replace_str, "<Font Color=\"#FF0000\">\\0</Font>", $input, "ip");
と後ろに"p"をつけてみて。
mb_ereg_replace(x,y,z,"i");と
mb_eregi_replace(x,y,z);は同じ動作するから。
0796nobodyさん
2006/02/21(火) 19:05:29ID:???ここの情報がもしかしたら有用かもしれない。
ttp://ns1.php.gr.jp/pipermail/php-users/2002-November/011727.html
ttp://fjsk.s39.xrea.com/item_340.html
正規表現が停止する文字が入ってるからかもね。
[などは\でエスケープしてあげるといいかも。
0797774
2006/02/21(火) 19:10:25ID:???かわんないです。。
>>796
読んでみました。pもつけてるのにな。
あと、mbでやると"ゾ"を代入しても変換されないことに気づきました。
str_replaceで英大小文字も変換できるだけでいいのに・・・
0798nobodyさん
2006/02/21(火) 19:11:23ID:???このサイトのソースを見ながら、フォームからアクションで動作するプログラムを作っていたのですが
ttp://www.komonet.ne.jp/~php/program/bbs/chap1.htm
Array
(
[action] => regist
)
$_POSTではこのように返ってきているのですが、if文の後の処理がされません。
実際は、掲示板を作りたいわけでなくラジオボタンが全て選択されているときにだけ、次のページor次の処理へというようにしたいのですが。
よろしくお願いします。
ファイル名test.php
<FORM ACTION="test.php" method="POST">
・
・
・
<INPUT TYPE="SUBMIT" VALUE="書き込み/更新">
<INPUT TYPE="HIDDEN" NAME="action" VALUE="regist">
・
・
if($action == "regist"){
〜
}
0799nobodyさん
2006/02/21(火) 19:15:14ID:???スーパーグローバル変数を調べてごらん。
$action = $_POST['action'];
で$action埋めてなくちゃif文は実行できないよ。
0800nobodyさん
2006/02/21(火) 19:17:43ID:???おまえ途中の話を全然読んでないだろ…
>>794
mbstringの問題じゃなく、quotemetaがマルチバイトに非対応なせい。
mb_ereg_replace使ってマルチバイト対応のquote処理を自前でやるか
SJISやめてEUCに変換してから検索するとかしないとダメかもな。
0801nobodyさん
2006/02/21(火) 19:24:36ID:???そこのサイトのプログラムは古くて、ほとんどの場合、そのままでは動作しない。
というか$_POSTの存在まで気付いときながら何故そんな旧時代のサイトを参考にしてるんだ。
0802nobodyさん
2006/02/21(火) 19:55:48ID:???返信ありがとうございます。
そうなのですか。
アクションリスナーでnullが返ってきたらページを移動させない。
みたいなニュアンスで作れるのかなと前途記述したサイトをみてやってみたのですが。
$_POSTはすでに使用していて、別ページにとんだときにラジオボタンの状態に応じた処理をつくりました。
その前のページでのラジオボタンのチェックミスがあったときの処理についてアドバイスをください。
0805nobodyさん
2006/02/21(火) 20:13:21ID:???すいません。
ラジオボタンによる選択肢を2つ用意したとして、1つに記入ミスがあったとする。
実行ボタンを押しても次のページに飛ばず再入力を求めるようなものを作りたい。
if(入力ミスがあったら?){
}
をどのように記述すればいいかがわかりませんでした。
javaの場合だと
アクションリスナーでアクションをキャッチできるのですが。
phpの場合だとformの実行ボタンを押した、という状態をどのように感知するのかがわかりません。
調べてたら、
if(count($_POST) > 0){
でできるかもっぽいことがわかったのでためしてみます。
>>804
なるほど…
でも、勉強を含めて覚えてる最中なのでできれば妥協はしたくなかったんです。
見苦しい質問ですいません。
0806nobodyさん
2006/02/21(火) 20:24:28ID:???勉強も十分必要だが、適材適所を見極める目も養ったほうがいいよ。
コードを組めるようになったのに、汚いコーディングしかできなくなると自分で大変だから。
0808nobodyさん
2006/02/21(火) 20:38:14ID:???PHPがどこで実行されるのかつーと、鯖で動くんだなこれが。
鯖側で動くJavaのJSPやServletなんかも鯖で動くんだな。
一方、JavaScriptやAppletなんかは、ブラウザ側で動くことになる。
普通はこんな感じになるんじゃないかな。
1. JavaScriptで入力チェック、okであれば 2.へ。(JSが嫌いな人は 1.は無し。ブラウザ側)
2. PHPで入力チェック後、エラーメッセージなり既入力値なり何なりを付け足したHTMLを出力。(鯖側)
ちょいと変わり物だと、Ajaxを使うのもありかな。
0809nobodyさん
2006/02/21(火) 21:10:40ID:???mbを使わない
preg_quote
など。ただしこれを使ってもまた別な問題が発生する。
特に理由がなければEUCで書いて出力だけSJISにする方が早い。
0810nobodyさん
2006/02/21(火) 21:36:24ID:???など、というかその組み合わせだな。
>>797
1.mb_eregを使うならエスケープは自力でやる
2.quotemetaやpreg_quoteを使うならeregかpregを使ってmb_eregは使わない
mb_eregじゃなければquotemetaやpreg_quoteでSJISが相手でも正しくクオートできるが、
その代わり1文字のSJISコードなどを正常にマッチできる保障はなくなる。
ま、元々がstr_replaceを使ってたって言うんならeregi_replaceでいいんじゃないの?
0811nobodyさん
2006/02/21(火) 21:38:41ID:???> phpの場合だとformの実行ボタンを押した、という状態をどのように感知するのかがわかりません。
type=hiddenで特定のデータを埋め込んでおいてそのデータが送信されたかどうかをチェックするか、
type=submitにnameをつけてそいつの送信の有無を確認する。
0812798
2006/02/21(火) 22:02:00ID:???なるほど、ということは。
ファイル名test.php
<FORM ACTION="test.php" method="POST">
・
・
・
<INPUT TYPE="SUBMIT" VALUE="実行">
<INPUT TYPE="HIDDEN" NAME="action" VALUE="regist">
・
・
if($action == "regist"){
〜
}
というプログラムで$_POSTが
Array
(
[action] => regist
)
と返ってきていてif文内の処理がされないのは、別の部分の記述ミスということなのかな。
あと、>>805さんの2個目のやり方だと。
<INPUT TYPE="SUBMIT" VALUE="実行" NAME="id">
if($id == "実行"){〜}
という感じですかね?もう少し勉強してから出直してきます。
0813nobodyさん
2006/02/21(火) 22:05:32ID:???〜
}
0814nobodyさん
2006/02/21(火) 22:06:17ID:???ここはお前のメモ帳じゃないんだ。
ちゃんとAN HTTPDやApacheとPHPを入れて自分で実践してくれ。
0815nobodyさん
2006/02/21(火) 22:06:37ID:???そんなに $_POST['action'] や $_POST['id'] を嫌ってあげなくてもいいと思うのよ
0816nobodyさん
2006/02/21(火) 22:07:53ID:y3MPaFDb0817nobodyさん
2006/02/21(火) 22:07:59ID:???0818nobodyさん
2006/02/21(火) 22:14:50ID:???ごめん
何度か自鯖でためしてたんですが、参考にしてたサイトのやりかたが古かったようで。
いまいち使い方がわかってなかったようです。
>>813
thx
0819nobodyさん
2006/02/21(火) 22:37:20ID:???0820nobodyさん
2006/02/21(火) 22:44:30ID:???0821nobodyさん
2006/02/21(火) 23:28:23ID:???0822nobodyさん
2006/02/21(火) 23:29:02ID:???それもありますけど
$user_id = $_POST['id']
みたいなかんじで別の変数に入れてたり。
0823nobodyさん
2006/02/21(火) 23:30:08ID:???0826nobodyさん
2006/02/21(火) 23:59:45ID:???例えば、
hoge.php?_SESSION[user_pw]=hogehoge
って形で送られてきたとします。これを
extract($_GET)
しちゃうと、$_SESSION['user_pw']の値が、
"hogehoge"に変更されてしまいます。
もし事前にユーザのパスワードを、$_SESSION['user_pw']に
保持してたとしたら、勝手に書き換えられてしまうことになります。
それを避けるために
extract($_GET, EXTR_SKIP)
ってやって上書きを避けたとしても、
このままでは変数の初期化を忘れる危険性があります。
extract($_GET, EXTR_PREFIX_ALL, "get")
と、接頭辞をつけるのが一番安全な気はしますが、
それなら最初から
$hoge = $_GET['hoge'];
ってやるのと手間が変わらないと思いますし、可読性も増します。
確かにextractするのは楽だと思いますけど。
0829nobodyさん
2006/02/22(水) 03:10:45ID:???みんな分かってるくせに。
どんな時でも値チェックは基本。
時には正規表現も使う。これでいいか?
0830nobodyさん
2006/02/22(水) 06:28:29ID:???htmlspecialcharsに通すだけにしてるんですけど、
それだけじゃ足りないでしょうか?
0833nobodyさん
2006/02/22(水) 09:13:49ID:???やってて当たり前っつーか。
0834nobodyさん
2006/02/22(水) 09:40:06ID:???どういうことを入力されたらXSSやSQLインジェクションに繋がるかがわからない・・・
赤マンモス本しか読んでないから、セキュリティ関係の本も読んだほうがいいのかな。
0835nobodyさん
2006/02/22(水) 10:39:33ID:???ttp://64.233.179.104/search?q=cache:LgahQDd3smIJ:www.atmarkit.co.jp/fsecurity/rensai/webhole02/webhole01.html+sql+%E3%82%A4%E3%83%B3%E3%82%B8%E3%82%A7%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3&hl=ja&gl=jp&ct=clnk&cd=1
ググればいくらでもあるだろ
0836nobodyさん
2006/02/22(水) 10:40:13ID:OxTvy2cr0837nobodyさん
2006/02/22(水) 10:49:53ID:/RILhY7o個人的に携帯専用の求人情報サイトを作りたいと
思っていますが、
PHPの知識は皆無ですので、
システムが構築できません。
システムの参考HPはhttp://www.jwpc.jp/
です。
どなたか、安く作成してくれる方、
または安く作成してもらえるところはないでしょうか?
メールを記載しますので
onm_2006@mail.goo.ne.jp
お返事ください。
システムの機能に関しては詳しくお返事しますので
どうかよろしくお願いします。
0838nobodyさん
2006/02/22(水) 10:55:15ID:???個人的に、話の最初から「安く」と言ってくる仕事で
クライアントが期待する金額が妥当な価格であった試しがない。
話の中で優先度の高い条件のひとつに、
予算(安く)が出てくる事は当たり前だが。
0839nobodyさん
2006/02/22(水) 11:02:10ID:???SOHO系のスレッドにでもいって、
そこで頼んでみたほうがいいと思うよ。
仕事がない暇だーって言ってる人もいたし。
あとそういった用途にはちょっとPHPは不向きかもね。
0840nobodyさん
2006/02/22(水) 11:07:33ID:???システム参考とのサイトがなぁ…ネタッぽ杉
「求人情報サイト」とかいって作ったら、
いつの間にかカスタマイズされて
出会い系サイトに流用されそうなオカン
>>839
「そういった用途」って何?
0841nobodyさん
2006/02/22(水) 11:26:07ID:???PHPは処理速度が遅いから、
たくさんのリクエストを同時に抱えると極端に遅くなる可能性がある。
っていうこと。
0843nobodyさん
2006/02/22(水) 11:31:04ID:???0844nobodyさん
2006/02/22(水) 11:31:17ID:???0846nobodyさん
2006/02/22(水) 11:41:56ID:???処理速度にこだわるだけならCとかもいいんでね?
インタプリタだからPHPの処理が遅いのは仕方がない。
ってここなんのスレだっけ?
0847nobodyさん
2006/02/22(水) 11:42:28ID:???epsってただのテキストファイルじゃなかったっけ?
epsを出力するエンジンがあるのか?って質問かもしれんが…
0850nobodyさん
2006/02/22(水) 11:49:46ID:???<?for(〜){?>
<tr>
<td>〜</td>
<?for(〜){
処理a?>
<td></td>
<?}?>
</tr>
<?}?>
とか書いているのですがもっと綺麗に書く方法はありますか?
で、こういう場合上みたいにtdの頭をそろえた方がいいのか?
<td>と<?の頭をそろえた方がどちらが良いのでしょうか?
0852nobodyさん
2006/02/22(水) 11:55:37ID:???0854nobodyさん
2006/02/22(水) 12:02:42ID:???<table>
<?php
for (;;) {
echo "<tr><td>" . 〜 . "</td>";
for (;;) {
処理a
echo "<td></td>";
}
echo "</tr>";
}
?>
</table>
そもそもそこまで入れ子にしない方がいい。
だけど気になるので分かる人俺にもついでにおせーて。
0855nobodyさん
2006/02/22(水) 12:03:53ID:???中間コードコンパイル後の実行処理もJavaやPerlに比べて結構遅いよ。
1回目がめちゃ遅いんであって、2回目以降でも決して速くはない。
0856nobodyさん
2006/02/22(水) 12:09:48ID:???デザイナーと分業してるんなら、>>852 じゃ無いが、テンプレートエンジン使えば?
Flexy とかもあるぞ。
0857nobodyさん
2006/02/22(水) 12:20:58ID:???これが俺のデザインなんです。
って言ってみようぜ。
俺はお前のデザイン分からんように、お前も俺の知的フィールドは理解できんだろ。って
クビは覚悟だな。
0859850
2006/02/22(水) 12:53:19ID:???>>856 テンプレートエンジンか・・使ったことないんでちょっと調べてみます。
>>857 それじゃ進歩しないじゃんw
0860nobodyさん
2006/02/22(水) 13:10:35ID:???extractを使うと初期化しないで使っている変数がある場合や、
extract以前に処理した変数の値が任意に設定できるため、
XSSやSQLインジェクションなどわかりやすい物だけではなく、
もっとわかりにくい論理的破綻すら招く。
デバッグはしにくいし、どこでどう転んで脆弱性を生み出すか検討するのも大変になる。
ならば、extractを乱用するのは避けるべきであるってことだ。
見通しの悪いコードは書かないのは基本。
0861nobodyさん
2006/02/22(水) 13:25:58ID:???こっちが進歩するだけが世界じゃない、
向こうが進歩する事もまた世界の一つだ。
>>860
昔から気になってたんだけど、Let's PHP
あれはどうなん?
extract使ってるけど。
0864nobodyさん
2006/02/22(水) 13:55:20ID:???> >>861
> 諸悪の根元
(・ω・;)ω・;)・;) )...マヂ??
レッツPHP!を参考に、つい先日から勉強を始めたばかりなのですが・・・。
ええextractも「これが基本かっ!」てな感じで使ってました・・・。
0865nobodyさん
2006/02/22(水) 14:05:25ID:YzTdS2ndwindows server 2003でIIS6.0を使用してます。
PHP4.4.2をインストールし、nucleusでblogを作成したところ、
「エラー発生アプリケーション w3wp.exe、バージョン 6.0.3790.1830、エラー発生モジュール php4isapi.dll、バージョン 0.0.0.0、エラー発生アドレス 0x00002443」
とアプリケーションログに記録され、表示できなくなりました。
どうやら、PHP4.4.2のバクのようで、STABLE版の使用で解決するらしいのですが、STABLE版はIISで使用できるのでしょうか?
また、設定方法等、解説しているサイトをご存知でしたら、ご教授願えませんでしょうか?
よろしくお願いします。
0866nobodyさん
2006/02/22(水) 14:07:18ID:???それを利用してブラウザに情報を挿入したhtmlを表示させるにはどうすればよいのでしょうか?
今までは表示用のhtmlを、あとから情報を挿入したい部分毎に細切れにしたものを変数に入れておき、
情報を挟みつつ順番につなげてからechoで出力していたのですが、
デザイン面の変更にかなり手間がかかっていました。
そこで次に試してみたのは、
_template.htmlの情報を挿入したい部分に{$hoge}と入れておき、
$hoge = "output test";
$output = file_get_content("_template.html");
echo $output;
としてみたのですが、ブラウザにも「{$hoge}」とそのまま表示され、$hogeに格納した文字列は表示されませんでした。
たとえば$output = "テスト{$hoge}";とやると$hogeの内容が表示されます。
どうすれば_template.html中の{$hoge}のような部分に変数の内容を表示させることが出来るのでしょうか?
よろしくお願いします。
0867nobodyさん
2006/02/22(水) 14:09:36ID:???スレ違い。こっちで
http://pc8.2ch.net/test/read.cgi/php/1140027592/145
0868nobodyさん
2006/02/22(水) 14:13:45ID:???あそこは凄いね。ある意味勉強になるよ。
SQLインジェクションとかがやり放題なスクリプトとか放置されてるし
(確かここで指摘されて知ったんだが)
0869nobodyさん
2006/02/22(水) 14:16:36ID:???スレ違い。こっちで
http://pc8.2ch.net/test/read.cgi/php/1118799352/
0870nobodyさん
2006/02/22(水) 16:51:33ID:25ErppZdprint関数内の変数名の全てを htmlspecialchars($hoge) のように変更すれば良いのですが、
それだとコードが汚くなってしまうので・・・。
よろしくお願いします。
0871nobodyさん
2006/02/22(水) 16:54:39ID:???それで正常に動作しているのですが、make uninstall には対応していないようですので、
例えば新たに PHP 5.1.3 が公開された場合には、どうやってアップグレードするのがよいのでしょうか?
1. Apacheの設定ファイル httpd.conf から 「LoadModule php5_module modules/libphp5.so」 を削除
2. Apacheの再起動
3. make install 時に作成されたファイルを全部手動で削除(rm, rmdirコマンド)
4. 新しいバージョンを落としてきてコンパイル、make install
5. Apacheの再起動
といった手順で問題ないでしょうか。
■ このスレッドは過去ログ倉庫に格納されています