【PHP】下らねぇ質問はここに書き込みやがれ 32
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2006/11/06(月) 22:07:16ID:???まず読め→【PHP マニュアル】http://www.php.net/manual/ja/
PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。
過去スレ、関連スレ、FAQなどは>>2-10辺り
【前スレ】
【PHP】下らねぇ質問はここに書き込みやがれ 31
http://pc8.2ch.net/test/read.cgi/php/1161733546/
◆質問する時の注意
・ 自分のIDを表示させること。(メール欄に何も記述しない)
・ サーバーのOS、WebサーバーとPHPの種類やバージョン等を明記すること。
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
◆質問後の注意
・偽者防止に必ずIDを表示させること。(メール欄に何も記述しない)
・2回目以降は最初に質問した際のレス番号を名前欄に入れること。
・解決しなくても回答をもらった場合はお礼を言うこと。
(荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)
◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
【その他諸注意】
・正規表現・PEAR・テンプレート(Smarty等)・フレームワークはそれぞれの該当スレへ
・SQLについての質問はデータベース板(PCカテゴリ)の各スレで
・速さについては自分でベンチをとってここに書け(違う環境の人も調べてくれるかも)
0402nobodyさん
2006/11/12(日) 20:19:28ID:???0403nobodyさん
2006/11/12(日) 20:36:55ID:???0404nobodyさん
2006/11/12(日) 20:38:39ID:sscQxJ2c0405nobodyさん
2006/11/12(日) 20:39:21ID:???データとロジックを一体で考えてるならintの方が効率はいいかもね。
ただ、DB自体の日付演算関数とか使えなくなるし、検索も手動で
やりづらくなったりして使い勝手は落ちるからその辺のバランスの問題。
PHPの内部でしか使うつもりのないデータなら全然困んないだろうし。
あと2038年問題があるからその何年か前にはUNIXタイム型は型のサイズ変換が
入ることが予想されるので、その際にDBのコンバートが必要になる可能性も高い。
短期間しか運用しないシステムで、データのバックアップなんかもdumpでなく
PHPなどを通すかもしくは一切バックアップしないようなやつならどうでもいいかも。
0406nobodyさん
2006/11/12(日) 20:43:19ID:???内部データは変わらん。
0407nobodyさん
2006/11/12(日) 21:20:47ID:???0408nobodyさん
2006/11/12(日) 22:12:57ID:AeUA6O/W環境はWindows XPでPHP5を使っています。
PHPのモジュールをソースからコンパイルしてインストールするということが必要
になったのですが、Windowsでどのようにソースをコンパイルして、モジュールを
インストールしたら良いのかわかりません。
よろしければ、お教えいただけないでしょうか?
0409392
2006/11/12(日) 22:37:03ID:EC0Gx1iz>>395
ありがとうございます。
自分でも少し諦めかけてますが……
>>396
本当ですか!
覚えている限りで結構ですので詳細を教えていただけないでしょうか
0410351
2006/11/12(日) 23:03:07ID:???深夜にセキュリティの質問したものですが、アドバイスいただきありがとうございます。
とりあえず現在のプログラムに追記して
if(isset($_POST["submit"])){
$name=$_POST["name"]{
$hoge=$_POST["hoge"]{
}
表示箇所は<?=$hoge?>とか (これはOKですよね)
みたいにしようと思います。まだまだセキュリティの知識が乏しいので
勉強します。皆さん、ありがとうございました。
0411351
2006/11/12(日) 23:04:53ID:???0412nobodyさん
2006/11/12(日) 23:11:11ID:???NOTICEが発生
> <?=$hoge?>
<?= htmlspecialchars( $hoge, ENT_QUOTES, 'EUC-JP' );
0413nobodyさん
2006/11/12(日) 23:12:25ID:LM10n4zrhttp://47.xmbs.jp/mackey/
0414nobodyさん
2006/11/12(日) 23:18:39ID:???412にもあるけど、入力値をそのまま出力するアプリには脆弱性がある
<>"'&は変換してから出力しないと
http://www.ipa.go.jp/security/awareness/vendor/programming/a01_02.html
0415351
2006/11/12(日) 23:39:51ID:???再度修正ありがとうございます。
手持ちのリファレンスを見ると、412さんが書いたような表示が良さそうです。
重ね重ね勉強になります。ありがとうございました。
0416nobodyさん
2006/11/13(月) 10:00:57ID:???linuxにphpをインストールする時に、コンパイル時にextensionを組み込んじゃう方法と
php.iniに設定して後から組み込む方法とあるじゃないですか
これは例えば、
前者のほうが高速に動くけど、後者の方がメモリを多く食っちゃうとかあるのでしょうか?
頻繁に使うものだけコンパイル時に組み込んで、たまにしか使わないものは後から動的?に組み込んだほうが
いいのでしょうか?それとも、ちょっとでも使うものは組み込んじゃったほうが吉?
アドバイスお願いいたします。
0417nobodyさん
2006/11/13(月) 10:20:17ID:???保存用テキストファイルでもデータベースでも保存する件数が増えると
それだけデータが莫大になってきますよね?掲示板とかWEBメールとか。
そういう場合は「○件に達したら1行目を削除」もしくは「○件に達したら別のテーブルを作成」
みたいな処理を入れて対応するのでしょうか?
それとも別の、もっと効率的な構築の仕方があるのでしょうか?
0418nobodyさん
2006/11/13(月) 11:08:46ID:fcwOcTYQ基本はそれでいいと思うよ。あとはそれの応用で過去ログ化して閲覧できるようにしたり、HTML化したりとかじゃない。
0419nobodyさん
2006/11/13(月) 14:31:16ID:???0420nobodyさん
2006/11/13(月) 14:36:17ID:???NGにしとくから。
0421nobodyさん
2006/11/13(月) 16:22:23ID:???という一般的な登録フォームで、登録完了後にブラウザの「前に戻る」で
戻ると表示がおかしくなる時がありますが、これを解消するにはどうしたら
いいのでしょうか?
0422nobodyさん
2006/11/13(月) 16:37:36ID:???0423nobodyさん
2006/11/13(月) 16:38:04ID:???一般的に起きている事ならFAQになっているはずだ。
どうおかしくなるのか不明では、解消のしようがない。
文字化けが起こるならヘッダなり何なりで漢字コードを適切に出す。
そもそも「戻る」させないようにリダイレクトする。
など。
0424nobodyさん
2006/11/13(月) 17:23:24ID:???0425nobodyさん
2006/11/13(月) 17:30:35ID:???0426nobodyさん
2006/11/13(月) 17:31:33ID:???0427nobodyさん
2006/11/13(月) 17:31:49ID:???0428nobodyさん
2006/11/13(月) 18:07:49ID:???if($_POST["mailaddress"]==""){
echo ="メールアドレスが入力されていません";
}elseif(preg_match('/^[a-zA-Z0-9_\.\-]+?@[A-Za-z0-9_\.\-]+$/',$_POST["mailaddress"])){
echo ="メールアドレスではありません";
}else{
echo "正しいメールアドレスです";
}
入力チェックは問題ないのですが、その後のメールアドレスの識別が通りません。
上記のソースのどこがおかしいかご指摘いただけないでしょうか。
0429428
2006/11/13(月) 18:09:11ID:???0434nobodyさん
2006/11/13(月) 19:29:03ID:rWUh904Q0436nobodyさん
2006/11/13(月) 20:55:36ID:???0437nobodyさん
2006/11/13(月) 21:13:03ID:???0438416
2006/11/13(月) 21:39:10ID:DOnsRJEIいろいろ自分なりに検索してみたけどなかなか見付かりません
コンパイル方法ばっかりで・・・
そういえばもう一パターンありますね。
1、頻繁に使うものだけコンパイル時に組み込んで、たまにしか使わないものは後からphp.iniで読み込む
2、ちょっとでも使うものはコンパイル時に組み込んじゃう
3、コンパイル時はなんにも組み込まないで、全部後からphp.iniで設定する。
どれがいいのでしょうか?
ご意見求む!!
0439nobodyさん
2006/11/13(月) 21:44:46ID:???Extとしてコンパイルしとけっつか頭使うのが面倒ならディストリのでいいだろ
0440nobodyさん
2006/11/13(月) 21:54:40ID:???使うのかっていう前提が謎だからだと思うよ。
Apacheの子プロセスが多くてメモリが逼迫するとか、CGIだから
起動が重要だとか・・・どういう要件にかなうようコンパイルしたいの?
0441nobodyさん
2006/11/13(月) 21:58:03ID:???スレ違いってことはない。
漠然とした一般論を求められるとみんなそこまで
正確には理解してないから回答が面倒くさくなるだけw
0442nobodyさん
2006/11/13(月) 22:12:38ID:???まあ全部削ってもRubyやPerlに比べるとバイナリでかいしメモリ喰ってて重いが
PCNTLでほとんど何もしない常駐プロセス作ったら5MBくらい消費しててワロタ
0443nobodyさん
2006/11/13(月) 22:22:58ID:???基本--disable-allでコンパイルしてアプリの用途に応じて必要なものを
extensionで追加する形をとっているらしいね
おそらく拡張によるメモリなりなんなりを節約するためだと思う
ただそんなレベルでのパフォーマンスチューニングなんて
yahoo並のコンテンツとかなら影響はあるかもしれないけど
普通のサイトで使う分には大して変わらんだろうから気にする程でもない
最初からまとめてコンパイルしてもいいし
php.iniで追加していく形でもどっちでもいいと思う
0444nobodyさん
2006/11/13(月) 22:24:52ID:DOnsRJEI>>440
>>441
レスありがとうございます。
用途は、自宅サーバーを立ち上げてapacheとphpとpostgreでサイトを作ろうと思ってます。
まだ勉強中ですが、DNSも自鯖でやろうかと思ってます。
とりあえず、マシン一台(CPU=PemD メモリ2G)で立ち上げるつもりです。
私が読んだ本は、apache関係のモジュールとmbstringはたいていコンパイル時に組み込んでいて、後は本によってそれぞれですが、
読み込んでいるのがなんなのかの説明しかなく、
後から読み込むのと、コンパイル時に組み込むのの、利点・欠点を説明しているものは皆無です。
まあ、情報が少ないので、たぶんどっちでもそんなに変わらないのかとも思いますが
ちょっと気になったもので・・・
0445nobodyさん
2006/11/13(月) 22:33:21ID:???スタティックに組み込むとメモリが無駄になることがある、が速い
ダイナミックにロードするのは遅い、がメモリ効率よし
複雑なサイトになるなら実運用で負荷をみながら試験するしかないと思う
0446nobodyさん
2006/11/13(月) 22:35:43ID:???0447nobodyさん
2006/11/13(月) 22:52:33ID:???理屈のみで言えばコンパイル時に静的に組み込む方式の方が
速度的には有利な代わりメモリを食う。
ただし無用なものまでなんでもかんでも詰め込むと、プログラムの肥大化と
使用メモリ量の増大のために起動速度が遅くなり、速度的なメリットが減る。
これはPHPに限らず様々なアプリケーションで共通の話。
ただ、PHPはApacheモジュールとして動かした場合、初期起動速度を
稼げるため、静的リンクでもあまり困らないので全部リンクした方が楽。
また、頑張って機能を外しても大して軽くならないほど元々がでかいので
実は動的リンクでのメリットはそれほどは多くない。
それでもPHPは機能が多いので全拡張を合わせるとものすごい分量に
なってしまうので、何でもかんでもくっつけてしまうのは自殺行為だと思う。
また、すでにコンパイル済みのものが用意されてる場合に
あえて再コンパイルした方がいいほど静的リンクにメリットも無い。
一般的には「インストールが楽かどうか」だけで両者を選択してる人ばかり、
というのが現実です。
両極端なことをしない限り、こだわったところでどっちも大差ない、が正直なところ。
ただしものすごく大量のPHPプロセスを起動する場合など
シビアなケースではメモリの消費がバカにならなくなったりするので、
対策を迫られる場合もあるでしょう、ってとこかと。
それはもうチューニングの話なので、現場ごとにTPOがあります。
0448nobodyさん
2006/11/13(月) 22:54:16ID:???後から動的に機能を組み込めるかどうかをiniファイルで変更出来る
RPMでバイナリ配布する時とか、共有サーバで環境を切り替える時とか
実運用に入った後でPHPをコンパイルし直したくないとか
ダイナミックリンクライブラリは一度メモリ上に読み込まれると、
同時使用するアプリがあれば同一メモリを使用する
apache自体が常駐してるし、最初のオーバヘッド程度しか差は無いんじゃないかな?
0449nobodyさん
2006/11/14(火) 06:35:28ID:???まずはチューニングとかを考えなければ困ってしまうくらいの
アクセス数を得てから悩んでも遅くないんじゃないの?
俺の予想では、キミの自宅サーバはそのままでも十分にパワーを有り余らせることになると思う。
取らぬ狸の皮算用で速度とか心配するな。
0450nobodyさん
2006/11/14(火) 09:17:09ID:???うちのセレロン2.4Gで20万PV/dayが楽勝で、能力あり余してるよ。
0452nobodyさん
2006/11/14(火) 10:18:57ID:???>サイトを作ろうと思ってます。
>立ち上げるつもりです。
>アクセスはたくさんありますけどね
これから作る予定のサイトに既にアクセスがあるとは、これいかに。
まずはID出してからモノを言えよ、似非質問者。
0455nobodyさん
2006/11/14(火) 11:57:30ID:???下らん煽りに反応するな!
おれもなー。
0456nobodyさん
2006/11/14(火) 12:05:09ID:liCu6Ubcどのようにしたら良いのか分かりません。どうかお教え願いたい
のですが。
PHPは5.05で、データベースはSQLiteを使っています。
0457nobodyさん
2006/11/14(火) 12:32:22ID:???foreach($array as $data) {
sqlite_query($conn, "insert into TABLENAME set COLNAME='$data'");
}
でいいんじゃないの?
0460456
2006/11/14(火) 13:46:39ID:liCu6Ubc配列名 $value データベース名 word テーブル名 thesaurus
で以下のようにしたのですが、レコード0のままとなってしまい
ました。間違っているのでしょうか?
$db_open=sqlite_open("word");
foreach($value as $val) {
sqlite_query($db_open, "insert into thesaurus set COLNAME='$val'");
}
sqlite_close($db_open);
0464nobodyさん
2006/11/14(火) 14:02:07ID:???つか配列をストアしたいってそういう意味であってるのか?
0465nobodyさん
2006/11/14(火) 14:06:19ID:???0466456
2006/11/14(火) 14:29:49ID:liCu6Ubcphp.ini
;extension=php_sqlite.dll しかし、;をはずすと
'C:/php/ext\php_sqlite.dll'指定されたモジュールが見つかりません と表示
されます。
php.iniでは、extension_dir = "c:/php/ext" としているのですが・・
php/ext をみると、php_sqlite.dllはありませんでした。これがないと
動きませんよね?PHP5なのにこれがないということは、インストール
のときに欠陥があったということでしょうか?
0467nobodyさん
2006/11/14(火) 14:32:39ID:???0468nobodyさん
2006/11/14(火) 14:33:12ID:???c:\windows\にphp_sqlite.dllを放り込んで再起動かな
あれ、PHP5ってデフォルトでサポートしてなかったっけ?
phpinfoで確認してみそ
0469nobodyさん
2006/11/14(火) 14:37:01ID:???システムファイル非表示じゃないだろうな
0471456
2006/11/14(火) 14:42:11ID:liCu6Ubcということですよね。
>>461
テーブルは作ってあります。
sqlite_query($db_open, "insert into thesaurus set COLNAME='$val'");
このとき、もしかして、テーブルの項目名全て指定しなきゃいけなかった
んでしょうか?
0472nobodyさん
2006/11/14(火) 14:42:25ID:???エラー抑止してたらデバッグってレベルじゃねーぞ
0473nobodyさん
2006/11/14(火) 14:44:18ID:???0474473
2006/11/14(火) 14:45:10ID:???0475nobodyさん
2006/11/14(火) 14:49:04ID:???カラムリスト+Valuesしかない
0476456
2006/11/14(火) 14:54:06ID:liCu6Ubcよいのでしょうか?
0477nobodyさん
2006/11/14(火) 14:58:21ID:???可能でしょうか?
0478nobodyさん
2006/11/14(火) 15:07:36ID:???列に追加していきたいならforeachで回しながらINSERTするだけ
行にまとめたいなら insert into table_name [(col_list, ...)] values('val', ...'); のようなSQL文字列を生成すればいい
>>477
こんなかんじで
$bar = 'myMethod';
$this->$bar();
配列なら $this->{$bar[index]}();
0480nobodyさん
2006/11/14(火) 15:27:25ID:???だからserializeだっつーの。
せっかくみんながいろいろアドバイスしてくれてるんだから、
その一つ一つについて検討したかとか実行してみたとか、
具体的な返答をしてから新たな質問をしろよボケ。
答えは既にいくつも出てんだよチンカス。
0481nobodyさん
2006/11/14(火) 15:30:14ID:???配列の内容をって言ってるからなあ。要領得ない質問だから分からんが
0483456
2006/11/14(火) 15:46:20ID:liCu6Ubc0486nobodyさん
2006/11/14(火) 22:17:10ID:CEutkM32どこかにおちてませんか?
お金払ってまでしてみたくはありません
0487nobodyさん
2006/11/14(火) 22:21:21ID:???0488nobodyさん
2006/11/14(火) 22:25:37ID:???他にも試験的にくだ質たってたけどそっちはシラネ
0489nobodyさん
2006/11/14(火) 22:29:49ID:???先日、某スレで質問したところ『ググレカス』と回答を頂きました。
初めて聞いた単語なのでググレカスのもつ動作?役割?意味?がわかりません。
ググレカスとは何ですか?
0491nobodyさん
2006/11/14(火) 23:09:07ID:???/ ,――――-ミ
/ / / \ |
| / ,(・) (・) |
(6 つ |
| ___ | / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
| /__/ / < なわけねーよ!
/| /\ \____________
0492456
2006/11/14(火) 23:12:57ID:liCu6Ubc分からないので教えてください。
foreachでループしたときの配列 $value
Array ( [0] => ツール [1] => tool [2] => tools )
Array ( [0] => ユーザー [1] => user [2] => ゆーざー )
Array ( [0] => ファイル [1] => file [2] => ふぁいる )
データベース名 word テーブル名 thesaurus
$db_open=sqlite_open("SQLiteManager/word");
foreach($value as $val) {
$encode_val = mb_convert_encoding($value,"EUC-JP","Shift_JIS");
sqlite_query($db_open, "INSERT INTO thesaurus(word,dougigo1,dougigo2,dougigo3,dougigo4,dougigo5,dougigo6)
VALUES ('$encode_val[0]','$encode_val[1]','$encode_val[2]','$encode_val[3]','$encode_val[4]',
'$encode_val[5]','$encode_val[6]')");
}
sqlite_close($db_open);
このようにしたり、他にも少々変更して試してみました。一応、レコードに書き出しては
いるようなのですが、意図したとおりではなく。。。
テーブルにword,dougigo1,dougigo2,dougigo3といったフィールドを用意し
Array ( [0] => ツール [1] => tool [2] => tools )の[0]をword,[1]をdougigo
といった具合に書き出して、他の配列でも同じように処理していきたいのです。
0493nobodyさん
2006/11/14(火) 23:22:08ID:???> $encode_val = mb_convert_encoding($value,"EUC-JP","Shift_JIS");
2行目の $value は $val のタイポ?
あとmb_conv...()は配列なんか受け付けないよ
foreach ($value as $val) {
$encode_val = array();
foreach ($val as $vah) {
$encode_val[] = mb_conv...($vah, ...
sqlite_query( ...
}
}
0495493
2006/11/14(火) 23:26:38ID:???foreach ($value as $val) {
$encode_val = array();
foreach ($val as $vah) {
$encode_val[] = mb_conv...($vah, ...
}
sqlite_query( ...
}
0496nobodyさん
2006/11/14(火) 23:34:18ID:???「役不足」という語について典型的な誤用をしてるな、お前。
知ったかぶって難しい言葉使う前に、辞書で調べるクセをつけるように。
0497456
2006/11/14(火) 23:40:48ID:liCu6Ubc$encode = mb_convert_encoding($val,"UTF-8","Shift_JIS");
でした。しかし・・やはり駄目か
あと、495の方法を試させていただきましたが、全てnullになってしまいました。
>>494
ひとつのフィールドにframeと書かれるはずが、f,r,a,m,eというように
別々のフィールドに書き出されてしまいます。
0498nobodyさん
2006/11/14(火) 23:55:16ID:???Warningが出ているはずだけど? 最初から疑問なんだけど何でエラーを無視してるの?
配列をmb_convert_encoding()に渡すことは出来ない
foreachでまわして一つずつ変換する必要がある
一文字ずつ出力されるのは $encode_val が配列ではなく文字列になってる証拠
$str = 'frame'; とある場合、$str[0] は f だし、$str[1] は r
変数の内容が期待したものかどうか、適当な位置で echo や var_dump() して
確認しながら作業しなきゃだめ
0499nobodyさん
2006/11/15(水) 00:01:43ID:???foreach ($double as $single) {
}
foreach ($double as $single) {
foreach ($single as $string) {
}
}
0500nobodyさん
2006/11/15(水) 00:02:09ID:???<form method=GET action=http://www.google.com/codesearch>
<input name=q value="">
<input type=submit value="Search Code" name=btnG>
</form>
■ このスレッドは過去ログ倉庫に格納されています