【PHP】下らねぇ質問はここに書き込みやがれ 51
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2007/07/27(金) 16:32:46ID:???PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。
過去スレ、関連スレ、FAQなどは>>2-10辺り
◆前スレ
【PHP】下らねぇ質問はここに書き込みやがれ 50
http://pc11.2ch.net/test/read.cgi/php/1184143801/
◆質問する時の注意
・ 自分のIDを表示させること。(メール欄に何も記述しないこと。空白も入力しちゃダメ)
・ サーバーのOS(Linux、Windows他)、WebサーバーとPHPの種類やバージョン等を明記すること。
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
◆質問後の注意
・偽者防止に必ずIDを表示させること。(メール欄に何も記述しない)
・2回目以降は最初に質問した際のレス番号を名前欄に入れること。
・解決しなくても回答をもらった場合はお礼を言うこと。
(荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)
◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
【その他諸注意】
・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
・SQLについての質問はデータベース板(PCカテゴリ)の各スレで
0153nobodyさん
2007/07/30(月) 18:45:30ID:???dateにどれくらいの負荷がかかるのかということと
仮にそれを保持しようとした場合に考えられる方法(file書き出し、DB登録)
どちらがより効率的かというと明らかに前者。
0155nobodyさん
2007/07/30(月) 19:07:10ID:???//
function KanjiCheck( $AttriName ) {
// チェック対象の属性が未指定の場合は終了する
if( $AttriName == "" ) return True;
// 属性データが配列の場合は終了する
if( is_array( $this->Form[$AttriName] ) ) return True;
// 未入力である場合は処理しない
if( $this->Form[$AttriName] == "" ) return True;
if( ereg( "^([\xB0-\xFE][\xA1-\xFE]|\xA1\xBC|\xA1\xA6|\xA1\xA1|\x20)+$",
$this->Form[$AttriName] ) == False ) {
return False;
}
return True;
}
0156nobodyさん
2007/07/30(月) 19:24:52ID:???0158nobodyさん
2007/07/30(月) 20:05:09ID:???きちんとやれば特に問題ないんじゃない、多少直で置くよりスキルが必要かもしれないけど大したレベルじゃない。
よく分からないならpublic_html内に置いたほうが分かりやすいかもしれないが。
0159103
2007/07/30(月) 20:06:11ID:???返事&お礼がおそくなり申し訳ありません。
わかりにくい日本語で失礼をおかけしました。
動的というか、リクエストからかえってきたデータをもとに
<option value="$val">$name</option>
・
・
・
として、今度はその中からまた一つ選んで、そのvalueの値をもとにリクエストして
<option value="$val">$name</option>
・
・
・
という感じにしたいのです。
1回目は$valの初期値でリクエストします。
色んな行にecho文をかいてみましたが、何も入っていませんでした。
ちょっとまた手が離せないので取り合えずご報告致します。
0162nobodyさん
2007/07/30(月) 21:00:30ID:s/YUXnbP1行の文字数制限をキッチリやってくれるものはないでしょうか。
PEAR::MAIL_mimeが出来そうだったんですが、
asciiコードだけのヘッダ行は1000文字以上でも折り返してもらえませんでした。
0163nobodyさん
2007/07/30(月) 22:17:53ID:???分かりやすい定数のリストに直す方法を教えて下さい
0167nobodyさん
2007/07/31(火) 02:01:23ID:???DBにインデックスしたら、今まで3時間掛かっていたのが、35秒で出来た。
処理件数が数百万件のDBだったため、検索に時間が掛かると思っていたが、
これほどインデックスが効果を発揮するとは。。
お前らも自分の心にインデックスを作れって頑張れよ。
0168nobodyさん
2007/07/31(火) 02:14:28ID:???0169nobodyさん
2007/07/31(火) 02:15:20ID:???あとから参照する事が多いなら適切なインデックスは当然でしょ。
0170nobodyさん
2007/07/31(火) 02:16:22ID:???0171nobodyさん
2007/07/31(火) 02:35:34ID:???プロは、トランザクション単位でindexをcreateしたりdropしたりする。
検索系で処理で時間が掛かる場合は、始めにindexをつけて処理が終了したらdropする。
そうすることで、参照系も更新系も最速で処理が可能になる。
最近は、そこまで気を利かせて設計できる奴も少なくなったけど、
まぁ、趣味でやるならそれもいいけど。
0172nobodyさん
2007/07/31(火) 02:51:25ID:???ん???よく分からないんだが、インデックス付けっ放しでよくね?
何でいちいち削除したりすんの?
インデックスするのだって、時間かかるっしょ?
0173nobodyさん
2007/07/31(火) 02:58:40ID:S7XQhQpV初級者から中級者に適したおすすめのフリーソフトやスクリプトを教えてください。
0174171
2007/07/31(火) 03:10:48ID:???素人前回乙
インデックスの仕組みがよく分かっていないようだけど。
インデックスは、キーとなるカラムを決まった順番に並べておいて、
二分検索することで目的の行へすばやく移動できるの仕組み。
じゃあ、insert処理したらどうなるかと言えば、再び順番に並び替えるために、
インデックスを張りなおす必要がある。
例えば、データが100万件あって2番目にinsertしたら、
後の(100万-1)件のインデックスは再度インデックスの張りなおし。
つまり、insertするたびに、indexを作ることになるわけで、
検索0.01秒で出来ても挿入に100秒掛かることになりかねない。
ここまで説明したら、分かるよな。まぁ、お前はDBの基礎からやり直せ。
0175nobodyさん
2007/07/31(火) 03:14:06ID:???そんなの誰も聞いてないのに言いたがる
0176nobodyさん
2007/07/31(火) 03:15:34ID:???おれがはじめてつくったスクリプトはメールフォームだったな。
その次に掲示板くんだ。
フリーソフトはPHPエディタでいいんでない?おれは使ったことないけど
0177nobodyさん
2007/07/31(火) 03:20:39ID:???検索する時に
create index
select
drop index
って毎回やるって事?
0178171
2007/07/31(火) 03:32:31ID:???お前は馬鹿すぎwww
indexに掛かる時間が10秒
indexしたtableに検索するのに掛かる時間0.1秒
tableにinsertする時間0.1秒
select 3回
insert 3回
◎ ちょっと考えれば分かる設計
create index 10秒
select 0.1秒
select 0.1秒
select 0.1秒
drop index 0.1秒
insert 0.1秒
insert 0.1秒
insert 0.1秒
× 手に負えないお馬鹿な設計
create index 10秒
select 0.1秒
select 0.1秒
select 0.1秒
insert 10秒
insert 10秒
insert 10秒
あとは、自分でよく考えろ。よ〜く考えてからレスしろよな。
0179nobodyさん
2007/07/31(火) 03:35:49ID:???得意になってる奴の方がガキくさい
0181nobodyさん
2007/07/31(火) 03:46:43ID:???リクエストされるたびに、インデックス付けたり外したりするの面倒だなぁ・・・
0182177
2007/07/31(火) 03:51:58ID:???スマンな。
>検索系で処理で時間が掛かる場合は、始めにindexをつけて処理が終了したらdropする。
お前のつたない日本語を直訳したら>>177になった。
更新時にindex外す事を言いたかっただけなのか?
あんなに長々と文字を費やして・・・。
0184nobodyさん
2007/07/31(火) 04:15:32ID:Wq5Bzhqymysql_real_escape_stringを使えと
マニュアルに書いていますが、
mysql_real_escape_stringはDBに接続してから使わなければいけないようです
これっていちいちエスケープする時に
サーバからエンコードを取得してるんですか?
だいたい技術者にしてみればDBのエンコードを分かって作っていることが
ほとんどなので、いちいちエンコードを取得するより
エンコードを指定してエスケープすればいいと思うのですが。
なんでこんなやり方してるんですか?
そもそもmysql_real_escape_stringって本当に使わないといけないもの
なんですか?
0185nobodyさん
2007/07/31(火) 04:49:26ID:???0186nobodyさん
2007/07/31(火) 05:28:34ID:???mysqlのエスケープにaddslashes使うなんてありえないって書いてたよ。
addslashes
mysql_escape_string
mysql_real_escape_string
違いよくわからんな
違いの分かる男解説頼む
0187nobodyさん
2007/07/31(火) 05:43:39ID:???0188nobodyさん
2007/07/31(火) 06:39:25ID:???このへん見ると、real_escapeはSJISのためにあるようだが
http://d.hatena.ne.jp/hoshikuzu/20060211#P20060211PHPSQLINJECTION
ここを見ると、SJIS使ってる限り、real_escapeもプレースホルダも駄目らしい
ガチで安全な最終回答って何なの?
0189nobodyさん
2007/07/31(火) 09:31:10ID:???0190nobodyさん
2007/07/31(火) 09:32:08ID:???0191nobodyさん
2007/07/31(火) 09:34:16ID:???0192nobodyさん
2007/07/31(火) 09:41:32ID:???ttp://jp.php.net/manual/ja/function.PDOStatement-execute.php
$calories = 150;
$colour = 'red';
$sth = $dbh->prepare('SELECT name, colour, calories
FROM fruit
WHERE calories < ? AND colour = ?');
$sth->execute(array($calories, $colour));
0193nobodyさん
2007/07/31(火) 09:42:55ID:???一般的なデータベースが対象で、MySQLのための関数ではないし、すべてエスケープされない
mysql_escape_string
文字コードを考慮しない
0194nobodyさん
2007/07/31(火) 09:51:36ID:???エスケープ処理はMySQL側がやるわけだから。
そもそも記事にPHPのバージョンも、MySQLのバージョンもないから、何ともいえない。
>>190
する
0195nobodyさん
2007/07/31(火) 11:34:05ID:???まともなDB抽象化ライブラリを正しく使ってりゃいいだけの話と思うんだがな
0196nobodyさん
2007/07/31(火) 12:07:08ID:7/aws5UYCentOS 4.5
Linux kernel 2.6.9
PHP 4.3.9
PHP にアプリケーション変数はありますか?
Java Servlet における application.setAttribute("foo", bar); がやりたいです。
やりたいことは、簡単なダウンロードページです。
1.ユーザ登録ページを作り、メアドを入力してもらったら、メアドにダウンロードページのURLを送る。
URLにはランダムキー文字列を含める。
2.ユーザがメールを読んで、URLをクリックしたら、ファイルを落とせるようにする。
1.で、サーバサイドで生成したランダムキーをアプリケーション変数に保存しておき、
2.の php がアクセスされたときに、URLパラメータからランダムキーを取得し、
それがアプリケーション変数に存在していれば処理を続行、なければエラーとする。
サーバにpostgres や MySQL がインストールされていないので、アプリケーション変数でやろうと
思いついたのですが、ちょっとググって見たらなさそうなので、
sqlite3 でやるしかないかなぁ・・・
0197nobodyさん
2007/07/31(火) 12:11:38ID:???0199nobodyさん
2007/07/31(火) 12:17:06ID:???0200nobodyさん
2007/07/31(火) 12:22:35ID:???0202196
2007/07/31(火) 12:32:40ID:7/aws5UYこのサーバは自分がroot権限を持っているサーバです。
sqliteでやろうと思いましたが、今後の CRM でやりたいことが増えていくことを考えると、
いまから DB インストールしておいたほうがいいか・・・
DB を入れる方向で進めてみます。
0203nobodyさん
2007/07/31(火) 12:38:08ID:V0A2Aw5YWeb : Apache 2.0.59
PHP : 4.4.7
質問があります。。。
MTで出力したUTF-8のPHPファイルが全体的に文字化けしてしまいます。
必ず文字化けするのではなく、4回に1回くらいの間隔です。
また、Apache起動直後は文字化けせずに起動後1〜数時間ほどすると文字化けするようになってしまいます。
再起動すると直るのですがしばらくすると再発してしまいます。
mbstring関係は http://nucleus.datoka.jp/?itemid=4 を参考に設定しているのですが。。。
何かわかる方いらっしゃったらお願いします。
0204nobodyさん
2007/07/31(火) 13:27:06ID:???今、アップローダーを作っています。それで、画像名重複・上書きを避けるために
1)アップされた画像の名前を変更する
2)できれば、プログラム側で任意の名前を付けたい
3)たとえば、アップロード用のファイル参照窓が3つあるとして、
それぞれからアップされた画像を
flower_1.jpg flower_2.jpg flower_3.jpg というような名前にしたい
というような条件の時、どうしたらいいでしょう
move_uploaded_file($_FILES['fl']['tmp_name'][$i],"./doc/".mb_convert_encoding($_FILES['fl']['name'][$i],"SJIS","EUC-JP"));
rename("./doc/".$_FILES['fl']['name'][$i],"./doc/test.jpg");
「アップして、固有の名前にする」だけなら上のプログラムで出来たんですが、
任意の名前を付けるのはどうしたらいいのか…
どなたかアドバイスおねがいします
winXP + PHP5 + apache2 で開発してます
0205nobodyさん
2007/07/31(火) 13:27:45ID:z41KQ86Q複数の画像を表示するにはどうしたらいいのでしょうか?
0206204
2007/07/31(火) 13:28:16ID:UkgDKT8rお願いします
0208nobodyさん
2007/07/31(火) 13:40:33ID:???まじめにすまん
test.jpgだな
ちなみに
move_uploaded_file($_FILES['fl']['tmp_name'][$i],"./doc/".mb_convert_encoding($_FILES['fl']['name'][$i],"SJIS","EUC-JP"));
の mb_convert_encoding($_FILES['fl']['name'][$i],"SJIS","EUC-JP")で好きなものに買えれば
rename("./doc/".$_FILES['fl']['name'][$i],"./doc/test.jpg");
は必要ないと思うんだけどどうだろうか?
0210nobodyさん
2007/07/31(火) 13:48:24ID:HvsnPYPODB板検索しても見つからないんですが・・・
ここでDB関係の質問するよりはいいですよね
0212205
2007/07/31(火) 13:58:29ID:z41KQ86Qgoo辞書より
印刷物のページ上部の日付・文書名・小見出しなどを記した部分。
また、電子メールなどで、データの先頭に置かれる、内容識別のための定型の情報。
調べましたができません。
0213nobodyさん
2007/07/31(火) 13:59:58ID:HvsnPYPO有難うございます。
ですが、MySQLスレを見つけて書き込んでしまいました。
また次回質問があればコチラでさせていただきます。
0214nobodyさん
2007/07/31(火) 14:00:39ID:???不覚にもワロタwwww
http://jp2.php.net/manual/ja/function.header.php
0216204
2007/07/31(火) 14:17:28ID:UkgDKT8r>mb_convert_encoding($_FILES['fl']['name'][$i],"SJIS","EUC-JP")で好きなものに買えれば
>rename("./doc/".$_FILES['fl']['name'][$i],"./doc/test.jpg");
>は必要ないと思うんだけどどうだろうか?
あ、そうかもしれないです ほんとだ
ちょっと試してみます ありがとうございます
0217nobodyさん
2007/07/31(火) 14:31:35ID:HvsnPYPOセッションIDにログインしているか否かを格納して、それを元にページを表示しているのですが、
セッションの中身って改ざんされたりするのでしょうか?
セッションにIDとパスワードを保存しておいて、毎回それでログインチェックをするほうが良いのでしょうか?
0218nobodyさん
2007/07/31(火) 14:39:39ID:???http://pc11.2ch.net/db/
0219nobodyさん
2007/07/31(火) 14:43:25ID:???>セッションの中身って改ざんされたりするのでしょうか?
当然です。
>セッションにIDとパスワードを保存しておいて
論外です。
>毎回それでログインチェックをするほうが良いのでしょうか?
当然です。
0220nobodyさん
2007/07/31(火) 14:44:31ID:HvsnPYPO>セッションにIDとパスワードを保存しておいて
論外です。
これはどのような理由で論外にしたのでしょうか。
また、何かお勧めの方法があれば教えてください。
0221nobodyさん
2007/07/31(火) 14:54:59ID:ti5DbwcIすべてカウントするのに簡単な方法ないですかね?
思いついたのは
1 javascriptでリンクのonClickでPHPを呼び出して、DBに登録する方法。
この方法はモバイルに使えない。
2 飛び先に全部一枚PHPのページをかまして、DBにカウントを登録。
この方法はモバイルもいけるけど、マウスオーバーしたりリンク先を確認したときに実際の飛び先と違うサイトが表示されちゃって
なんか胡散臭い感じもする。
また、どっちの方法を使っても全リンクを手動で変更しなきゃならないじゃないですか?
なんかすごく簡単な方法を見逃したりしてないでしょうか?
0222nobodyさん
2007/07/31(火) 14:59:41ID:???jump.php?url=http://www.yahoo.co.jp/
jump.php
$url = $_GET['url']; //←適当に処理して
〜〜〜〜〜〜〜 //DBに格納するなど
header("Location: {$url}");
0223nobodyさん
2007/07/31(火) 15:00:10ID:???リンク書き換えもsed -iでワンライナー一発かませばたいていいけると思うが。
PHPでリンクを生成してる場合には使えないけど。
0225nobodyさん
2007/07/31(火) 15:19:04ID:HvsnPYPOではどのように対策すれば良いのでしょうか。
$_SESSIONにログイン関連のものを格納しておくとどちらにしても乗っ取られるとダメなような気がします。
0226nobodyさん
2007/07/31(火) 15:22:23ID:yIMYAVOKというコードがあったとき、$_POST['str']に\とかエスケープ文字が入ってたとします。
そういうことがある場合を配慮して、以下のコードを入れるべきでしょうか?
(当方の環境では、\nや\tに手を加えなくてもそのまま文字列として出力できました。)
if (!get_magic_quotes_gpc()) {
$str = addslashes($str);
}
0228nobodyさん
2007/07/31(火) 15:25:33ID:HvsnPYPOいや、だから自分のやりかたが不安だからここに聞きにきたんですよ
0229nobodyさん
2007/07/31(火) 15:30:51ID:???自分の気分だけ書くんだったら来るな。
0230nobodyさん
2007/07/31(火) 15:39:52ID:HvsnPYPO気分をそのまま発言しているのはそちらではないですか?
0231nobodyさん
2007/07/31(火) 15:48:47ID:???0232nobodyさん
2007/07/31(火) 15:50:29ID:???テラ矛盾wwwwwwwww
回答側無知杉wwwwwwwwww
0233nobodyさん
2007/07/31(火) 15:57:29ID:???どういう風にそのポストの値を使いたいかによって違う。
一般論はないよ(これはget_magic_quotes_gpcがTRUEでstripslashesするかどうか
ということも同様)
0234nobodyさん
2007/07/31(火) 15:58:15ID:???結局はどうやっても完全に防げるということは無いのである程度の妥協は必要です。
会員制サイトがどの種類のものかにもよりますが個人や趣味で作るCMSなサイトであれば
ログインした時点で$isUserや$authなりのセッションを発行する程度で充分だと思っています。
>>219が論外といったのは財布の中にキャッシュカードとそのキャッシュカードの暗証番号をメモした紙を
入れているのと同じだからです。
同一ID、passで登録してたら他のサイトまで被害にあう人がでる可能性もでてくるでしょう。
もし本当に見られてはならない極秘文書などを扱う場合はそもそもネットワーク上ではやらないようにする。
どうしてもやる場合はphpだけでなくサーバのアクセス制限から何から考えられる限りのことをしましょう。
破られるときは破られますが。
0236nobodyさん
2007/07/31(火) 16:26:19ID:???逆に
f (get_magic_quotes_gpc()) {
$str = stripslashes($str);
}
している。
0237nobodyさん
2007/07/31(火) 16:37:50ID:yIMYAVOK>>236さんのやり方がコード編集も楽だったので使わせていただきました。
0238nobodyさん
2007/07/31(火) 18:14:15ID:igpQYGKj$_GETされた値を保存しています。
$vote = $_GET['vote'];
$log = 'count.txt';
if ($vote) {
$lines = file($log);
foreach ($lines as $line) {
$line = explode('<>', $line);
if ($line[0] == $vote) {
$line[1] += 1;
} else {
$line[0] = $vote;
$line[1] = 1;
}
$fp = fopen($log, 'w');
fwrite($fp, $line[0].'<>'.$line[1]);
fclose($fp);
}
}
count.txtは、
PHP<>1
Java<>10
のようになっています。
入力チェックなどは省きますがこんな感じです。
このスクリプトを実際に動かすと、ログが最新の1つしか書き込まれないのですがどこが悪いのでしょうか?
それとやはりこの手のものはDBでやるべきでしょうか?
コメント書きたいのですが行数がギリギリなのでお許しを・・・汚いソースですみません。
0240238
2007/07/31(火) 18:28:00ID:???それだと思ったとおりの動作にはなりませんでした。
ただおかげで改行を入れ忘れてることに気づきました。ありがとうございます。
ちなみにそれでやった場合、
PHP<>1
Java<>10
から、
PHP<>1
Java<>10Java<>1のようになりました。
PHP<>1
Java<>11
という風になってほしいです。
0241nobodyさん
2007/07/31(火) 18:51:17ID:???スマソ。ちゃんとみてないでてきとうにいっちゃった。
foreach内にfwrite($fp, $line[0].'<>'.$line[1]);fclose($fp); があるのが原因。
wというのはあくまでも上書きだから
$lineで読み込んだ行を逐一fput or fwriteして追記していく。
0242nobodyさん
2007/08/01(水) 00:33:03ID:???PHP<>1
Java<>1Java<>10Java<>11
となるはずなんだけど・・・
$vote = $_GET['vote'];
$log = 'count.txt';
$exist = false;
if ($vote) {
$lines = file($log);
$fp = fopen($log, 'w');
foreach ($lines as $line) {
$line = explode('<>', $line);
if ($line[0] == $vote){
$line[1] ++;
$exist = true;
}
fput($fp, $line[0].'<>'.$line[1].'\n');
}
if (!$exist)
fput($fp,$vote.'<>1\n');
fclose($fp);
}
0243nobodyさん
2007/08/01(水) 00:45:31ID:???0244nobodyさん
2007/08/01(水) 01:22:52ID:???まずはファイル関数のマニュアル読むか、入門本買って超シンプルな所から作り始めなさい。
出来ないってことはまだ早いんです。
0246nobodyさん
2007/08/01(水) 01:58:38ID:CHA5n09Tphp.ini自体を変えるということですか?
0248nobodyさん
2007/08/01(水) 02:11:44ID:???空のcount.txt用意してそれ動かしてみたけどログがだいぶむちゃくちゃw
?vote=hogehogeとかうてばいいんだよな?
ファイル関数ってむずいね。普段DB使ってるからさっぱりだけど面白そうだな。
ちょっと後で作ってみるか。
0249nobodyさん
2007/08/01(水) 02:18:32ID:???0252nobodyさん
2007/08/01(水) 03:44:52ID:???DBから出したバイナリデータのサイズ測ろうとしたけど、それらしい関数が見つからなくて。
■ このスレッドは過去ログ倉庫に格納されています