【PHP】質問スレッドpart31【php】
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2005/11/27(日) 00:07:12ID:eBvjdczp【基本ルール】
・新規質問の方は上げてください。age進行でお願いします。
・質問者は2回目以降、最初のレス番号を名前欄に入れてください。
・回答者は質問者に対して>>(アンカー)をつけてください。
・煽り・荒らしは放置。荒らしに反応した香具師も荒(ry
・解決しなくてもこたえてもらったら礼を。
【質問テンプレ】
・マニュアルを調べたか、google検索したか(調べたキーワード)
・タイトル(禁:教えてください!etc) 例:requireとinclude
・内容 例:requireとincludeはどう違うのですか?
・質問する際には環境も明記。
【その他諸注意】
・正規表現・PEAR・テンプレート(Smarty等)・フレームワークはそれぞれの該当スレへ
・SQLについての質問はデータベース板(PCカテゴリ)の各スレで
・オブジェクト指向については良スレがないから本を買え
・速さについては自分でベンチをとってここに書け(違う環境の人も調べてくれるかも)
【PHP マニュアル】
http://www.php.net/manual/ja/
※マニュアル上部の「search for」から検索を活用すべし(便利)。
過去スレ、関連リンク、FAQ等>>2-10辺り
0342nobodyさん
2005/12/08(木) 15:48:34ID:???マニュアル通りだと
$row = $stmt->fetch(PDO_FETCH_ASSOC);
に対して、
Warning: PDOStatement::fetch() expects parameter 1 to be long, string given in /home/www/test.php on line 49
こんな警告が出てしまいます。
PDOStatement::setFetchModeを使うのかなと
$result = $stmt->setFetchMode(PDO_FETCH_ASSOC);
を追加してみたのですが
Warning: PDOStatement::setFetchMode() [function.setFetchMode]: SQLSTATE[22003]:
Numeric value out of range: unhandled mode; this is a PDO bug, please report it in /home/www/test.php on line 48
こっちはこっちでこんな警告出してきました。
PHP5.1.1です。
0343325
2005/12/08(木) 15:57:52ID:???トップ画面→ルーム作成画面まで作成してみました。
http://www.uploda.org/file/uporg255946.zip.html
問題点は、
*$_SESSION['id'][$i]の表示がおかしくなってしまう。"yuji"→"y"など、一文字になってしまう。
FAQを参照し、$_SESSION{'id'}{$i} にするも結果は変わらずorz
宜しければ、ご教授願いたいと思います。
よろしくお願い致します。
0344325
2005/12/08(木) 15:59:23ID:???0347nobodyさん
2005/12/08(木) 16:56:50ID:???print_r($_SESSION);
してセッション変数がどう格納されているか確認してみな。
そういうことやらないなら、
丸投げスレに移行すべし。
0348342
2005/12/08(木) 17:05:47ID:???スンマセン。
Noticeも表示されるようにしたら
Notice: Use of undefined constant PDO_FETCH_ASSOC - assumed 'PDO_FETCH_ASSOC' in /home/www/test.php on line 49
警告の他に上記が追加されました。
で、PDO_FETCH_ASSOCの部分をシングルクォートで括ってやったら警告だけが残りました。
0350nobodyさん
2005/12/08(木) 17:18:54ID:???grs.phpの30行目を
$_SESSION['id'] = $id;
に変えて、
create.phpの31行目を
$_SESSION['id']
に変えれ。
$_SESSION{'id'}という書き方はダメ。中カッコは文字列の中から1文字だけ参照するときにつかうもの。配列の場合は必ず角カッコ。
0353nobodyさん
2005/12/08(木) 23:41:20ID:2fsehRpI>>337さん、>>347さん、>>350さん ありがとうございました。
教えて頂いた事を参考に、頭を捻りながら作業を進めた結果、
room.txtを元に、各表を作成する事までは出来ました。
しかし、参加ボタンで名前を追加という点で行き詰ってしまいましたorz
参加ボタンを押すと、$_SESSION['id']と、$_SESSION['rate']をroom.txtに追加したいのですが、難しいのです・・・。
[room.txt]
1,2,aaa,2,Dungeon,3,yuji/,1500/
となっており、
rate1700で、idがryuujiさんが参加した場合、
1,2,aaa,2,Dungeon,3,yuji/ryuuji,1500/
1700としたいのです。
http://www.uploda.org/file/uporg256297.zip.html
現在このような感じです。
出来れば、丸投げにしたくないのでアドバイスや解決策があればよろしくお願い致しますorz
予想としては、別にもう一つphpがいるのかなと思うのですが・・・。
もしかして、PHP+MySQL覚えた方が解決までの距離が短かったりでしょうか・・・。
0354nobodyさん
2005/12/08(木) 23:42:03ID:???sage忘れすみません;;
0355nobodyさん
2005/12/08(木) 23:44:45ID:???0357nobodyさん
2005/12/09(金) 01:14:54ID:vSvgZQPEフォームから >>1>>2>>3-4 など、参照したい行数を$resで指定して
datから該当の行のコメント部分だけを表示しようとしていますが、
処理が悪く表示が抜けてしまう行があります。<>は実際は半角です。
$res = preg_replace("/(^|)>>/i", ",>>", $res);
$res = substr("$res",1,(strlen($res)-1));
$log_line = split( ",", $res);
$ct = count($log_line);
for($i=0; $i<$ct+1; $i++){
$st = preg_replace("/(^|)>>(\d+)-(\d+)/si","\\2", $log_line[$i]);
$to = preg_replace("/(^|)>>(\d+)-(\d+)/si","\\3", $log_line[$i]);
$on = preg_replace("/(^|)>>(\d+)/si","\\2", $log_line[$i]);
$log_file = "$ls.dat";//該当2chのdatログ
$log_viewer = file($log_file);
if(!ereg("-", $res)){
list($name,$email,$date,$com) = split( "<>", $log_viewer[$on-1]);
echo "$com<br><br>";
}
elseif($st && $to){
for($h=$st-1; $h<$to; $h++){
list($name,$email,$date,$com) = split( "<>", $log_viewer[$h]);
echo "$com<br><br>";
}
}
}
既知の問題としては、>>1>>2>>3-4で1と2が落ちて3と4しか表示されない、
(>>1>>2>>3>>4や>>1-4ではとりあえず表示されます)
<br>が最後に4つ表示される。などです。
いろいろと変数を表示させたりしてやってきましたが、ここまでで手詰まりました。
最初からコーディングの悪さはあると思いますが、どなたかご教授ください。
0358nobodyさん
2005/12/09(金) 02:36:11ID:???とりあえず $ct = count($log_line); の行の前あたりに
$a=array(); foreach($log_line as $b) $a[]=urlencode($b); print_r($a);
を加えて$log_lineの中身がどうなっているかチェック。
他にも怪しそうな変数があったら同様にチェック。
変数の内容を確認するのはデバッグの基本。
あと×「教授」→○「教示」
0359nobodyさん
2005/12/09(金) 02:56:48ID:???使えるものしか使っていないのが一番の原因だとは思いましたが
おっしゃるように$log_lineを調べて、if(!ereg("-", $res)の部分を潰して
書き替えて、なんとか表示されるようになりました。
ご教示ありがとうございました。
0361nobodyさん
2005/12/09(金) 04:39:41ID:???>自分でphp5に出来無い時点でダメポ。
この流れだと、自分でサーバーの設定弄れるって事なんじゃないの?
レン鯖でも専鯖でも無い限りそれはムリポw
0363nobodyさん
2005/12/09(金) 09:15:36ID:???http://www.php.net/README_UPGRADE_51.php#extensions2
これだな。
0364nobodyさん
2005/12/09(金) 14:13:07ID:???日本語オンラインマニュアルの更新が遅いんだよな
最新のchm版マニュアルは定数の部分がPDO::〜に変更されていた
0365nobodyさん
2005/12/09(金) 14:17:30ID:???↓
PDO_FETCH_ASSOC
↓
PDO::FETCH_ASSOC
0366nobodyさん
2005/12/09(金) 14:24:52ID:???0367nobodyさん
2005/12/09(金) 14:26:23ID:???0370nobodyさん
2005/12/09(金) 21:15:22ID:???echo $referer;
携帯用スクリプトなんですが?mode=sourceを表示した時に前のページで取得したリファラのURLのソースを表示したいんですがどうすればいいでしょうか?
どうしても?mode=sourceの前つまりスクリプト自身のソースを吐くので
0371nobodyさん
2005/12/09(金) 22:04:41ID:Gto+rkho例えば、5文字以上連続して同じ文字が入力された場合、その文字を取り出す。とか。
自分なりに調べてみましたが、それらしい情報は見つからず、、、
自分でもいろいろ考えましたが、ぐるぐるループさせる方法しか浮かびません…。
0374nobodyさん
2005/12/09(金) 22:44:07ID:???同意
>371
>ぐるぐるループさせる方法
それでいいんじゃね
0377nobodyさん
2005/12/10(土) 01:13:39ID:???プログラム経験はflashのactionscriptでショボイゲームが作れる程度です。
よろしくお願いします。
0378nobodyさん
2005/12/10(土) 01:51:28ID:???http://www.php.net/manual/ja/
いやホントに、煽りで無くマジレス。
0380372
2005/12/10(土) 04:55:08ID:???流れは
【A】
1.ユーザが<<URL>>に存在するリンクをたどり クエリmode=source を伴って当該スクリプトにアクセスする
2.当該スクリプトはリンク元をHTTPリファラから取得する
3.当該スクリプトはリンク元のソースを表示する
【B】
1.ユーザが<<URL>>に存在するリンクをたどり クエリmode=source を伴って当該スクリプト1にアクセスする
2.当該スクリプト1はリンク元をHTTPリファラから取得する
3.当該スクリプト1はスクリプト2への遷移を提供する
4.スクリプト2は先ほど取得したリファラを何らかの形で受け継いでいて、<<URL>>のソースを表示する
どっちかだと思うけど。それが判らない。
次に、「ソース」ってのはPHPのソースコードをさすのか
それともHTML(PHPとかの出力)のソースコードをさすのか。これもわからない。
携帯ということだけどキャリアはどこ?ドコモはリファラとれないよ?
0381nobodyさん
2005/12/10(土) 05:06:16ID:???むしろ、こっちに誘導してやってよ。
PHP関連の書籍(但しPHP出版系お断り)第2版
http://pc8.2ch.net/test/read.cgi/php/1117066073/l10
後者です。
他のスクリプト(HTMLソースを表示するページ)に前のページで取得したリファラを送る方法が謎なんですよ。
機種はauです。
リファラを利用したお気に入り規制突破スクリプトを作っていてソース表示をいれようと。
すいません。
前者の方です。
test.phpで前に表示していたページのリファラを取得して表示。
次にソース(ボタン)をクリックするとmode=sourceに移動その時に取得したリファラをそのまま受け渡し。
そしてHTMLソースを表示。
どうにも受け渡しができないんですよ。
0384nobodyさん
2005/12/10(土) 06:58:43ID:???なにがいいたいのかさっぱりわからん
むいてないんじゃない?
0385nobodyさん
2005/12/10(土) 07:30:30ID:???受け渡しが出来ないって渡してないから受け取れないだけだろ
?mode=source&url=$_SERVER['HTTP_REFERER']
で渡したらいいんじゃないの
0386nobodyさん
2005/12/10(土) 07:42:38ID:???/$_SERVER['USER_AGENT']/
を指定したいんですが
モデファイ?4(よく覚えてなくてすいません)
とかいうエラーが出てしまいました。正規表現(()辺り?)の間違いだと思うのですが、どうにかして回避できませんでしょうか?
0388nobodyさん
2005/12/10(土) 10:45:34ID:???0389nobodyさん
2005/12/10(土) 12:26:23ID:???387のいうことももっともだが、
その前に
>モデファイ?4(よく覚えてなくてすいません)
こういうことではいつまでたってもダメじゃん。
エラーが出たらそれが何を意味するか理解するようにしようぜ。
0392nobodyさん
2005/12/10(土) 12:42:01ID:???387はそのまま$_SERVER['USER_AGENT']を指定するのは難しいといいたいんだろう。
ま、エスケープしろってこった。
0393nobodyさん
2005/12/10(土) 12:55:49ID:???おそらくMozilla/4.0の/で正規表現パターンが終わって次の4が修飾子と判断されてエラーになった
>>390
quotemetaしてstr_replace("/", "\/",
すれば出来るけど>>386には無理
そもそも正規表現使う必要あるのか疑問
やりたいことはarray_count_valuesとかじゃないのか
0394nobodyさん
2005/12/10(土) 13:04:59ID:???0396nobodyさん
2005/12/10(土) 14:10:55ID:???0397nobodyさん
2005/12/10(土) 14:30:05ID:???foreach ($w as $t){
$_POST['abc'] = mb_ereg_replace($t,'',$_POST['abc']);
}
こういう感じでpostからの入力文字を制限しようと考えているのですが
どういう訳か$wの最後の配列の文字「う」しか削除されません。理由が
全くわからないのですがヒントを頂けないでしょうか?。
0398386
2005/12/10(土) 14:48:38ID:???0399nobodyさん
2005/12/10(土) 15:08:21ID:???コードには問題がなさそうだからきっと凡ミス
あと、単純な置換なら正規表現関数を使う意味がないぞ
$result = mg_ereg_replace('[あ-う]','',$_POST['abc']);
0400nobodyさん
2005/12/10(土) 16:00:08ID:???print_r($w)してもecho $tしても予想通りの結果がでるしわからないんですよね。
最初は文字コードがsjisの影響なのかと思ってstr_replaceからmb_ereg_replaceに
してみたりしたのですが同じでした(^^; という残骸です。
0401nobodyさん
2005/12/10(土) 16:08:33ID:???どうせこんな感じのミスじゃない?
$input = "あいうえお";
$w = array('あ','い','う');
foreach ($w as $t){
$result = mb_ereg_replace($t,'',$input);
}
echo $result;
0402nobodyさん
2005/12/10(土) 16:15:08ID:???0403nobodyさん
2005/12/10(土) 17:18:45ID:???それも考えたんだけどインとアウトは同じ$aなんですよ(^^;
$a = mb_ereg_replace($t,'',$a);
0404397
2005/12/10(土) 17:25:48ID:???普通だと思うのですが上手く行かない。これは人が作った物に手を加えているので
なにか癖があるのかも知れません。extractなんて使ってるスクリプトですし・・・。
ちゃんとextractを使われる前に手を加えているんですけどね(^^;。
お騒がせしました。
0405nobodyさん
2005/12/10(土) 18:01:06ID:???mb_regex_encoding は確認しましたか?
str_replace で期待通りに動かない場合は
入力データがスクリプトのエンコーディングと違うかも知れません。
0406397
2005/12/10(土) 19:30:32ID:???正しくは
$w = array('あ','い','う');
ではなくて $w を データファイルから拾得していたのです。
ずっとUTFばかり使っていたからsjisが\r\nなのを忘れていました。
最後だけ一致してたのは最後に改行がないからでした(^^;。
ご迷惑をおかけしました(*- -)(*_ _)ペコリ
0407nobodyさん
2005/12/11(日) 03:04:54ID:???画像データも保存できるのでしょうか。
0409nobodyさん
2005/12/11(日) 03:23:49ID:???imageCreateとかの戻り値なら無理だね。
ファイルやDBに保存しておいて、それに関する情報(ファイル名とか)をセッションに保存したらいいんじゃない。
0410nobodyさん
2005/12/11(日) 03:24:01ID:???ああ下らねえよ
0412nobodyさん
2005/12/11(日) 04:24:32ID:???0413nobodyさん
2005/12/11(日) 05:00:28ID:???誘導してやんなきゃわかんねーのかよw
【PHP】下らねぇ質問はここに書き込みやがれpart13
http://pc8.2ch.net/test/read.cgi/php/1132921016/
0414nobodyさん
2005/12/11(日) 05:36:26ID:???0415nobodyさん
2005/12/11(日) 09:46:55ID:???0416nobodyさん
2005/12/11(日) 19:18:41ID:???下のような感じでメール送信してるのですがsubjectが文字化けしてしまいます
$subject = mb_convert_encoding($subject,"iso-2022-jp");
mb_language("Japanese");
mb_send_mail("$sendto","$subject","$message","From: $from")
なぜでしょうか?
0417nobodyさん
2005/12/11(日) 19:35:55ID:XiVVGiBU}
class Parent{
}
こういう風に、親クラスを後に書いてもエラーにならないけど、
class Child extends Parent{
}
class Parent implements Granpa{
}
こういう風に、親クラスにインターフェイスをインプリメントしたとたん、
親→子の順番に書かないとエラーになる。
これって仕様?
0418nobodyさん
2005/12/11(日) 19:44:35ID:???MIMEヘッダにJISとかは使えないのでBase64でエンコードする必要がある。
mb_encode_mimeheader使ってみ。
0419nobodyさん
2005/12/11(日) 19:51:06ID:???仕様だと思う。ParseKitを使えば理由がわかると思うよ。
たしかimplementsがついてるとearly bindingが起こらなかった。・・・のは遠い記憶かもしれない。
0420nobodyさん
2005/12/11(日) 20:06:56ID:???class A {}
class C extends B {}
class B extends A {}
なら大丈夫だけど
class C extends B {}
class B extends A {}
class A {}
だとダメなところを見ると、たぶん2重に先読みはしてくれないってことだと思われ。
むしろ1クラス1ファイルで__autoload使って管理すれば無問題なんだけどね。
0421nobodyさん
2005/12/11(日) 20:48:17ID:???0423nobodyさん
2005/12/11(日) 21:13:58ID:???マニュアルには出来ないって書いてあるから
class A {}
class B extends A {}
class C extends B {}
こういう継承は出来ないと思っていた。出来るんだ。
0424nobodyさん
2005/12/11(日) 21:22:14ID:???0425nobodyさん
2005/12/11(日) 21:31:14ID:???親クラスを同時に2つ継承することはできないよ。
C++とかだと extends A,B ってな感じにやるやつね。
親・子・孫 ってな形はOKよん。
>>424
ググってみれば分かるけど、多重継承って言葉の使われ方の混乱スゴス。
親子孫形式を多段継承とかに統一されていればここまで酷くなかったのかなぁ。
0426nobodyさん
2005/12/11(日) 23:49:23ID:WymzfT31マニュアルは設定しか載ってなくてもっとサンプルが見たいのですが。
0428nobodyさん
2005/12/12(月) 09:51:03ID:mg3yvGfR今使ってるさくらサーバーでPHPのブログを導入しようと思っているのですが
FTPでファイルを転送して、初期設定をしたのですが
エラーメッセージが表示されて実行ができません。
何が悪いのでしょうか?
パーミッションは705で設定しました。
さくらインターネット
http://www.sakura.ad.jp/
導入しようとしたブログ
http://www.netmania.jp/cgi/blog3/
0429428
2005/12/12(月) 09:51:53ID:mg3yvGfRInternal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.
Please contact the server administrator, support@sakura.ad.jp and inform them of the time the error occurred, and anything you might have done that may have caused the error.
More information about this error may be available in the server error log.
0430nobodyさん
2005/12/12(月) 09:58:45ID:???Exciteで訳したよ。
内部サーバーエラー
サーバは、内部エラーかmisconfigurationに出会って、あなたの要求を終了することができませんでした。
サーバアドミニストレータ、 support@sakura.ad.jp に連絡して、誤りを引き起こしたかもしれない誤りが発生した時、およびあなたがしたかもしれないものは何のそれらでも知らせてください。
この誤りに関する詳しい情報はサーバ障害記録で利用可能であるかもしれません。
0432nobodyさん
2005/12/12(月) 10:29:30ID:???つ[More information about this error may be available in the server error log.]
0433nobodyさん
2005/12/12(月) 12:19:35ID:???$arei=array("$var1",・・中略・・,"$var10");
これを再び10個の変数にするにはどうしたらいいんでしょう?
たとえばタブ区切りの文字列なら
list($var1,・・中略・・,$var10)=explode("\t",$arei);
でできますが、配列の中の変数をそれぞれ名前を付けて取り出す方法が
どーにも思いつかないです。
0434nobodyさん
2005/12/12(月) 12:26:02ID:???0436nobodyさん
2005/12/12(月) 13:11:25ID:???0437nobodyさん
2005/12/12(月) 14:15:49ID:???$arei=array("$var1",・・中略・・,"$var10");
この時点で、既に10個の変数として利用可能。
$arei[0] = $var1
$arei[1] = $var2
$arei[2] = $var3
$arei[3] = $var4
$arei[4] = $var5
$arei[5] = $var6
$arei[6] = $var7
$arei[7] = $var8
$arei[8] = $var9
$arei[9] = $var10
0439nobodyさん
2005/12/12(月) 15:02:57ID:???0440nobodyさん
2005/12/12(月) 15:11:13ID:???2.explodeが何を返すかよく判っていない。
3.listは変数に何かを入れる事は判るが、何をどのように入れているかは理解していない。
…かな?
■ このスレッドは過去ログ倉庫に格納されています