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

【PHP】質問スレッドpart31【php】

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2005/11/27(日) 00:07:12ID:eBvjdczp
PHP全般の質問スレです。
【基本ルール】
・新規質問の方は上げてください。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辺り
0359nobodyさん2005/12/09(金) 02:56:48ID:???
>>358さん
使えるものしか使っていないのが一番の原因だとは思いましたが
おっしゃるように$log_lineを調べて、if(!ereg("-", $res)の部分を潰して
書き替えて、なんとか表示されるようになりました。
ご教示ありがとうございました。
0360nobodyさん2005/12/09(金) 03:19:25ID:???
>>341
レン鯖借りればいいじゃん。php動かすのに安いの使ってる方がオカシイ。
0361nobodyさん2005/12/09(金) 04:39:41ID:???
>レン鯖がPHP5に上げてくれるみたいだからPHP4はもうイラネ
>自分でphp5に出来無い時点でダメポ。

この流れだと、自分でサーバーの設定弄れるって事なんじゃないの?
レン鯖でも専鯖でも無い限りそれはムリポw
0362nobodyさん2005/12/09(金) 07:55:26ID:???
>>342
PDO_FETCH_ASSOC

PDO::FETCH_ASSOC
0363nobodyさん2005/12/09(金) 09:15:36ID:???
>>362,342
http://www.php.net/README_UPGRADE_51.php#extensions2
これだな。
0364nobodyさん2005/12/09(金) 14:13:07ID:???
>>362
日本語オンラインマニュアルの更新が遅いんだよな
最新のchm版マニュアルは定数の部分がPDO::〜に変更されていた
0365nobodyさん2005/12/09(金) 14:17:30ID:???
PDO::FETCH_ASSOC

PDO_FETCH_ASSOC

PDO::FETCH_ASSOC
0366nobodyさん2005/12/09(金) 14:24:52ID:???
楽天のシステムはPHP3で書かれているらしい
0367nobodyさん2005/12/09(金) 14:26:23ID:???
工エエェェ(´д`)ェェエエ工
0368nobodyさん2005/12/09(金) 15:00:52ID:???
>>353
全然意味がわからん
0369nobodyさん2005/12/09(金) 16:50:56ID:???
>>368
同意
0370nobodyさん2005/12/09(金) 21:15:22ID:???
$referer = $_SERVER['HTTP_REFERER'];
echo $referer;
携帯用スクリプトなんですが?mode=sourceを表示した時に前のページで取得したリファラのURLのソースを表示したいんですがどうすればいいでしょうか?
どうしても?mode=sourceの前つまりスクリプト自身のソースを吐くので
0371nobodyさん2005/12/09(金) 22:04:41ID:Gto+rkho
正規表現なり何なりで、連続する同じ文字を検出することは可能ですか?
例えば、5文字以上連続して同じ文字が入力された場合、その文字を取り出す。とか。
自分なりに調べてみましたが、それらしい情報は見つからず、、、
自分でもいろいろ考えましたが、ぐるぐるループさせる方法しか浮かびません…。
0372nobodyさん2005/12/09(金) 22:39:46ID:???
>>370
意味がわからない。
0373nobodyさん2005/12/09(金) 22:42:01ID:???
>>372
同意
0374nobodyさん2005/12/09(金) 22:44:07ID:???
>373
同意


>371
>ぐるぐるループさせる方法

それでいいんじゃね
0375nobodyさん2005/12/10(土) 00:07:34ID:???
>>371
preg_match('/(.)\1{4,}/',$str,$matches);
03763712005/12/10(土) 00:24:34ID:???
>>375
ありがとうございます!
このような書き方があったんですね。勉強になりました。
0377nobodyさん2005/12/10(土) 01:13:39ID:???
phpを勉強しようと思うので、入門用の本を紹介して下さい。
プログラム経験はflashのactionscriptでショボイゲームが作れる程度です。
よろしくお願いします。
0378nobodyさん2005/12/10(土) 01:51:28ID:???
>>377
http://www.php.net/manual/ja/
いやホントに、煽りで無くマジレス。
0379nobodyさん2005/12/10(土) 04:39:54ID:???
>>377
ついでにお前はくだ質スレの存在を知れ。
03803722005/12/10(土) 04:55:08ID:???
>>370
流れは

【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:???
>>379
むしろ、こっちに誘導してやってよ。

PHP関連の書籍(但しPHP出版系お断り)第2版
http://pc8.2ch.net/test/read.cgi/php/1117066073/l10
0382 ◆HewaraiHpQ 2005/12/10(土) 06:16:01ID:???
>>380
後者です。
他のスクリプト(HTMLソースを表示するページ)に前のページで取得したリファラを送る方法が謎なんですよ。
機種はauです。
リファラを利用したお気に入り規制突破スクリプトを作っていてソース表示をいれようと。
0383 ◆HewaraiHpQ 2005/12/10(土) 06:23:28ID:???
>>380
すいません。
前者の方です。
test.phpで前に表示していたページのリファラを取得して表示。
次にソース(ボタン)をクリックするとmode=sourceに移動その時に取得したリファラをそのまま受け渡し。
そしてHTMLソースを表示。
どうにも受け渡しができないんですよ。
0384nobodyさん2005/12/10(土) 06:58:43ID:???
>383
なにがいいたいのかさっぱりわからん
むいてないんじゃない?
0385nobodyさん2005/12/10(土) 07:30:30ID:???
>>383
受け渡しが出来ないって渡してないから受け取れないだけだろ
?mode=source&url=$_SERVER['HTTP_REFERER']
で渡したらいいんじゃないの
0386nobodyさん2005/12/10(土) 07:42:38ID:???
preg_grepの第一引数に
/$_SERVER['USER_AGENT']/
を指定したいんですが
モデファイ?4(よく覚えてなくてすいません)
とかいうエラーが出てしまいました。正規表現(()辺り?)の間違いだと思うのですが、どうにかして回避できませんでしょうか?
0387nobodyさん2005/12/10(土) 10:43:31ID:???
>>386
UAには普通"/"や"."や"-"が含まれるから正規表現のパターンにするには無理があるだろう。
0388nobodyさん2005/12/10(土) 10:45:34ID:???
quotemeta
0389nobodyさん2005/12/10(土) 12:26:23ID:???
>>386
387のいうことももっともだが、
その前に
>モデファイ?4(よく覚えてなくてすいません)
こういうことではいつまでたってもダメじゃん。
エラーが出たらそれが何を意味するか理解するようにしようぜ。
0390nobodyさん2005/12/10(土) 12:34:48ID:???
>>387
???別に無理でもなんでもないんだが…
03913862005/12/10(土) 12:41:17ID:???
>>387-390
返事ありがとうございます。とりあえずquotemetaとエラー文でググってみます。
0392nobodyさん2005/12/10(土) 12:42:01ID:???
>>390
387はそのまま$_SERVER['USER_AGENT']を指定するのは難しいといいたいんだろう。
ま、エスケープしろってこった。
0393nobodyさん2005/12/10(土) 12:55:49ID:???
>>386
おそらくMozilla/4.0の/で正規表現パターンが終わって次の4が修飾子と判断されてエラーになった
>>390
quotemetaしてstr_replace("/", "\/",
すれば出来るけど>>386には無理
そもそも正規表現使う必要あるのか疑問
やりたいことはarray_count_valuesとかじゃないのか
0394nobodyさん2005/12/10(土) 13:04:59ID:???
preg_qoute($str, '/')
03953932005/12/10(土) 13:07:38ID:???
>>394
にゃるほど
そんな関数があったのね
0396nobodyさん2005/12/10(土) 14:10:55ID:???
これがPHPクオリティ
0397nobodyさん2005/12/10(土) 14:30:05ID:???
$w = array('あ','い','う');

foreach ($w as $t){
$_POST['abc'] = mb_ereg_replace($t,'',$_POST['abc']);
}

こういう感じでpostからの入力文字を制限しようと考えているのですが
どういう訳か$wの最後の配列の文字「う」しか削除されません。理由が
全くわからないのですがヒントを頂けないでしょうか?。
03983862005/12/10(土) 14:48:38ID:???
なるほどいろんな関数がありますね。参考になりました、ありがとうございます。
0399nobodyさん2005/12/10(土) 15:08:21ID:???
>>397
コードには問題がなさそうだからきっと凡ミス

あと、単純な置換なら正規表現関数を使う意味がないぞ
$result = mg_ereg_replace('[あ-う]','',$_POST['abc']);
0400nobodyさん2005/12/10(土) 16:00:08ID:???
>>399
print_r($w)してもecho $tしても予想通りの結果がでるしわからないんですよね。
最初は文字コードがsjisの影響なのかと思ってstr_replaceからmb_ereg_replaceに
してみたりしたのですが同じでした(^^; という残骸です。
0401nobodyさん2005/12/10(土) 16:08:33ID:???
>>400
どうせこんな感じのミスじゃない?
$input = "あいうえお";
$w = array('あ','い','う');

foreach ($w as $t){
$result = mb_ereg_replace($t,'',$input);
}
echo $result;
0402nobodyさん2005/12/10(土) 16:15:08ID:???
(゚∀´)bナイス エスパリング
0403nobodyさん2005/12/10(土) 17:18:45ID:???
>>401
それも考えたんだけどインとアウトは同じ$aなんですよ(^^;

$a = mb_ereg_replace($t,'',$a);
04043972005/12/10(土) 17:25:48ID:???
結局、$_POST['abc']を後で使っているのですから置き換わるなら全て置き換わるのが
普通だと思うのですが上手く行かない。これは人が作った物に手を加えているので
なにか癖があるのかも知れません。extractなんて使ってるスクリプトですし・・・。
ちゃんとextractを使われる前に手を加えているんですけどね(^^;。

お騒がせしました。
0405nobodyさん2005/12/10(土) 18:01:06ID:???
>>397
mb_regex_encoding は確認しましたか?
str_replace で期待通りに動かない場合は
入力データがスクリプトのエンコーディングと違うかも知れません。
04063972005/12/10(土) 19:30:32ID:???
うはっ、(/ω\)恥ずかしい

正しくは
$w = array('あ','い','う');
ではなくて $w を データファイルから拾得していたのです。
ずっとUTFばかり使っていたからsjisが\r\nなのを忘れていました。
最後だけ一致してたのは最後に改行がないからでした(^^;。

ご迷惑をおかけしました(*- -)(*_ _)ペコリ
0407nobodyさん2005/12/11(日) 03:04:54ID:???
セッションってどのくらい容量を保存できますか?
画像データも保存できるのでしょうか。
0408nobodyさん2005/12/11(日) 03:18:46ID:???
>>407
ハァ??
0409nobodyさん2005/12/11(日) 03:23:49ID:???
>>407
imageCreateとかの戻り値なら無理だね。
ファイルやDBに保存しておいて、それに関する情報(ファイル名とか)をセッションに保存したらいいんじゃない。
0410nobodyさん2005/12/11(日) 03:24:01ID:???
下らねえな
ああ下らねえよ
0411nobodyさん2005/12/11(日) 03:30:43ID:???
>>408 >>410
くだらないレスはくだしつでしてね。
0412nobodyさん2005/12/11(日) 04:24:32ID:???
レス番間違ってるぞ
0413nobodyさん2005/12/11(日) 05:00:28ID:???
>>412
誘導してやんなきゃわかんねーのかよw

【PHP】下らねぇ質問はここに書き込みやがれpart13
http://pc8.2ch.net/test/read.cgi/php/1132921016/
0414nobodyさん2005/12/11(日) 05:36:26ID:???
なんかDATが壊れてる奴がいるな。
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 Child extends Parent{
}
class Parent{
}
こういう風に、親クラスを後に書いてもエラーにならないけど、
class Child extends Parent{
}
class Parent implements Granpa{
}
こういう風に、親クラスにインターフェイスをインプリメントしたとたん、
親→子の順番に書かないとエラーになる。
これって仕様?
0418nobodyさん2005/12/11(日) 19:44:35ID:???
>>416
MIMEヘッダにJISとかは使えないのでBase64でエンコードする必要がある。
mb_encode_mimeheader使ってみ。
0419nobodyさん2005/12/11(日) 19:51:06ID:???
>>417
仕様だと思う。ParseKitを使えば理由がわかると思うよ。
たしかimplementsがついてるとearly bindingが起こらなかった。・・・のは遠い記憶かもしれない。
0420nobodyさん2005/12/11(日) 20:06:56ID:???
>>417
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:???
PHPは多重継承は出来ないはずだけど
0422nobodyさん2005/12/11(日) 21:06:51ID:???
>>421
だけど・・・?
逆接の接続詞だから、「実はできるんだ」とかくるのかな?
0423nobodyさん2005/12/11(日) 21:13:58ID:???
いや。
マニュアルには出来ないって書いてあるから
class A {}
class B extends A {}
class C extends B {}
こういう継承は出来ないと思っていた。出来るんだ。
0424nobodyさん2005/12/11(日) 21:22:14ID:???
はい多重継承の意味100回ググれーここ試験に出るぞー
0425nobodyさん2005/12/11(日) 21:31:14ID:???
>>423
親クラスを同時に2つ継承することはできないよ。
C++とかだと extends A,B ってな感じにやるやつね。
親・子・孫 ってな形はOKよん。

>>424
ググってみれば分かるけど、多重継承って言葉の使われ方の混乱スゴス。
親子孫形式を多段継承とかに統一されていればここまで酷くなかったのかなぁ。
0426nobodyさん2005/12/11(日) 23:49:23ID:WymzfT31
JAVAとの連携を詳しく扱ったサイトとか無いでしょうか?
マニュアルは設定しか載ってなくてもっとサンプルが見たいのですが。
0427nobodyさん2005/12/12(月) 05:24:04ID:???
>>426
マニュアルのサンプルで十分じゃない。
それ以降はJava自体の話だし。
0428nobodyさん2005/12/12(月) 09:51:03ID:mg3yvGfR
質問があります。
今使ってるさくらサーバーでPHPのブログを導入しようと思っているのですが
FTPでファイルを転送して、初期設定をしたのですが
エラーメッセージが表示されて実行ができません。
何が悪いのでしょうか?

パーミッションは705で設定しました。

さくらインターネット
http://www.sakura.ad.jp/
導入しようとしたブログ
http://www.netmania.jp/cgi/blog3/

04294282005/12/12(月) 09:51:53ID:mg3yvGfR
エラーメッセージ

Internal 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:???
>>428
Exciteで訳したよ。

内部サーバーエラー
サーバは、内部エラーかmisconfigurationに出会って、あなたの要求を終了することができませんでした。
サーバアドミニストレータ、 support@sakura.ad.jp に連絡して、誤りを引き起こしたかもしれない誤りが発生した時、およびあなたがしたかもしれないものは何のそれらでも知らせてください。

この誤りに関する詳しい情報はサーバ障害記録で利用可能であるかもしれません。
0431nobodyさん2005/12/12(月) 10:26:36ID:???
>>425
私も勘違いしていたので
非常に勉強になりました。
0432nobodyさん2005/12/12(月) 10:29:30ID:???
>>429

つ[More information about this error may be available in the server error log.]
0433nobodyさん2005/12/12(月) 12:19:35ID:???
ある固有名詞をもつ変数を10個、ひとつの配列に入れたとして
$arei=array("$var1",・・中略・・,"$var10");

これを再び10個の変数にするにはどうしたらいいんでしょう?
たとえばタブ区切りの文字列なら

list($var1,・・中略・・,$var10)=explode("\t",$arei);

でできますが、配列の中の変数をそれぞれ名前を付けて取り出す方法が
どーにも思いつかないです。
0434nobodyさん2005/12/12(月) 12:26:02ID:???
お前の目は節穴か!
04353972005/12/12(月) 12:31:57ID:???
>>433
echo $arei[0];
list($a,$b,$c.....) = $arei;
echo $a;
0436nobodyさん2005/12/12(月) 13:11:25ID:???
explodeの返値はarray
0437nobodyさん2005/12/12(月) 14:15:49ID:???
>>433
$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

0438nobodyさん2005/12/12(月) 14:59:05ID:???
(,,゚Д゚)∩<質問
>>433の脳の構造が知りたいです・・・
0439nobodyさん2005/12/12(月) 15:02:57ID:???
うーん、エスパーかなぁ
0440nobodyさん2005/12/12(月) 15:11:13ID:???
1.配列の概念を理解していない。
2.explodeが何を返すかよく判っていない。
3.listは変数に何かを入れる事は判るが、何をどのように入れているかは理解していない。

…かな?
04414332005/12/12(月) 16:19:08ID:???
すまん説明ミスだった。

$var1とかは配列です。配列の中の配列が、$arei[0][1]みたいに扱うのがいやで
配列から配列を全部取り出したいんです。
04424332005/12/12(月) 16:22:23ID:???
・・・ああ
>>435でいいような。スマソ、ちょっと眠い。
0443nobodyさん2005/12/12(月) 16:29:14ID:???
>>441
やっぱり、>>440の(1)だった…
0444nobodyさん2005/12/12(月) 16:34:22ID:???
>>443
いや、1-3全部
0445nobodyさん2005/12/12(月) 16:48:53ID:???
>$arei[0][1]みたいに扱うのがいやで
そんな理由かよ
0446nobodyさん2005/12/12(月) 17:04:58ID:???
>>428
取り合えず、FTPのファイル転送で文字コードを
変換してしまってないか確認してみれ。
0447nobodyさん2005/12/12(月) 23:38:20ID:???
おまいにはサクラは敷居が高い。
もっと廚でも使える鯖業者と再契約が必要。
0448nobodyさん2005/12/13(火) 00:20:06ID:???
>>447
なにそれ?難易度の高い鯖とかあんの?
0449nobodyさん2005/12/13(火) 00:22:09ID:???
自分が使っている=難易度が高い
PHP の思想だね
0450nobodyさん2005/12/13(火) 10:37:41ID:???
正直428にPHPは無理でしょ。
HTMLとか画像うpが精一杯。

PHPは業者にでも依頼しな。
0451nobodyさん2005/12/13(火) 16:11:09ID:vrSu5coJ
while ($row = mysql_fetch_array($result)) {

この文の意味がいまいちわからないのですが、
whileの()内って条件式ではないですよね?
(条件式なら $row==になるはずですよね)

$row = mysql_fetch_array($result);
while ($row) {
でもOKなんでしょうか?
0452nobodyさん2005/12/13(火) 16:21:20ID:???
>>451
if ($i=0; $i<mysql_num_rows($result); $i++){
}
ということだよ。
0453nobodyさん2005/12/13(火) 16:30:44ID:???
いや、条件式だろ。
真である限りループしろって構文なんだから。
0454nobodyさん2005/12/13(火) 16:34:46ID:???
数値の 0
空文字列
null
false

それ以外全部 真
0455nobodyさん2005/12/13(火) 16:37:39ID:???
>>451
>$row = mysql_fetch_array($result);
>while ($row) {
これだと無限ループ
0456nobodyさん2005/12/13(火) 16:44:08ID:???
>>451
「$row = 〜」の部分はそれ自体も値を持つってことを理解しましょう。
$x = ($row = 〜); ってこともできますがな(←この場合のカッコはなくても同じ)。
while ($row = 〜)ってのは「$row = mysql_fetch_array(〜)」の部分全体がmysql_fetch_arrayの戻り値になる。
戻り値はマニュアルに書いてあるよね。

>>454
他にも
array()
"0"
なんてのもあるのがPHPクオリティ。
しかも
"\0"
は真なのもPHPクオリティ。
0457nobodyさん2005/12/13(火) 17:31:10ID:???
それはPerlクオリティを引き継いだだけ
0458nobodyさん2005/12/13(火) 17:32:43ID:???
>>452
そこforだろ
■ このスレッドは過去ログ倉庫に格納されています