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

【PHP】下らねぇ質問はここに書き込みやがれ 39

レス数が950を超えています。1000を超えると書き込みができなくなります。
0001nobodyさん2007/02/12(月) 20:33:59ID:???
まず読め→【PHP マニュアル】http://www.php.net/manual/ja/
PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。
過去スレ、関連スレ、FAQなどは>>2-10辺り

◆前スレ
【PHP】下らねぇ質問はここに書き込みやがれ 38
http://pc10.2ch.net/test/read.cgi/php/1170520777/

◆質問する時の注意
・ 自分のIDを表示させること。(メール欄に何も記述しないこと。空白も入力しちゃダメ)
・ サーバーのOS(Linux、Windows他)、WebサーバーとPHPの種類やバージョン等を明記すること。
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。

◆質問後の注意
・偽者防止に必ずIDを表示させること。(メール欄に何も記述しない)
・2回目以降は最初に質問した際のレス番号を名前欄に入れること。
・解決しなくても回答をもらった場合はお礼を言うこと。
 (荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)

◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。

【その他諸注意】
・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ http://pc10.2ch.net/php/subback.html
・SQLについての質問はデータベース板(PCカテゴリ)の各スレで http://pc10.2ch.net/db/subback.html
・速さについては自分でベンチをとってここに書け(違う環境の人も調べてくれるかも)
 しかし初心者が目的も定めずに速度を気にしたところでほとんど意味は無いぞ
0866865修正2007/02/21(水) 20:15:35ID:???
echo "登録IDは".$col["id_name"]."<br />";
の箇所の$colは$rowの間違いです。。
0867nobodyさん2007/02/21(水) 20:22:45ID:tXMCaPjX
>>865
そんなに1だけを表示させたければ、カンマを捨てて正規化だけを考えよ。
そうすれば、バグの姿もはっきりとその目に映ろうぞ。
バグの姿が存分に見えたとき、又、このスレに現れよ。
08688652007/02/21(水) 20:28:58ID:???
>>867
そうなんです。カンマじゃ数字が被ってしまって、無理だと思って・・。
とはいえ、スペースを空けるのも変だし、別の文字にするのも使いにくいしで・・。
「正規化」ってなんなんでしょうか?正規表現とは違いますよね?
0869nobodyさん2007/02/21(水) 20:38:51ID:tXMCaPjX
>>868
何を言うとるんじゃ。正規化じゃ。
そんなに正規化が嫌なら、データの入れ方を工夫せい。
1,2,3→<data>1</data><data>2</data><data>3</data>
これで、<data>1</data>で検索じゃ。
0870nobodyさん2007/02/21(水) 20:42:54ID:???
>>860-862
パフォーマンス考えたら別によくあることだが。
正規化厨は大規模サイトでも
1コのテーブルに1億も10億もレコードつっこむの?
08718652007/02/21(水) 20:55:20ID:???
>>869
正規化の件、ググって調べました。言葉を知らずに使ってましたw
ただ、正規化のようにテーブルを分けるとテーブルが増えすぎてしまうので
865のように1つのフィールドで処理出来ないものかと思ってました。

データの入れ方をもう少し工夫してみます。アドバイスありがとうございました。
0872軟式PHP2007/02/21(水) 21:06:34ID:???
正規化厨は1億のレコードになる前にスケーラビリティを考えます。
0873nobodyさん2007/02/21(水) 21:14:05ID:???
>1コのテーブルに1億も10億もレコードつっこむの?

>>870が真性だということが判明いたしました。
0874nobodyさん2007/02/21(水) 21:21:52ID:???
権限を与えすぎるのを嫌うのもわかるが案件によるだろ、WEBとかでメールアカウントを
自動発行するようなもので人間が裏に張り付いてテーブル作るなんて考えられんしw。

>>864
俺は猛烈に感動した;;
0875nobodyさん2007/02/21(水) 21:28:09ID:???
セッションを分かっていないやつが多いようだが。

デフォルトであれば、セッションを作るときにサーバー側でファイルを作成する。
このセッション用のファイルを作る変わりにテーブルを作ることも不自然ではない。
テーブルも実体はファイルであることを考えれば、
ファイルを作ろうが、テーブルを作ろうが、それは朝三暮四というもの。

結局は、自分が慣れていないやり方に違和感を感じているだけに過ぎない。
0876nobodyさん2007/02/21(水) 21:31:02ID:???
\\ を \ に変えたい場合、
$var = str_replace( '\\\\', '\\', $var )
であってますでしょうか?
エスケープが重なって小さい脳みそがパンクします。
0877nobodyさん2007/02/21(水) 21:40:20ID:???
さ あ 、 も り あ が っ
                  て
                     ま
                       い
                         り
                          ま
                           し
                           た
0878nobodyさん 2007/02/21(水) 22:25:47ID:???
セッション変数についての質問です。

セッション変数のflgという変数にtrueをセットした後、
header("Location: ./hogehoge.php");
foobar(); // なんかてきとーな処理。

というコードを書いた場合、たまにですが、flgの値が""になることがあります。

どういった原因が考えられるでしょうか?
foobarではセッション変数関係はいじっていません。

p.s.
locationヘッダに書き込んだ後、foobar()を実行しても意味ないと思うので
コード自体は変更はしておいたのですが、原因が気になるので
質問させていただきました。
0879nobodyさん 2007/02/21(水) 22:27:29ID:???
>878
すいません。環境を書き忘れていました。
FreeBSD上のphp 4.4.4です。
0880nobodyさん2007/02/21(水) 22:52:52ID:???
>>875
すまんが、どこを斜め読みしたらいいのか教えてくれ。
0881nobodyさん2007/02/21(水) 22:55:18ID:???
>>871
正規化すれば確かにテーブルは増えるだろうけど、
増えすぎるって、なんか勘違いしてる可能性があるな。
もうちょっとちゃんと理解するか、
もっと具体的な例をあげるかすればいいと思う。

>>858=>>870=>>875
セッションデータ格納のためってことなら、
レコード追加するならわかるが、
テーブル追加はないない。
0882nobodyさん2007/02/21(水) 22:58:27ID:???
1つのメインテーブルに関して、3つも4つもjoinして
くっつけるのがなんか嫌


ってのは俺だけ?
0883nobodyさん2007/02/21(水) 23:00:03ID:???
おまいだけ
0884nobodyさん2007/02/21(水) 23:01:59ID:???
いやなら全部まとめて1つのテーブルで運用すればいいんじゃね
別に誰も強制せんよ
0885nobodyさん2007/02/21(水) 23:07:35ID:???
それなら議論にならないじゃないか…
0886nobodyさん2007/02/21(水) 23:10:34ID:???
もともと妄想条件の中で議論しても仕方ないべ
0887nobodyさん2007/02/21(水) 23:10:56ID:???
>>881
テーブル追加がないってことは
銀行の通帳明細だろうが電話の通話記録だろうが
全ユーザーのデータを1つのテーブルにいれるんだね。へぇ〜
0888nobodyさん2007/02/21(水) 23:15:04ID:???
そもそも下スレは議論する場なのか?
0889nobodyさん2007/02/21(水) 23:19:33ID:Sgt8YP2K
1 うし : 2 うま : 3 ぶた :4 さる
で、2,3,4を選んだとしたら フォームから送られるpostで
皆チェックボックスの値をどういう形でDBへ保存してる?
0890nobodyさん2007/02/21(水) 23:21:49ID:???
【心の】旦那には絶対言えない過去4【奥に】『カテゴリ雑談・既婚女性板』

大人気スレッド★206が大人気★
各板から2ちゃんねらが大集結して、現在炎上中

206 名前:可愛い奥様[] 投稿日:2007/02/20(火) 15:59:04 ID:bbuJrbBF0
子供2人とも旦那の子じゃない

どっちも父親は元彼
結婚後もずっと続いてて、旦那の出張中に彼と4人で家族ごっこしてた
そのうち元彼をパパと呼ばせようと思ってます
私にとってはこっちが理想の家族だし
旦那には悪いけど、もうATMとしか思えない
いっそ浮気してくれたら慰謝料たっぷりもらって離婚出来るのに
私にベッタリだから余計腹が立つ
0891nobodyさん2007/02/21(水) 23:22:48ID:???
ファイルの5行目"だけ"読むって方法ある?
あれば教えてえらいひと。
0892nobodyさん2007/02/21(水) 23:26:01ID:???
>>887
どんなDB設計を想定してんのかわからんけど、
テーブル分割はスケーラビリティの話。
スケーラビリティの話でも>>875のように
1ユーザー毎(またはセッション毎)に
テーブルを作るのはまともじゃない。
0893nobodyさん2007/02/21(水) 23:27:46ID:???
>>891
可変長の反対にして←単語が思い出せない
すきなとこにワープ
0894nobodyさん2007/02/21(水) 23:33:13ID:???
>>892
1ユーザーのデータが少ない事が前提になっているその頑固頭が理解できない。
08958912007/02/21(水) 23:42:33ID:???
>>893 わからんorz
「可変長の反対」ってな感じの関数があるの?
0896nobodyさん2007/02/21(水) 23:47:22ID:???
>>891
一行のデータ量を固定して、5行目まで計算してシーク
0897nobodyさん2007/02/21(水) 23:48:12ID:???
>>895
思い出した
ファイルの各行を固定長(同じ長さ)になるようにして、
fseekで任意の行の先頭までファイルポインタを移動して行分のバイト数だけ読む
関数はないんじゃないかなたぶん
0898nobodyさん2007/02/21(水) 23:49:12ID:???
>>894
どんなDB設計を想定してんのか理解できた。
極端に基本的なところだけでいいからDB設計勉強してね。
0899nobodyさん2007/02/21(水) 23:49:47ID:???
>>889
2,3,4っていうvarchar
0900nobodyさん2007/02/21(水) 23:52:59ID:???
>>889
俺は1、2、3、4をフィールドで作るがケースバイケースだな
0901nobodyさん2007/02/21(水) 23:56:16ID:???
 | ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄|
 |  次でボケて!!!   |
 |________|
    ∧∧ ||
    ( ゚д゚)||
    / づΦ
0902nobodyさん2007/02/21(水) 23:58:25ID:???
>>889
オレなら、1,2,3,4でそれぞれテーブルを作るな。
0903nobodyさん2007/02/21(水) 23:59:53ID:???
俺は素数しか数えない
0904nobodyさん2007/02/21(水) 23:59:58ID:???
warata
0905nobodyさん2007/02/22(木) 00:05:16ID:???
正規化にこだわりすぎるのは美しさを求める完全主義者。
俺も設計は美しいほうがメンテもしやすいし好きだが、
多少美しさを捨ててでも速度を取らないといけない場合も
実務にはあるよ。INDEXだけでは追いつかない。
09068912007/02/22(木) 00:05:42ID:???
>>896-897
長さをそろえないといけないか ..... orz
でも参考になった。ありがとう。
0907nobodyさん2007/02/22(木) 00:10:17ID:???
>>905
ナルホ。
実は4000万件を超えるLOG系のTABLEがあるんだが、
検索すると数秒かかるぅ・・・
こんな場合ってどう分けるべき?!
参照も更新もある。
時間によって
LOG_2007_01
とかで分けた方がいい?
0908nobodyさん2007/02/22(木) 00:25:24ID:???
すれち
0909nobodyさん2007/02/22(木) 00:39:23ID:???
経験者と妄想者が議論してるって感じがして気持ち悪いし、
ここはDB板じゃないんだから議論しないでくれ。
こういうソースもあるし、アホな設計してるやつはいつまででもそういう設計をして苦労してればいいじゃん。
ttp://itpro.nikkeibp.co.jp/article/NEWS/20051114/224500/
0910nobodyさん2007/02/22(木) 02:26:59ID:???
phpのプログラム検索サイトってありませんか?
0911nobodyさん2007/02/22(木) 02:29:57ID:???
おヴぇrしーならhotscriptsあたり
0912nobodyさん2007/02/22(木) 03:02:49ID:???
>>889
普通に↓でいいんじゃないか?
[id] [animal]
1 2,3,4  (もしくは、「うま,ぶた,さる」)

なぜなら、「動物」ってカテゴリで複数選択した場合なんだろ?
テーブルに分けるってのは、「動物」「スポーツ」「趣味」とか
カテゴリが別の場合何じゃないのか?
0913nobodyさん2007/02/22(木) 03:13:45ID:???
びtまsk使えば?
0914nobodyさん2007/02/22(木) 03:29:07ID:???
>>911
ありがとうございます
0915nobodyさん2007/02/22(木) 03:49:36ID:???
>>912
ENUM型とかある
まぁ俺はいつも正規化するから使ったことないけど
0916nobodyさん2007/02/22(木) 04:40:44ID:3iT4OUlD
下らない質問なので教えて下さい。
windows環境のapacheのhttpd.confでは、

LoadModule php4_module c:/php-4.4.4-Win32/sapi/php4apache2.dll

の記述を追加したのですが、
Cent-OS環境のapacheは、LoadModuleを追加しなくてもPHPが実行できてます。
何故でしょうか?
0917nobodyさん2007/02/22(木) 08:57:56ID:???
>>916
CGIで実行しているからとか
0918nobodyさん2007/02/22(木) 10:00:35ID:???
パスワードの暗号化にはどの関数を使ったらいいのでしょうか?
md5を使おうと思っているんでが何か問題ありますか?
0919nobodyさん2007/02/22(木) 10:03:12ID:???
あれは暗号化ではありません
0920nobodyさん2007/02/22(木) 10:09:14ID:???
>>919
cryptならおkですか?
0921虚弱PHP2007/02/22(木) 10:25:56ID:???
>>918
ハッシュ化ならSHA1(またはそれ以上)+Saltがいいんじゃないかな。
0922nobodyさん2007/02/22(木) 11:00:00ID:???
>>921
これのことですか?
http://blog.ohgaki.net/index.php/yohgaki/2007/01/25/sha1a_sa_a_a_ma_ya_a_a_a_a_sa_ma_fa_a_ma
これは標準で入ってる関数じゃないですよね
自作しろってことですか?
09239222007/02/22(木) 11:01:23ID:???
と思ったらわかりました。
すいませんじこかいけつしました .
0924nobodyさん2007/02/22(木) 11:02:42ID:???
パスワードに適当な文字列くっつけてmd5でいいよ
生パスを保存するやつもいるぐらいだしデータ漏洩に気をつければいいだけ
09259222007/02/22(木) 11:12:42ID:???
不安なのでやっぱりさらしに来ました。
$pwd = "zutto";
$add = "orenota-n";
$hash = hash('sha512', $pwd.$add);


0926nobodyさん2007/02/22(木) 11:28:54ID:3iT4OUlD
>>917
レスありがとうございます。
でも、CGIで実行するにしてもhttpd.confにphpの設定しなきゃいけないですよね?
ディストリの標準インストールだと、phpも実行できるように設定されちゃってる、なんてことはないですよね?
0927nobodyさん2007/02/22(木) 11:32:57ID:???
>>925
$pwdにmd5したパスワードいれて、
if ($pwd == md5($_POST['pwd']) {
  echo 'match';
}
0928nobodyさん2007/02/22(木) 11:33:00ID:3iT4OUlD
>>916です。ひょっとして、

LoadModule cgi_module modules/mod_cgi.so

これってPHPの実行も含みますか?
0929nobodyさん2007/02/22(木) 11:34:41ID:3iT4OUlD
あ!失礼しました!!!
conf.dにphp.confがありまして、下記記述を発見しました。
大変お騒がせしました。m( _ _ )m

LoadModule php4_module modules/libphp4.so
0930虚弱PHP2007/02/22(木) 11:50:56ID:???
>>925
実際のところそれで問題ないと思うけど、
$addはランダム値を使うとより良いらしい。
固定値だと同じパスワードの人が同じハッシュ値を持つから。
もちろん、ハッシュ値と一緒に保存する必要あり。

当たり前だけど、SHA512って実際表示してみると長いよなぁw
0931nobodyさん2007/02/22(木) 12:03:59ID:???
下の2つって等価ですよね? これなら正規表現使わないほうが好みだな

if ( ereg("^[0-9]{8}",$day) )
if ( is_numeric($day) && count($day)==8 )
0932nobodyさん2007/02/22(木) 12:12:16ID:???
全然等価じゃねぇし。
好み以前にちゃんとコーディングしろ。
0933nobodyさん2007/02/22(木) 12:22:19ID:???
>>931
is_numericは1.23E5とかでも真になる
ctype_digitなら一緒かな
0934nobodyさん2007/02/22(木) 12:22:31ID:???
WEB拍手(http://www.webclap.com/)をinfoseekのHPに置きたいんだけど、

・perlパスの変更
clap.cgiとkaiseki.cgiをテキストエディタで開き、1行目の
#!/usr/bin/perl
を、このcgiを設置するサーバーに合わせたパスに変更してください。

がわからない。。。どうかけばいいの?
0935nobodyさん2007/02/22(木) 12:26:58ID:???
>>934
web製作板いけ
0936nobodyさん2007/02/22(木) 12:31:11ID:???
なんでPerlのをここに書き込むんだこのボケは
0937nobodyさん2007/02/22(木) 12:34:02ID:???
>>931
等価だよ。次の宿題は?
0938nobodyさん2007/02/22(木) 12:34:12ID:???
>>931
countじゃなくてstrlenだろ
0939nobodyさん2007/02/22(木) 12:45:15ID:???
>>933
的確な回答ありがとうございます。
レッツPHPのスクリプトを見て色々と関数の勉強してたのですが
is_numericは0-9以外も通ってしまうなんて初めて知りました。
ctype_digitは実験的なモジュールとなってますが、is_intで代替できますでしょうか?
(引数には日付が入る場合)
0940nobodyさん2007/02/22(木) 12:48:10ID:???
>>939
"^[0-9]{8}$"
0941nobodyさん2007/02/22(木) 12:49:35ID:???
正規表現は不完全
is_numericもこの場合不適切
countに至っては使い方間違ってる

0点
0942nobodyさん2007/02/22(木) 12:51:37ID:???
単純に数字の部分だけとったのと比較したらいいだけだろ
0943nobodyさん2007/02/22(木) 12:55:54ID:???
>>939
http://jp.php.net/manual/ja/ref.ctype.php
0944nobodyさん2007/02/22(木) 13:07:15ID:???
>>941
"^[0-9]{8}" はレッツPHP記載のもので正規表現使わない方法に変更しようと思いました。

これならOKかな?
is_int($day) && strlen($day)==8
0945nobodyさん2007/02/22(木) 13:11:51ID:???
checkdateはしないのか?
0946nobodyさん2007/02/22(木) 13:17:44ID:???
>>945
おおおお!PHPすげー
もうちょっと調べてみます。
0947nobodyさん2007/02/22(木) 13:20:21ID:???
>>944
それくらい自分で試せばいいじゃん ってここくだ質か
0948nobodyさん2007/02/22(木) 13:26:09ID:???
>>944
フォームから受け取った文字列ならis_intだとだめ
$day += 0とかすれば整数にキャストできるが
整数だとしても負の数の場合は不都合が出る
30点
0949nobodyさん2007/02/22(木) 13:29:12ID:???
getdate(mktime(0,0,0,$m,$d,$y));
↑をすると存在しない日を指定しても自動的に日付計算してくれるみたいですね。
ということはcheckdateの処理は入れる必要ないのかな

>>948
GETクエリも文字列扱いですよね?型キャストが必要になりますか。
でも予想される値は"日付"で、負の場合はないのでもうちょい点数下さいよ
0950nobodyさん2007/02/22(木) 13:40:44ID:???
>>949
誕生日入力させて間違っていたら補正してやるのか
普通エラー出して再入力させるだろ
0951虚弱PHP2007/02/22(木) 14:01:34ID:???
>>949
入力値は何が入ってくるかわかんないから、
「○○だから××はない」って考えはしない方がいいんじゃないかな。
0952nobodyさん2007/02/22(木) 14:03:02ID:???
話の流れが読めない
0953nobodyさん2007/02/22(木) 14:04:31ID:???
日付以外の文字列が入力された場合の問題点をあげているのでしょう
少なからず日付と決まっているのなら予防線を張っとくにこした事は無いね
0954nobodyさん2007/02/22(木) 14:38:21ID:???
>>943
すいませんGoogleキャッシュを見てました。
マニュアル見る限り、これからも標準でサポートされるみたいですので以下にします。
if ( ctype_digit($_GET['day']) && strlen($_GET['day'])==8 )

>>950
今回のケースではその必要はないですが、もし誕生日など扱うことがあれば以下にします。
if (!checkdate($_POST['birth_m'], $_POST['birth_d'], $_POST['birth_y'])) { error(); }
0955nobodyさん2007/02/22(木) 15:49:05ID:1/CuYTLm
array(4) (
["aaa1"]=> array(8) { [1]=> string(1) "1" [2]=> string(1) "1" [3]=> string(1) "1" [4]=> string(1) "1" }
["aaa2"]=> array(4) { [2]=> string(1) "1" [5]=> string(1) "1" [6]=> string(1) "1" [7]=> string(1) "1" }
["bbb2"]=> array(4) { [2]=> string(1) "1" [2]=> string(1) "1" [8]=> string(1) "1" [9]=> string(1) "1" }
["bbb2"]=> array(4) { [1]=> string(1) "1" [4]=> string(1) "1" [6]=> string(1) "1" [9]=> string(1) "1" }
)
こんな感じの配列で
aaaがつくKEYの配列を取り出すのはどうすればよいでしょうか。
0956nobodyさん2007/02/22(木) 16:00:55ID:???
何も検証してないけど、こんなんどうでしょ

foreach ($array as $key => $value) {
if( strpos($key, 'aaa') ) { $array_aaa[] = $value; }
}
09579552007/02/22(木) 16:13:37ID:1/CuYTLm
if( ereg('aaa.*',$key) ) { $array_aaa[] = $value; }
これでいけました!ありがとう
0958nobodyさん2007/02/22(木) 16:22:37ID:???
>>956
strposが0を返すから( strpos($key, 'aaa') !== false )にしないと
09599582007/02/22(木) 16:23:55ID:???
いや
strpos($key, 'aaa') === 0
か
0960nobodyさん2007/02/22(木) 16:37:36ID:???
どっちでもええがな
0961軟式PHP2007/02/22(木) 16:48:51ID:???
ワロタ
0962nobodyさん2007/02/22(木) 16:56:43ID:???
タロワ
0963nobodyさん2007/02/22(木) 17:12:09ID:???
オブジェクト指向に沿って、各機能をクラス化してたんだけど、
どう考えてもデザイン(テンプレート)と分離出来ない箇所ってあるよな?

例えば、テーブルの表を書き出す時とか、項目名がそれぞれのコンテンツで違うし、
if文で入力チェックや値があるかないかを判断する場合も
やっぱりテンプレート内に入れないと行けない。

結局、こだわらなくておkってことでいいの?
0964nobodyさん2007/02/22(木) 17:26:05ID:???
お前はそこまでの人間だったってことでおk
0965虚弱PHP2007/02/22(木) 17:38:44ID:???
>>963
Smarty使ってるけど、
テンプレートファイル以外にHTML書いてないよ。
テンプレートの方にSmarty組み込み関数は沢山書いてあるけど。
レス数が950を超えています。1000を超えると書き込みができなくなります。