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

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

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん04/06/14 14:36ID:???
・PHP全般の質問スレです。
・新規質問の方は上げてください。age進行でお願いします。
・質問する際には環境も明記。
・正しい日本語で分かりやすく。
・レスがつかないからって逆切れする厨お断り。
・解決しなくてもこたえてもらったら礼を。


■本家
 http://www.php.net/

■日本 PHP ユーザ会
 http://www.php.gr.jp/

■PHP マニュアル
 http://www.php.net/manual/ja/

■PEAR マニュアル
 http://pear.php.net/manual/ja/

過去スレ, 関連スレ等>>2-4


抜けているものがあったら補足願います
055254804/07/02 22:32ID:???
abでもだめでした。
055354404/07/02 22:41ID:proF8LyP
>>549
ありがとうございます。
難しそうですが、やってみます。
055454804/07/02 22:50ID:???
なぜか、出来ました。
str_replaceで。
055554404/07/02 23:16ID:proF8LyP
$a = preg_replace_callback ( "/^.*●.*▲.*$/" , "/^.*●.*×.*$/" , $a ) ;
return $a ;

こんな感じでやってみたら「第二引数が足りない」という趣旨のエラー
メッセージが出たのですが、どうしたらいいんでしょうか?
preg_replace_callback 関数の第二引数に他の関数かなにかを入れ
ないといけないのでしょうか?
055654904/07/02 23:34ID:???
>>555
たのむからマニュアルぐらい読んでよ。。。
ttp://jp.php.net/manual/ja/function.preg-replace-callback.php

お前さんのやりたいことはこのコードでできるはず。
function hoge($m) {
return $m[1] . str_replace("▲", "×", $m[2]);
}
$a = preg_replace_callback("/^(.*●)(.*▲.*)$/", "hoge", $a);

●や▲が半角英数字じゃないと期待通りには動かないこともあります。
055754404/07/02 23:45ID:???
>>556
どうもすいません。ありがとうございます。
0558nobodyさん04/07/03 00:04ID:???
>>556
"最初の●より後に▲があったら全て×に置き換える" ということなので、それでは
$a = 'test●▲●▲';
の時にはうまくいかないような・・・。

単純な置き換えだったら、preg_replace_callback() を使わなくても e オプションを使えば
いいような気がするので、以下のような感じでどう?

$a = preg_replace("/^(.*?●)(.*▲.*)$/e", '"\\1" . str_replace("▲", "×", "\\2")', $a);

マルチバイトを考慮したら mb_ereg_replace() を使うといいと思うけど。

$a = mb_ereg_replace("^(.*?●)(.*▲.*)$", '"\\1" . str_replace("▲", "×", "\\2")', $a, "e");
0559nobodyさん04/07/03 00:14ID:???
>>558
なるほどー。そういう手がありましたか。
自分はマルチバイトを含む文字列をトリッキーな置換するときは
UTF-8決め打ちでpreg_replace_callbackでuオプションを使ってますが
将来mb_ereg_replace_callback関数ができたらそっちも使ってみたい。
あとpreg_*でUnicodeプロパティーのサポートも希望したいですね。
0560nobodyさん04/07/03 01:02ID:???
DoCoMo/2.0 YYYY(c10;serXXXXXXXXXXXXXXX;
こっからserXXXXXXXXXXXXXXXだけを取り出したいのだがどうすればいい?
問題はYYYYが必ず同じ長さではない。
つまりser以降指定の文字数を得たいのだが…
0561nobodyさん04/07/03 01:07ID:???
>>560
すぐ上で正規表現がでてきてるのに、そんなこと聞きますか...
0562nobodyさん04/07/03 02:36ID:???
正規表現を使うまでもない。文字列関数で
0563nobodyさん04/07/03 02:59ID:???
>>561
スマン、正規表現でがんがったんだがさっぱりわからん、、、。

>>562
それも考えてみたんだが問題が。。。
FOMA
DoCoMo/2.0 N2001(c10;serXXXXXXXXXXXXXXX; iccxxxxxxxxxxxxxxxxxxxx)
PDC
DoCoMo/1.0/X503i/c10/ser***********
こんな風に違うんだよな…。
さらにVodaなんか
http://www.dp.j-phone.com/dp/tool_dl/web/useragent.php
J-PHONE/4.0/J-SH51/SN************ SH/0001a Profile/MIDP-1.0 Configuration/CLDC-1.0
Ext-Profile/JSCL-1.1.0
0564nobodyさん04/07/03 05:38ID:???
全部に対応する正規表現を書くより
機種によって振り分けた方がいいんじゃな?。
0565nobodyさん04/07/03 07:59ID:???
>>563
正規表現の書き方がわからんのなら、正規表現スレで抽出条件を詳しく書いて聞けばいい。
とりあえずDoCoMoの分だと、serに続く文字列で ; もしくは行末までって条件でいいのなら
(ser[^;$]+)
0566てふてふ04/07/03 11:22ID:Upkf89lK
すみません。質問です。phpdev5をwindowsXPにインストールして
日本語の文字化けがおきてる方っていませんか?
0567nobodyさん04/07/03 16:10ID:???
私も文字化けおきまくったのでPHPは捨てました。
0568nobodyさん04/07/03 16:52ID:wzmmIfWr
PHPで、自分のファイルの文字コードを参照するいい方法はありますか?
そのままファイル自体を読み込んで調べるしかないのでしょうか?
0569nobodyさん04/07/03 17:00ID:???
ファイルを読まずして文字コードを知れるか?
0570nobodyさん04/07/03 17:17ID:???
*参照*する以上、読まざるを得ないね。
*自分の*ファイルなんだから、PHPでそのファイルを読まなくても知る術はあるけど。
0571nobodyさん04/07/03 18:33ID:n3s5B9BG
http://www.aardvarkind.com/


ここのPHPの詳細おねがいします。英語読めません。
0572nobodyさん04/07/03 18:51ID:???
>>571
読めなかったら勉強するか翻訳サイトでも利用しろ
0573nobodyさん04/07/03 20:57ID:???
>>568
$encoding = mb_detect_encoding(file_get_contents($_SERVER['SCRIPT_FILENAME']));
0574>>571 です04/07/03 21:50ID:n3s5B9BG
>>572
ごめんなさい
0575nobodyさん04/07/03 22:28ID:???
>>573

うおーっ、ありがとうございます!!mm
mb_detect_encodingですか、勉強になりました。
0576nobodyさん04/07/04 00:34ID:fnOHrUgA
jcode.phpを使ってメールフォームを作ってるんだけど、
届いたメールの題名が文字化けします。

題名部分は $title = JcodeConvert("題名", 0, 3); で、
文字コード指定は1,2,3どれも化けます。
環境は、Win XP Pro + Apache + PHP4.2

どこがいけないの?
0577nobodyさん04/07/04 00:49ID:???
573の思考レベルと575の反応に驚愕した。
脳ミソの変わりにくらげとか入ってないか調べたい。
0578nobodyさん04/07/04 01:22ID:???
>>576
メールの件名は特別だから。
詳細をググって調べるべし。
↓と同じ感じでjcodeつかってできるようにがんがれ。
$title = "件名";
$title = "=?iso-2022-jp?B?" . base64_encode(i18n_convert($title, "JIS")) ."?=";
057957604/07/04 01:49ID:???
>>578
以下2行の追加で直りました。

$title = base64_encode($title);
$title = "=?iso-2022-jp?B?" . $title . "?=";

ありがとうございました!
0580nobodyさん04/07/04 06:26ID:???
>>573は釣りだろ。間違ってはいないけど、
「100円のものを1000個買いました。全部でいくらですか」
という問題を100を1000回足して答えを出すのに近いな
0581nobodyさん04/07/04 07:41ID:???
例えがおかしい。
釣りか?
なぜネストの話が
つーかALUでは加算の繰り返(ry
0582nobodyさん04/07/05 10:41ID:???
$encoding = mb_detect_encoding('美乳');
0583nobodyさん04/07/05 13:28ID:???
美乳コードキタ━━━━━━(゚∀゚)━━━━━━!!!!
0584nobodyさん04/07/05 16:02ID:???
<?php
$LV3 = $LV2 - $LV
$STR3 = ($STR2 - $STR) / $LV3;
$CON3 = ($CON2 - $CON) / $LV3;
$DEX3 = ($DEX2 - $DEX) / $LV3;
$INT3 = ($INT2 - $INT) / $LV3;
$LUCK3 = ($LUCK2 - $LUCK) / $LV3;
$CHA3 = ($CHA2 - $CHA) / $LV3;
?>

↑
Parse error: parse error, unexpected T_VARIABLE

と出るのでしょうが・・・
T_VARIABLEというのは何でしょうか?
0585nobodyさん04/07/05 16:05ID:???
>>584
$LV3 = $LV2 - $LV
セミコロンがないです。
0586nobodyさん04/07/05 16:06ID:???
だぁぁ!しまった!こんな初歩的なミスを・・・
>>585様有難うございます><
058758404/07/05 16:09ID:???
教えて君すみません・・・
Division by zero in とはどういう意味なのでしょうか・・・ガクガクブルブル
0588nobodyさん04/07/05 16:11ID:???
0で割っただろ!
それくらいの英語読め
0589nobodyさん04/07/05 16:14ID:???
あれ?おかしいな・・・
$LV2に8、$LVに4入れても同じエラーが・・・
0590nobodyさん04/07/05 16:22ID:???
LV3の中身を確認しながら実行しれ
確認の仕方はマニュアル読んで調べろ
0591nobodyさん04/07/05 16:30ID:???
if($LV2 = 0 or $LV = 0){
print "レベルが入力されていません。";

}else if($STR2 < $STR or $CON2 < $CON or $DEX2 < $DEX or $INT2 < $INT or $LUCK2 < $LUCK or $CHA2 < $CHA){
print "入力した値がおかしいです。";

}else{

}

これを使ったあと全部に0が入ってた〜(なぜだ
0592nobodyさん04/07/05 16:34ID:???
>>591
あはははは。
0593nobodyさん04/07/05 16:36ID:???
某ゲームの作ってるんだが・・・
ttp://cgi.f44.aaacafe.ne.jp/~phpworld/002/seityo.php

値を出した後、ページが表示されない・・・
ソースを見ればHTMLがあるのに
0594nobodyさん04/07/05 17:13ID:???
>>591
最初の行
0595nobodyさん04/07/05 17:14ID:???
if($LV2 = 0 or $LV = 0){
もし$LV2=0で$LV=0なら じゃないんですか!?
0596nobodyさん04/07/05 17:18ID:???
☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
★                                             ☆
☆ 質問者が返信する時は名前欄に「最初に質問したレス番号」を入れろ ★
★                                             ☆
☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

>>595
お前はアホか・・・
$LV2=0、$LV=0にして>>584の計算をしてみろよ
0597nobodyさん04/07/05 17:20ID:???
>>595
"で"でつなぐならand
日本語の勉強もしなさい
0598nobodyさん04/07/05 17:28ID:???
>>584
比較演算子が間違ってますよ
くだらねー
0599nobodyさん04/07/05 17:31ID:???
>>593
<TITLE><TITLE>
を
<TITLE></TITLE>
とすれば解決。
何が原因が分からない時は問題の絞込みってやつをするといいyp。
0600nobodyさん04/07/05 17:56ID:???
今日はおもしろいですね
0601nobodyさん04/07/05 18:10ID:???
>>597
待て
0602nobodyさん04/07/05 18:19ID:???
っていうか、
>>584
>>587
>>591
>>593
が同一だったのか。
0603nobodyさん04/07/05 20:00ID:???
>>595
if文の時は == にしないとダメなんじゃなかったっけ??
0604nobodyさん04/07/05 21:01ID:???
「if文の時は」とか意味不明なことを言うなよな。

>>595
= は代入演算子だから比較の意味では使えない。
比較には == や === などを使う。詳しくは下記を読め。
http://www.php.net/manual/ja/language.operators.comparison.php
http://www.php.net/manual/ja/language.operators.assignment.php
0605nobodyさん04/07/05 21:01ID:???
>>603
if文というよりも、比較演算子'=='と代入演算子'='は別物。
0606nobodyさん04/07/05 21:02ID:???
一時間後でかぶるなYO ヽ(`Д´)ノ ウワァァン!!
0607nobodyさん04/07/05 21:07ID:???
おい!もまいら!
unexpected T_IF
ってなんだYO!
0608nobodyさん04/07/05 21:18ID:???
今日は変なやつが一匹紛れ込んでるな。
0609nobodyさん04/07/05 21:25ID:???
>>607
ファイルに保存されないぽ
これのエラーを直せたら教えてやる


if($action == "action"){
if(($NAME != "") && ($COMMENT != "")){
$NAME = htmlspecialchars($NAME);
$MAIL = htmlspecialchars($MAIL);
$COMMENT = htmlspecialchars($COMMENT);
$COMMENT = nl2br($COMMENT);
$COMMENT = str_replace("\r", "", $COMMENT);
$COMMENT = str_replace("\n", "", $COMMENT);
$input_msg = implode(",", array($NAME,$MAIL,$COMMENT,$time,$host));
$message = file($data);
$fp = fopen($data, "w"); //書き込みモードでファイルを開く
rewind($fp);
fputs($fp, "$input_msg\n");
if($data_max <= sizeof($message))
$msg_num = $data_max - 1;
else
$msg_num = sizeof($message);
for($i = 0; $i < $msg_num; $i++){
fputs($fp, $message[$i]);
}
fclose($fp);
unset($message);
}
}
061060904/07/05 21:30ID:???
スマン、普通にアホなミスしとったわい・・・
fputs($fp, "$input_msg\n");
これで保存したんだがデータが上書きされる・・・
0611nobodyさん04/07/05 21:43ID:dk5OZx2a
setcookieで書き込みはできるんですが
消す場合はどうしたらいいのでしょうか?
0612nobodyさん04/07/05 21:45ID:???
>>610
>$fp = fopen($data, "w");
あなたの書いた通りに動いているだけです。
PHPマニュアルのfopenのページをご覧あれ。
0613nobodyさん04/07/05 21:46ID:???
>>611
そんな時のためのマニュアルですよ?
0614nobodyさん04/07/05 21:47ID:???
>>603
もうちょっと勉強しようぜ
0615nobodyさん04/07/05 21:51ID:???
CGIでフレームがないけどフレームみたいなページできたよね?
あれってPHPでもできんのけ?
0616nobodyさん04/07/05 21:52ID:???
>>609
>fputs($fp, $message[$i]);
上書きされるのはwriteでファイル開いてるんだから当然として
とりあえず改行コードが抜けているぞ。
0617nobodyさん04/07/05 21:57ID:???
>>615
JavaのSiteMeshみたいな?
できるかできないかでいえば「できる」けど書くのが面倒なら
そのCGIに任意のHTMLやPHPスクリプトを読み込ませてもいいんじゃない?
プロキシみたいなもんで、ブラウザの代わりにURIにアクセスして
レスポンスボディをレイアウトし直したり、リンクのURIを書き換えたりしてるだけだと思うから。
0618nobodyさん04/07/05 21:58ID:???
T_VARIABLE や T_IF の意味がわからない人は

「PHP まぬある 付録 P. パーサトークンの一覧」
ttp://www.php.net/manual/ja/tokens.php

を読んでけれ。

"Parse error: parse error, unexpected T_VARIABLE" などという
エラーが表示された場合は、「私ってば PHP の構文解析をして
いるパーサですが、あなたの書いたソースを読んだら構文解析
に失敗しますた。予期せぬ位置に変数が表れたわよ。」と読む。

大抵の場合、パースエラーの出た変数の手前に問題があって、
セミコロン忘れてますた。括弧を閉じ忘れてますた。とかそういう
ことだたーりする。


だと思う。
061961804/07/05 22:04ID:???
「誤」
>大抵の場合、パースエラーの出た変数の手前に問題があって、
「正」
大抵の場合、パースエラーの出たイ "トークン" の手前に問題があって、

マチガエタ。サヨウナラ。サガサナイデクラハイ。
0620nobodyさん04/07/05 22:07ID:???
掲示板の多重投稿拒否はクッキー使わないとムリかな?
0621nobodyさん04/07/05 22:20ID:???
>>618
しってるよばーかマヌケ

>>620
スレとかんけーねーよ無能
0622nobodyさん04/07/05 23:00ID:???
>>620
多重投稿"ミス"なら、投稿履歴と照らし合わせて
「多重だったら」という処理をすることでもいい。
投稿履歴にはhiddenでユニークな投稿キーを埋め込んでおいて、
それを履歴リストに残して多重チェックするのが普通かな。
履歴リストの分量や、Webブラウザのキャッシュに入力フォームが
残らないようにするとか、細かいところは工夫してください。
0623nobodyさん04/07/05 23:37ID:???
form action="{$_SERVER['PHP_SELF']}"型の掲示板スクリプトで、
投稿後にリロードして再投稿するミスを防ぐなら、header("Location {$_SERVER['PHP_SELF']}")
で同一ページに飛ばすテクもある。
062462004/07/05 23:58ID:???
>>622-623
難しそうだったので表示と書き込みをPHPごとにわけますた・・・
あり><
062562004/07/06 00:16ID:???
これから出来たプログラムはここへ載せていくのでよろ><
ttp://cgi.f44.aaacafe.ne.jp/~phpworld/
0626nobodyさん04/07/06 00:25ID:???
それみろ馬鹿タレ供
0627nobodyさん04/07/06 01:20ID:???
>>623
HTTP仕様ぐらい準拠しようよ。
0628nobodyさん04/07/06 01:34ID:???
>>625
もっとがんがれ
0629nobodyさん04/07/06 02:02ID:???
>>625
phpworld/というアカウントにワラタ
随分と大きく出たものだw
0630nobodyさん04/07/06 03:48ID:???
winXPでApache2+phpモジュールな環境を作ろうと思ってます
すでにApache2はインストール済みなのでPHP4.3.7のWinバイナリをインストーラーの方でe:\phpにインストール
http://www.php.net/manual/ja/install.apache2.php に従って
php4ts.dllをwindows/system32に移動
LoadModule php4_module e:/php/sapi/php4apache2.dll
AddType application/x-httpd-php .php
をhttpd.confに追加しましたがApacheを起動しようとすると
Apache.exe: module "c:\php4build\snap\sapi\apache2filter\sapi_apache2.c" is not compatible with this
version of Apache (found 20020628, need 20020903).
Please contact the vendor for the correct version.
というエラーが出てしまいます。
そもそも c:\php4build\snap\sapi\apache2filter\sapi_apache2.c なんでパスは存在しないのです
LoadModuleの部分をコメントアウトするとApacheは起動します
原因に心当たりのあるかたいらっしゃいますか?
php4.3.7 Apache2.0.43です
0631nobodyさん04/07/06 04:28ID:???
>>630
>Apache2.0.43
が古くて、最近のSAPIの仕様とは違ってるんじゃないの?
Apche2.0.50+PHP4.3.7でやってみな。
0632nobodyさん04/07/06 07:53ID:???
for文を用いてIDチェックしたいんだが
for文から抜け出すことは可能だろうか・・・
0633nobodyさん04/07/06 08:02ID:???
>>632
>>613 RTFM
0634nobodyさん04/07/06 09:30ID:???
男ならPHP5だろ。
0635nobodyさん04/07/06 10:28ID:???
txtファイルなどに変数を書き込んで、phpで読み込む事は出来ますか?
includeだとphpファイルの変数しか読み込めないので、txtファイルの中の変数を読み込みたいのです。
よろしくお願いします。
0636nobodyさん04/07/06 10:39ID:???
>>635
txtファイルは
<?php
$baka = "試せ";
?>
これをincludeしてみ
0637nobodyさん04/07/06 10:46ID:???
>635
ttp://www.php.net/manual/ja/function.parse-ini-file.php

とか、どーですか。
063863004/07/06 10:56ID:???
>>631
インストーラバージョンをインストールしてたのが原因でした・・・。
英語ちゃんと読んでませんでした
レスどうもです
0639nobodyさん04/07/06 11:01ID:???
うーん
普通に<?phpとか書いてない txtファイルを読み込んで
その中に入ってる$hoge とか言う変数を読み込みたいのです
064063804/07/06 11:05ID:???
すみません。解決しました
0641nobodyさん04/07/06 11:08ID:???
>>639
その程度の問題を自分で解決できないならプログラム組むのやめた方が良いね
とりあえずマニュアルのファイルシステム関数ページを読めよ

ttp://www.php.net/manual/ja/ref.filesystem.php
0642nobodyさん04/07/06 11:46ID:???
ありがとう641 637 636
解決しました(^^
0643nobodyさん04/07/06 12:04ID:Rny+MH6z
▼index.php
<html>
<body>
<?php
print ("<a href = 'get.php?a=5'> Get</a>");
?>
</body>
</html>

▼get.php
<html>
<body>
<?= print($_GET['a']) ?>
</body>
</html>


上記のコードで、index.phpからget.phpへ移動すると、
ブラウザには「51」と表示されてしまいます。「5」と表示したかった
のですが、原因がわかりません。おわかりの方がいましたらご教授
お願いします。
0644nobodyさん04/07/06 12:11ID:???
>>643
<?php print($_GET['a']) ?> ではないの?
0645nobodyさん04/07/06 12:14ID:NBQAU1O/
<
0646nobodyさん04/07/06 12:15ID:NBQAU1O/
<
0647nobodyさん04/07/06 12:15ID:5MCxUUr8
<?= print($_GET['a']) ?>
を
<?php print($_GET['a']) ?>
では?
0648nobodyさん04/07/06 12:16ID:???
>643
質問の要旨とは関係ないけど、二重引用符と単一引用符を
入れ替えた方が良い。

どこに問題があるか見極めるには、静的な HTML を書いて、
get.php を呼びだしてみたりするとか。

とりあえず、index.php で生成される HTML を良く眺めることを勧める。
064964304/07/06 12:28ID:mpLQA1tZ
できましたm(__)m
みなさん、レスどうもです。
<?php print($_GET['a']) ?>が正しいようでした。

>>648
二重引用符と単一引用符を入れ替えてみました。
ソースを見るとこちらのほうがよさそうですね(実はあまり意味がわかって
いませんが・・)

それにしても1時間くらい悩んでいたので助かりました。
ありがとうございました。
0650nobodyさん04/07/06 13:12ID:???
なるほど、printはTUREを返すのか。
0651nobodyさん04/07/06 13:13ID:???
TRUE... orz
0652alvi04/07/06 13:14ID:A6zHoUWt
ど忘れしてしまったので教えて下さい。

includeされるファイル
function.php
と

実行する(function.phpをincludeさせる)ファイル
main.php
があるのですが、

万が一main.phpではなくfunction.phpにアクセスされた時にはfunction.phpがエラーを舶用に
htaccessは使わずにファイル名で判定できた筈だったのですが変数を忘れてしまいました。

function.phpをmain.phpに読み込んで$_SERVER["SCRIPT_NAME"]
とするとmain.phpになってしまいますが、これをfunction.phpと表示させる変数は何であるのか
教えて下さい。よろしくおねがいします。
■ このスレッドは過去ログ倉庫に格納されています