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

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

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2006/06/08(木) 05:09:28ID:5gGJKVO4
PHPに関するくだらねぇ質問用スレです。
ここなら本スレで回答のないお前の下らない質問に回答があるかも知れません。

まず読め【PHP マニュアル】
http://www.php.net/manual/ja/

過去スレは>>2
0153nobodyさん2006/06/11(日) 21:27:57ID:???
>>152
うむ、>>150はきっとAJAX覚えたてで嬉しかったのだろうww
0154nobodyさん2006/06/11(日) 21:30:33ID:???
すみません、セッションを使ったログイン処理で、ブラウザを閉じたら
セッションが切れるような設定にしてあります。

ところが、サーバ側でセッション・ファイルを保存しているtmpフォルダを見てみますと、
数日前〜1週間くらい前にログインした分のファイルがいくつか消えずに残っています。
ためしにいまログインして新しいセッション・ファイルが出来たのを確認したあと
すぐにログアウトしてみると、そのファイルはきちんと削除されました。

では、なぜ残っているファイルがあるのでしょうか? これは消えないのでしょうか?
01551542006/06/11(日) 21:34:32ID:???
追記です。
さらに実験したところ、明示的にログアウト処理(セッションクッキーの削除やセッションの破壊)を
した場合はきちんとセッション・ファイルも削除され、
単にブラウザを閉じるだけでログアウトしてしまうとセッション・ファイルが
ゴミとして/tmpフォルダに残ってしまうようです。

このゴミを自動で消すことは出来ないのでしょうか?
一週間も前のが残っていると気持ち悪いし、セキュリティ的にも問題がある気がします。
0156nobodyさん2006/06/11(日) 21:47:31ID:BO/wu1ch
>>154-155
セッションのことだとわかっているのに
http://www.php.net/manual/ja/ref.session.php
を見ていないの?

ブラウザを閉じたのかどうかはサーバには解らないからセッションファイルが残る。
気になるならsession.gc_maxlifetimeを短く設定しろ
0157nobodyさん2006/06/11(日) 21:48:33ID:???
$info[0]['name'] = 'aaa';
$info[0]['value'] = 1;
$info[1]['name'] = 'bbb';
$info[1]['value'] = 2;
$info[2]['name'] = 'ccc';
$info[2]['value'] = 1;
$info[3]['name'] = 'ddd';
$info[4]['value'] = 2;

こんなデータがあるんですが、valueでソートして
aaa, ccc, bbb, ddd のようにしたいと思っています。
しかし usort()+strcmp() でソートすると、valueではソートしてくれるんですが,
ccc, aaa, ddd, bbb のように同じvalue内で逆順になってしまいます。
これを希望通りにソートするにはどうすればいいですか?
0158362006/06/11(日) 21:54:05ID:???
>>144
Σ(´Д`)ズガーン

…スクリプトをAAACAFEに置いて試したところ、
確かにセッションが保持されてました。
つまりうちのローカル環境が異様だという事ですね。
わざわざありがとうございました…トホホ
01591542006/06/11(日) 22:17:03ID:???
>>156
session.gc_maxlifetimeはデフォルトの1440秒のままです。
それなのに1週間も前のセッション・ファイルが消えないのが
おかしいと思いまして・・・
0160nobodyさん2006/06/11(日) 22:47:54ID:???
>>159
セッションファイルはセッションが開始されるごとに
gc_probability/gc_divisorの確率でgc_maxlifetimeより古いものが消される。
デフォルトでは1%の確率でGCが起こる。
gc_divisorを「gc_maxlifetime秒間のアクセス数」に設定しておけ。

ただし、「確率」の実装がどうなってるかは知らないが、本当に確率的に消されているなら、
100年分のセッションファイルが残る確率もある。限りなく0に近い確率だけど
01611452006/06/11(日) 22:48:31ID:???
>>151
揚げ足でもなんでもなく、素でjavascript前提で考えてたよ。
PHPだけでも、クライアントにファイル容量を入力させれば可能だけどね。
# これは本当に揚げ足取りw

さくっとFlashでやるのが一番楽。
0162nobodyさん2006/06/11(日) 22:50:08ID:???
香ばしい。
0163nobodyさん2006/06/11(日) 23:01:31ID:???
どうみてもperlです。
本当にありがとうございました。
01641542006/06/12(月) 01:53:44ID:???
>>160
なるほど・・・

ところで「gc_maxlifetime」で設定する秒数って、何を基準に数え始めるのでしょうか??
セッション・ファイル作成時刻からの秒数? それとも最終アクセス時刻からの秒数??
もし前者だとすると、24分ごとにセッションが切れちゃう可能性があって不便ですね・・・
0165nobodyさん2006/06/12(月) 02:01:34ID:???
>>151みたいな、PHP単体で考えるヤツとかって、
仕事で使ってる訳でもない素人レベルなんだろうな。

ブラウザに表示する内容をブラウザリロード無しに書き換えるには、
JavaScript(+DHTML)は必要。
そうであれば、AJAXも普通に視野に入れて考えるべきだと思うが。

単純に>>151が>>150の上手な煽りに釣られただけにしか見えない。
0166nobodyさん2006/06/12(月) 02:27:28ID:???
>>165
そういう問題じゃない。
>>142からの流れをよく嫁、バカ。
PHPで出来るかどうかの話をしてるんだよクズ。

JavaScriptだのFlashだの、ローカルでの処理を加えれば
ほとんど何だって実現出来るに決まってんだろアホ。
0167nobodyさん2006/06/12(月) 02:36:24ID:???
>>165
流れ的にPHPでのみ、って話だろ?
お前仕事で必要のない機能や処理を突っ込んでるタイプじゃないか?
0168nobodyさん2006/06/12(月) 02:38:30ID:???
仕事でプログラミングやってるやつが多いのはよく分かった。
0169nobodyさん2006/06/12(月) 02:39:40ID:???
まぁまぁ。
ここは質問者と解答者のいるスレだよ。

質問には色々な解答があって良いと思うよ。

では、次の方質問どうぞ↓
0170nobodyさん2006/06/12(月) 02:51:42ID:???
PHP6っていつ出るの?
何かもう開発してるんだよな?
0171nobodyさん2006/06/12(月) 02:53:39ID:???
Cookieの流れとかいろいろモニタしたいのですが、
HTTPヘッダを解析すれば良いのでしょうか?

だとしたら、みなさんどのソフトがオススメですか?
ベクターとかでちょっと探したけど、どれもイマイチな感じでした。。。
0172nobodyさん2006/06/12(月) 03:10:05ID:???
>>171
Fxのプラグインで良いのがあるよ。
0173nobodyさん2006/06/12(月) 03:28:33ID:???
$match = '/>>(.+)/i';
$change = '<font color="red">\0</font>';
$msg = preg_replace($match,$change,$msg);

>>hogeさん

この部分だけ色を変えたいのですが、上のかきかたでは改行以降も色換えしてしまいます。。

くだらない質問ですが、どのようにすれば改行は含まないようにできるのでしょうか?
0174nobodyさん2006/06/12(月) 04:10:33ID:???
正規表現の問題だな。
改行以前まで色を変えたいなら
>>(+)$
かな。
0175nobodyさん2006/06/12(月) 04:53:29ID:???
>>(.+?)\n
0176nobodyさん2006/06/12(月) 04:57:33ID:???
>>174
嘘つくな
知らないなら発言すんな
(+)こんなので動くと思うのか??
0177nobodyさん2006/06/12(月) 05:01:05ID:???
(+)_(+)
0178nobodyさん2006/06/12(月) 05:19:36ID:???
>>(.+?)\n
これだと<br />までタグで囲っちゃうね
正規表現って難しい!
マスターしてる人はすごいよ
0179nobodyさん2006/06/12(月) 06:36:11ID:???
まあ<br />まで囲っちゃっても実害は無いわけだが
0180nobodyさん2006/06/12(月) 07:33:43ID:???
まあ、ここら辺がphpの弱点だよね。perlの助けを借りないと出来ない。
次バージョンで出来るようになると良いのだが。
0181nobodyさん2006/06/12(月) 07:41:43ID:???
>>164
マニュアルに書いてあるわけだが。
0182nobodyさん2006/06/12(月) 07:55:29ID:???
metaタグって<meta 〜 />みたいに閉じないのは何故でしょう?
0183nobodyさん2006/06/12(月) 07:56:31ID:???
間違えました。Web製作で聞きます
0184nobodyさん2006/06/12(月) 08:30:29ID:???
>>157について誰か教えて下さいな..
0185nobodyさん2006/06/12(月) 09:58:12ID:???
>>184
foreach ($info as $key => $row) {
$name[$key] = $row['name'];
$value[$key] = $row['value'];
}
array_multisort($value, SORT_ASC, $name, SORT_ASC, $info);

http://jp.php.net/manual/ja/function.array-multisort.php
に例が書いてある。

157
$info[3]['name'] = 'ddd';
$info[3]['value'] = 2;
^^^^^^^^^
0186nobodyさん2006/06/12(月) 10:45:51ID:???
今までMySQL側でJOINとかで頑張って複雑なSQL作ってたのですが、

FruitTable、fruit_id, fruit_name
1,りんご
2,みかん
3,ぶどう

複雑なSELECT部分の中で、上記項目くらいしかないテーブルはJOINを使わず
前もって上記テーブルをSELECTして$fruit[]配列に入れておき
$fruit[ $row[3] ] ←このような感じで参照したほうがよいでしょうか?
また皆さんはどのように最適なスクリプト(とSQL)の組み合わせを考えてますでしょうか?
0187nobodyさん2006/06/12(月) 11:07:40ID:???
>>186
そもそもそんなデータでは複雑なSELECT文にならない気がする
0188nobodyさん2006/06/12(月) 11:25:55ID:???
>>173

[^\n<]+
0189nobodyさん2006/06/12(月) 11:32:42ID:???
>>187
お前理解力なさすぎだろw
0190nobodyさん2006/06/12(月) 12:02:08ID:???
>>185
ありがとうございました。ドンピシャですね。
なるほどmultisortの挙動はよく分からなかったんですが
$nameと$valueの配列を別個につくり、
$infoを$valueで比較、$valueが一緒だったら$nameで比較、としてソートしてくれるんですね。
本当に助かりました。そして勉強になります。
0191nobodyさん2006/06/12(月) 12:08:24ID:???
>>186
MySQLじゃなくPostgreSQLを進めてみる
CREATE VIEWでビュー作ってソコからSELECTしてるから楽だよ
0192nobodyさん2006/06/12(月) 12:16:44ID:???
>>186
正規化されすぎたDBだとJOINが多くなってSQLが複雑になる場合があるが、
DBの最適化が行われていればSQL実行時間はそんなに遅くならない。
俺はDB側を頑張ってPHP側は楽してるな。
01931862006/06/12(月) 14:12:12ID:???
>>187
実際にはTABLEが沢山あり、一つのSELECTだけで1KBほどになってるのもあります


>>191
MySQL5.0からCREATE VIEWが使用できるみたいです
でもCREATE VIEWって、SQLに変数が入る場合とか駄目ですよね?
変数の値が [1-5] とか少ないなら予め各ビューを作っておき
switch()で参照するビューを選択するという方法でしょうか?
0194nobodyさん2006/06/12(月) 17:25:56ID:???
>>193
『変数』がSQL文のどこに食い込むかによる
賢いDBMなら、必要に応じてViewに対するWHERE句をView内部のサブクエリに移動させて検索してくれる。
あと、Viewにするクエリを工夫すればViewに対するWHERE句だけに変数を追いやれることもある
0195nobodyさん2006/06/12(月) 17:29:37ID:???
DBMじゃなくてDBMSだよね、と下らないツッコミ
gdbm始め、dbm系ライブラリは全然賢くないっす
0196nobodyさん2006/06/12(月) 17:29:51ID:hLJuV8ow
携帯で以下にアクセスしても
PC版のyahooページが表示されてしまいます。
携帯でアクセスした時は携帯を読み込むようには出来ませんでしょうか?

<?php
$url="http://www.yahoo.co.jp";;
$page = readfile($url);
?>

宜しくお願い致します。
0197nobodyさん2006/06/12(月) 17:38:42ID:???
>一つのSELECTだけで1KBほどになってるのもあります
ありえない
構造から見直した方がよくね?
0198nobodyさん2006/06/12(月) 17:41:48ID:???
>>196
そのサイトが携帯をUAだけで判断してるならUAを送ればできるとは思うけど、
中継サーバのIP見てるんなら無理

しかもYahoo!って中で変な処理してなかったっけ?
複数のサーバを同じように見せかけて同じものを表示・・・とか・・・
0199nobodyさん2006/06/12(月) 17:43:54ID:???
オナニー(Onanie)の語源は、『旧約聖書』の創世記の叙述に由来する。創世記38章にオナンという名の男が登場する。
彼は兄エルが早死にしたため、兄の代わりに子孫を残すべく兄嫁タマルと結婚させられた(逆縁結婚)。
しかしオナンは兄の為に子を残すことを嫌い、性交時は精液を膣の中に放出せず、寸前で陰茎を抜き精液を地に漏らして避妊をした。
すなわちオナンがおこなったのは膣外射精であるが、語義が転じて生殖を目的としない射精行為としてオナニーが使われるようになった。
ちなみになぜオナンは兄のために子を残すことを拒否したかというと、兄嫁に子が出来てしまうと父の遺産はその子のものになってしまう。

兄嫁に子が出来なければ遺産は次男であるオナンのものとなるはずだったとも言われる。当時の掟(慣習よりも強制力があった)により言われている
ことだが、聖書にはそこまでのことは書いていない。一般には「血統維持」を強調した物語と理解されている。
これは、不幸の文章です。読むとあなたは必ず、いや必ず不幸になります。
しかし、読んでしまっても不幸を回避する方法があります。それは、この文章をまるまんま他の板へ3つ貼ることです。
0200nobodyさん2006/06/12(月) 17:47:19ID:???
>>196
if(携帯からのアクセス){
  $url="http://mobile.yahoo.co.jp";;
}else{
  $url="http://www.yahoo.co.jp";;
}
0201nobodyさん2006/06/12(月) 17:51:32ID:???
>>196

<?php
ini_set('user_agent', $_SERVER['HTTP_USER_AGENT']);
$url="http://www.yahoo.co.jp";;
print readfile($url);
?>
02022012006/06/12(月) 17:53:54ID:???
>>200
UAが携帯でないとPC用のYahoo!モバイルが表示されるようです。
0203nobodyさん2006/06/12(月) 18:04:01ID:???
>>197
LEFT JOINが多かったりするとそれくらいなる時もあるんじゃね?
0204nobodyさん2006/06/12(月) 18:21:37ID:???
>>198
yahooは確かIPをチェックしてたはず。
別のサイトで試さないとダメかも

そういやLivedoor MAPへ携帯UAでアクセスした時、
返ってこないので変だと思ったら、
UAが携帯なので携帯向けアドレスへリダイレクト→
IPが携帯でないのでPC向けアドレスへリダイレクト→
UAが携帯なので携帯向けアドレスへリダイレクト→
以下略
ずっとリダイレクトを受け付けるIEもナンなんだが・・・
0205nobodyさん2006/06/12(月) 18:29:40ID:???
UAだけの所は>>201でOKですね。
IPが絡んでくるところはどうしようもないぽ
0206nobodyさん2006/06/12(月) 18:47:59ID:???
>>204
>yahooは確かIPをチェックしてたはず。

しているのは深階層の一部。
殆どのページはUA偽装で閲覧可能。
0207nobodyさん2006/06/12(月) 23:59:10ID:???
echo '日本負けもうダメポ';
0208nobodyさん2006/06/13(火) 01:14:38ID:NxGxiCeS
PHP5.1.2+pdo_mysqlで掲示板を作っておりましてUTF-8で表示したいのですが、
EUC-JPになってしまいます。

・MySQLにはUTF-8で保存されている
・mbstringの設定
  mbstring.detect_orderauto
  mbstring.encoding_translationOff
  mbstring.func_overload0
  mbstring.http_inputauto
  mbstring.http_outputpass
  mbstring.internal_encodingUTF-8
  mbstring.languageJapanese
  mbstring.strict_detectionOff
  mbstring.substitute_characterno value
・phpinfo()でEUC-JPの文字列はなし
・スクリプト内部
  mbstringの設定は変更していない
  new PDO → prepare → execute → fetchしているのみ


ご存知の方がいらっしゃいましたら、どうかご指摘お願い致します。
0209nobodyさん2006/06/13(火) 01:48:33ID:???
>>208
PHPファイルの文字コードはUTF-8になっていますか?
出力したHTMLは文字コード指定をUTF-8にしていますか?
mbstring.http_outputをUTF-8に指定するとどうなるでしょうか?

これで的外れな事を言ってたらすんまそん。
0210nobodyさん2006/06/13(火) 01:57:20ID:???
あとはHTMLのヘッダにキャラクタセットが書いてないとか
Apacheの設定が強制EUC-JPになってるとか・・・
0211nobodyさん2006/06/13(火) 02:06:44ID:???
>>209
>mbstring.http_output

そんな関数ないよ。
惜しいけど。
02122092006/06/13(火) 02:32:09ID:???
>>211
関数て(;´Д`)

私はphp.iniを直接いじるのか.htaccess使うのかそれともini_set()使うのかは
>>208の自由だと考えてああ書いたのですが、何故これが関数だと思ったのですか?
0213nobodyさん2006/06/13(火) 03:16:25ID:5706m95F
ぼうやだからさ
02141732006/06/13(火) 04:03:00ID:N4y2gPA5
どなたか綺麗な書き方できるかたいらっしゃいませんか?
0215nobodyさん2006/06/13(火) 04:33:54ID:???
改行というのは改行コードのことか、改行タグのことか?
02162152006/06/13(火) 05:25:39ID:???
>>173より改行とは<br />のことを指すと推定して進めるけど、
">>"も含めて<br />の手前まで色を変える場合は

$match = '/(>>.+?)(<br \/>)/';
$change = '<font color="red">$1</font>$2';
$msg = preg_replace($match, $change, $msg);

">>"の色は変えないという場合は

$match = '/>>(.+?)(<br \/>)/';
$change = '>><font color="red">$1</font>$2';
$msg = preg_replace($match, $change, $msg);

こんな感じかね。
もっともこれだと

>>hoge>>hage<br />

とか

>>ho
ge<br />

とか書かれるとちゃんと動かんけど。
0217nobodyさん2006/06/13(火) 05:27:43ID:???
>>214
$match = '/>>(.+)/i';
ってのを
$match = '/>>(.+?)<br/i';
ってすりゃいいんじゃないの?
0218nobodyさん2006/06/13(火) 05:28:53ID:???
あー。<br>も()で括って$2を増やさなきゃダメか
02191732006/06/13(火) 06:08:43ID:???
それだとなんか奇麗じゃないような…

正規表現でもそれが限界なんでしょうか?

$match = '/(>>.+?)<br \/>/';
$change = '<font color="red">$1</font><br />';
$msg = preg_replace($match, $change, $msg);

今のところ、こんな感じで一応動作してますが
0220nobodyさん2006/06/13(火) 06:37:39ID:???
Win XP Pro
Apache 2.0.58
PHP 5.1.4

の環境で Cake PHP を実行しようとすると以下のエラーがでます。

Fatal error: Call to undefined function mysql_connect() in D:\workspace\cake\cake\libs\model\dbo\dbo_mysql.php on line 101

理由はPHPがMySQLのモジュールをうまく読み込んでないようで、
php.ini にて

extension=php_mysql.dll

のコメントをはずすのですが相変わらずうまくいきません。
なにが悪いのでしょうか?

なお、httpd.conf は

# For PHP 5 do something like this:
LoadModule php5_module "c:/php5/php5apache2.dll"
AddType application/x-httpd-php .php

# configure the path to php.ini
PHPIniDir "c:/php5"

と設定して、php.ini は c:/php5 においてます。
0221nobodyさん2006/06/13(火) 06:42:50ID:???
>>219
君の言う「奇麗」の基準が分からないよ
0222nobodyさん2006/06/13(火) 07:07:51ID:???
>>220
libmysql.dllが読み込めていないかも
systemのパスにコピーしたかい
0223nobodyさん2006/06/13(火) 08:29:32ID:???
>>219
そんなにこだわるならperlの質問スレ行けば?
02242082006/06/13(火) 10:01:25ID:???
>>209
ご丁寧にありがとうございます。
ご指摘の点を確認してみました。

・PHPファイルはUTF-8
・Content-Typeは"text/html; charset=UTF-8"
・スクリプトの先頭でmb_http_output('UTF-8');してみましたがEUC-JPで表示されました。
 mb_http_outputでTRUEが返っていることを確認しました。
・スクリプトの先頭でecho mb_internal_encoding(); → UTF-8


試しに、fetch後すぐにmb_detect_encodingをしてみましたら、この段階で既にEUC-JPになってしまって
いるようでして、データベースが勝手に変換してくれているような気がしてきました。
少し調べてみたいと思います。
0225nobodyさん2006/06/13(火) 10:28:11ID:3c5IwUSO
phpの設定のupload_max_filesizeを現状のdefault 2Mから
8Mにアップしたいと思うのですが、
サーバーの関係でphp.iniをいじることができません。
.htaccessで変更できるみたいなのですが、
.htaccessの設定方法がわかりません。

php_value upload_max_filesize 8388608
っぽいのでは?試してみたのですが、だめでした、お力御貸しください。
0226nobodyさん2006/06/13(火) 11:12:31ID:???
>>225
post_max_size >= upload_max_filesizeでないとupload_max_filesizeは意味をなしません。

8388608じゃなくて"8M"じゃどうよ?

それとそのサーバでは変更を許可してるのかい?
PHP_INI_PERDIRっぽいけど念のため
02272252006/06/13(火) 11:15:56ID:3c5IwUSO
226>
post_max_size は8Mになっております。
.htaccess では バイト表記でないいけないとどこかの文献でみました。
ただ、 8Mでは失敗したので、"8M"で今から試してみます。

PHP_INI_PERDIRなので、大丈夫とはおもうのですが、、、

02282252006/06/13(火) 11:27:57ID:3c5IwUSO
8M "8M" ともに、だめでした。

管理に言って php.iniの数字を変えてもらったのですが、効き目なし
というわけわからん状態に陥りました。
アパッチは再起動してみたのですが、、

0229軟式PHP2006/06/13(火) 12:17:40ID:???
<input type="hidden" name="MAX_FILE_SIZE" value="ファイルサイズ" />
とか定義してないかね。
0230nobodyさん2006/06/13(火) 12:20:18ID:???
本題の件はともかく、管理のphp.ini変更が適用されないのは、
PHPIniDirが変なとこ指してるんじゃないの。
02312252006/06/13(火) 12:20:34ID:3c5IwUSO
229
再度確認したところやっぱり、だめでした
memorylimitもPOSTMAXも8Mなんですが、、
UPが2Mなんで、、どうにも、、、
はぁ
0232nobodyさん2006/06/13(火) 12:31:59ID:BClcCsNS
phpinfo()で表示される「User/Group」の部分を変更するには
Apacheの設定変更が必要ですが、
それをphp.iniの設定で変更できたらご教授願います。
或いは、プログラムレベル内で変更できますか?
0233nobodyさん2006/06/13(火) 12:49:51ID:???
>>231
モジュール用の設定を変えているがCGIで実行してるとか
02342202006/06/13(火) 13:49:14ID:???
>>222
おお、できますた!
どうもありがとう。
0235nobodyさん2006/06/13(火) 15:17:40ID:???
>>224
っていうか、ソースもデータも何もかもEUCで統一したほうが
問題が少ないと思うんだけど。

HTML出力でUTFにしたいときだけアウトプットを変換すればいいし。
0236nobodyさん2006/06/13(火) 15:52:48ID:UqVx0E5S
すみません。PHPからMySQLの接続が出来ないので、どなたか教えて下さい。
WindowsXPPro+Apache2.0.52+PHP5.0.2+MySQL4.1.7で、
ttp://tsuttayo.sytes.net/mysql/install/mysql/10/20/20/20/install.php
の通りにMySQLを設定しました。それで、MySQLのIDとPWを作って、データベースを
作成することは出来ました。localhostで、確かにコマンドプロンプトからは、My
SQLのIDとPWでMySQLにログインすることは出来ますし、MySQLが起動していること
も確かです。
 ところが、PHPでMySQLと接続する文を書くと、(PHPにはサーバの場所(localhost)
やMySQLのID・PWも正確に書いています)

Warning: mysql_real_escape_string() [function.mysql-real-escape-string]:
Access denied for user 'ODBC'@'localhost' (using password: NO) in
C:\Program Files\Apache Group\Apache2\htdocs\index.php on line 78

という表示が出てしまうのです。この「'ODBC'@'localhost'」とは一体何なのでしょうか?
PHPにはサーバの場所(localhost)やMySQLのID・PWも正確に書いていますのに、何故この
ような表示が出てしまうのでしょうか?
どうしたら、PHPでMySQLと接続する文を書くことが出来るのでしょうか。どなたか教えて
下さい。宜しくお願いします。
0237nobodyさん2006/06/13(火) 16:15:50ID:???
line 78 から調べろウンコ
0238nobodyさん2006/06/13(火) 16:25:02ID:???
>>236
コマンドプロンプトから作ったユーザー?
0239nobodyさん2006/06/13(火) 16:26:17ID:???
>>236
>Access denied for user 'ODBC'@'localhost' (using password: NO)
WindowsでMySQL接続ユーザを指定せずに、MySQLに接続しにいった時に
デフォルトユーザのODBC@localhostが指定されたと解釈されて出てるエラー。
78行に至るまでをチェックしろ、ウンコー
0240nobodyさん2006/06/13(火) 16:26:17ID:???
>>236
mysql_connectも失敗してるんじゃないの
0241nobodyさん2006/06/13(火) 16:42:45ID:UqVx0E5S
皆さん、こんな、うんこの私に回答して下さり、誠にありがとうございます。無視
しないでくれるだけでも、有難いです。

>>238
>コマンドプロンプトから作ったユーザー?
いえ、MySQLのユーザー名はrootであり、デフォルトで作成されるものです。PWは
私がMySQLのGUIの画面で作成しました。

>>239
>>Access denied for user 'ODBC'@'localhost' (using password: NO)
>WindowsでMySQL接続ユーザを指定せずに、MySQLに接続しにいった時に
>デフォルトユーザのODBC@localhostが指定されたと解釈されて出てるエラー。
>78行に至るまでをチェックしろ、ウンコー
ありがとうございます。78行目を見たのですが、DBのエスケープ処理が失敗した
ことしか分からなかったのです。それで、「WindowsでMySQL接続ユーザを指定」
するとは、具体的にどうすれば良いのでしょうか。php.iniでmysql.default_user
を設定しても、うまくいかなかったのですが・・・。

>>240
>mysql_connectも失敗してるんじゃないの
エラー表示は、前述のものだけでしたが、多分mysql_connectも失敗していると
思います。以前、この環境にXOOPSをインストールしようとしたら、「DBに接続
出来ません。」という表示が出てしまったからです。

この後、「WindowsでMySQL接続ユーザを指定」するとは、具体的にどうすれば良
いのでしょうか。php.iniでmysql.default_user = root と設定しても、うまく
いかなかったのですが・・・。
0242nobodyさん2006/06/13(火) 17:08:58ID:???
>>241
>php.iniでmysql.default_user = rootと設定しても、うまくいかなかった
・そのphp.iniが使ってるPHPで有効な設定ファイルではない。
・更に優先度の高い設定ファイル等で別の値が上書きされている。
・mysql_connect()に変数でパラメータが指定されていて、その変数の値が空(NULLではなく空文字)

mysql_connectのパラメータに着目して処理を追え
(@mysql_connectになってる。多分)
02432422006/06/13(火) 17:12:14ID:???
>(@mysql_connectになってる。多分)
と思ったが、だったら78行目でリソース型(mysql接続リソース)
じゃないってエラーになるか。
0244nobodyさん2006/06/13(火) 17:22:07ID:???
safe-modeはOFFになっているのですが、
<?php
$output = shell_exec('ls -lart');
echo "$output";
?>
が表示されません。
なぜでしょうか?
0245nobodyさん2006/06/13(火) 17:49:15ID:???
>>244
答え:Windowsだから
とか言われないように、環境を書きましょうよ。
0246nobodyさん2006/06/13(火) 17:51:04ID:UqVx0E5S
>>244
safe-modeはOFFになっていても、
open_basedir が設定してあるのではないでしょうか?
0247nobodyさん2006/06/13(火) 17:57:02ID:???
>>241
mysql_real_escape_string()は接続してないと使えない関数。
で、接続されていないとデフォルトで接続を試みる。
ということでconnectできていないと考えられる。

まずはconnectができているか簡単なので試してみるといいかも。
(マニュアルより)
<?php
$link = mysql_connect('localhost', 'mysql_user', 'mysql_password');
if (!$link) {
die('接続できませんでした: ' . mysql_error());
}
echo '接続に成功しました';
mysql_close($link);
?>
0248nobodyさん2006/06/13(火) 18:13:04ID:UqVx0E5S
>>247
ありがとうございます。test1.phpに、
<?php
$link = mysql_connect('localhost', 'root', '私が設定した英数字のパスワード');
if (!$link) {
die('接続できませんでした: ' . mysql_error());
}
echo '接続に成功しました';
mysql_close($link);
?>
を書いて実行してみたところ、

Warning: mysql_connect() [function.mysql-connect]: Client does not support authentication protocol requested by server;
consider upgrading MySQL client in C:\Program Files\Apache Group\Apache2\htdocs\test1.php on line 2
Client does not support authentication protocol requested by server; consider upgrading MySQL client

という表示が出ました。接続出来ていないようですが、何故でしょうか・・・。MySQLでデータベースは作成出来た訳ですし、
MySQLが起動しているのも、「コントロールパネル」−「管理ツール」−「サービス」で確認しています。php.iniにも、
extension=php_msql.dll
extension=php_mysql.dll
extension=php_mysqli.dll
と書いていますし、test1.phpのID・PWも合っています。接続出来ない原因として、考えられるのは何でしょうか?教えて
下さい。お願い致します。
0249nobodyさん2006/06/13(火) 18:15:12ID:???
>>244
WindowsXP Home
HTTPD 1.42n
PHP 5.1.1
です。

>>246
open_basedirはコメントアウトされていました。
一瞬だけコマンドプロンプトは表示されるのですが・・・
0250nobodyさん2006/06/13(火) 18:16:31ID:???
>>248
phpのMySQLモジュールバージョンとMySQLサーバのバージョンの問題かも
パスワードの関係でなんかあったような・・・

一度パスワード無しのユーザを作ってそれで接続してみたらできるかも。
もちろんパスワードは無しで接続ね。
0251nobodyさん2006/06/13(火) 18:34:24ID:???
>>249
Windowsには標準でlsコマンドないでしょ?
Linuxとかはほぼ標準で入ってるはず
02522502006/06/13(火) 18:41:25ID:???
>>248
調べたらphpのmysqlモジュールバージョンが4.0.x以下だとまずいみたい。
phpinfo()でmysqlのバージョン調べてみてね。

4.0.x以下だったら、phpのバージョン上げるか以下のページに回避策(英語)

http://dev.mysql.com/doc/refman/4.1/en/old-client.html
■ このスレッドは過去ログ倉庫に格納されています