【PHP】質問スレッドpart18【php】
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
04/06/14 14:36ID:???・新規質問の方は上げてください。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
抜けているものがあったら補足願います
0522nobodyさん
04/06/30 17:38ID:???レスありがっつぉございます。
やっぱexitしないといけませんですかぁ。
a.phpに複数ファイルを並べておいて、
順に落とせるようにしたいんですけど・・・
0525nobodyさん
04/06/30 17:56ID:???何悩んでるのかよく分からんが、下のを実行しても「geko」が表示されることは無い。
(POSTだと長くなるのでGETで代用した。)
<?php
if(isset($_GET[file]) && $_GET[file] != ''){
header("Content-disposition: attachment; filename= test.txt");
header("Content-Type: application/octet-stream");
readfile($_GET[file].".txt");
}
?>
<html><body>
<a href="a.php?file=a">download</a>
<?php
if(isset($_GET[file]) && $_GET[file] != ''){ print "<p>geko</p>"; }
?>
</body></html>
0527516
04/06/30 18:16ID:???あ、あれ・・・このサンプルでまさに意図していた通りの動きですよ?
強烈に何かを間違えている予感。
自分とコードを見つめ直します。
0529nobodyさん
04/07/01 00:31ID:???その通り。
>PHP の標準のエラーハンドラは完全にバイパスされることに注意して下 さい。
>error_reporting() の設定は影響せず、どの ような場合でもユーザが設定した
>エラーハンドラがコールされます。ただし、この場合でもハンドラで
>error_reporting() のカレントの値を読み、適当に動作させることは可能です。
と、PHP マニュアルの set_error_handler 関数のページに書いてある。
0531nobodyさん
04/07/01 14:28ID:???にあるように
error_reporting(E_ALL);
set_error_handler("myErrorHandler");
をしても Parse error や Fatal error を捕まえられないわけですが、
どうしても捕まえたいです。別の方法、もしくはよいアイディアはないでしょうか?
# ob_get_contents() して Parse error などの文字を preg_match() させようとも思いましたが
# ユーザ側の入力で万が一でも Parse error と入力した場合も捕まえてしまいますし…。
0533nobodyさん
04/07/01 16:28ID:???ありがとうございます。
ob_* を使って「error</b>」で検索する方法や eval() ですよね。
eval() は怖いし、ob_* は万が一マッチしたら、という不安や、
長時間処理の時に ob_flush() が使えないのが困り者です。
PHP5 になったらプログラム全体を try ... catch で囲むとか…。
うーん。引き続き妙案募集です。
0534nobodyさん
04/07/01 23:50ID:???PHPでチャットを作ろうと思っているんですが、
発言内容をログファイル(log.txt)に
↓のように<>で一つの発言ごとに区切って保存してある場合
------ log.txt ------------------------------------------------
名前0 : メッセージ0<>名前1 : メッセージ1<>名前2 : メッセージ2<> ・・・・
---------------------------------------------------------------
次のように配列に代入するにはどうしたらいいですか?
$a[0] ‥‥ "名前 : メッセージ0"
$a[1] ‥‥ "名前 : メッセージ1"
$a[2] ‥‥ "名前 : メッセージ2"
:
:
$fp = fopen("log.txt", "r");から先がどう書いていいのかが分かりません。
よろしくお願いします。
0537nobodyさん
04/07/02 01:00ID:???あらまっ、奥さまっ
0538nobodyさん
04/07/02 01:53ID:6/QnGsWtオクサマッ534ミタ?( ´д)ヒソ(´д`)ヒソ(д` )アラヤダ
0539nobodyさん
04/07/02 02:19ID:???デバッグとかでそれをファイルに書き出して見ようとすると
非常に見づらいので、適当に改行が入るフォーマットにするのが普通
ではないかと思ってみる
0540nobodyさん
04/07/02 07:25ID:???<>のかわりに改行で区切ったほうが楽だと思う。
それだと$a = file('log.txt');で終わり。
生のログファイルも見やすい。
0541nobodyさん
04/07/02 13:29ID:???とりあえず認証成功したらユーザIDをセッションに保持するのを
書いたんだけど、動くんだけどどうにもしっくりこないです。
状況に応じて最適解は変わるってのは百も承知だけど
なんというか、基本的な部分だけに毎回車輪の再開発するのも
ちょっとイヤンな感じで。
0542nobodyさん
04/07/02 13:41ID:???0543nobodyさん
04/07/02 16:56ID:???模範解答という訳ではないが、何種類かのパターンの解説
「Web認証システムの作り方大全―Apache/IIS/PHP/Servlet&JSPそれぞれの場合」
http://www.amazon.co.jp/exec/obidos/ASIN/4797321490
0544nobodyさん
04/07/02 20:57ID:proF8LyPで最初の●より後に▲があったら全て×に置き換えたい(最初の
●のあとに再び●が出てくることも、出てこないこともある)
↑こういう変換をしたいのですが、どうしたらよろしいでしょうか?
かなり複雑なことをしないと無理ですか?
0546544
04/07/02 21:45ID:proF8LyP●より後の、▲以外の文字をそのまま残すということが可能でしょうか?
0547544
04/07/02 21:52ID:???やってみます。
ありがとうございました。
0548nobodyさん
04/07/02 21:57ID:6Y75o+Jb$fp = fopen("data.txt",a);
fwrite($fp,$new_text);
fclose($fp);
と改行コードを<br />に変換して出力したところ、<br />には変換されているのですが、改行されてしまっています。
代わりに str_replace("\n","<br />",$_POST[text]);とやっても同じでした。\r\nでもだめです。
0549nobodyさん
04/07/02 22:21ID:???preg_replace_callbackのほうが適任のような。
>>548
Windowsでは$fp = fopen("data.txt", "ab");としないと
テキストモードでファイルが開かれ、fwrite/fputsするたびに改行が入るわけだが、
OSは何をお使いで?
0550549
04/07/02 22:23ID:???0551548
04/07/02 22:31ID:???スクリプトはEUCを使用しています。
0552548
04/07/02 22:32ID:???0553544
04/07/02 22:41ID:proF8LyPありがとうございます。
難しそうですが、やってみます。
0554548
04/07/02 22:50ID:???str_replaceで。
0555544
04/07/02 23:16ID:proF8LyPreturn $a ;
こんな感じでやってみたら「第二引数が足りない」という趣旨のエラー
メッセージが出たのですが、どうしたらいいんでしょうか?
preg_replace_callback 関数の第二引数に他の関数かなにかを入れ
ないといけないのでしょうか?
0556549
04/07/02 23:34ID:???たのむからマニュアルぐらい読んでよ。。。
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);
●や▲が半角英数字じゃないと期待通りには動かないこともあります。
0558nobodyさん
04/07/03 00:04ID:???"最初の●より後に▲があったら全て×に置き換える" ということなので、それでは
$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:???なるほどー。そういう手がありましたか。
自分はマルチバイトを含む文字列をトリッキーな置換するときは
UTF-8決め打ちでpreg_replace_callbackでuオプションを使ってますが
将来mb_ereg_replace_callback関数ができたらそっちも使ってみたい。
あとpreg_*でUnicodeプロパティーのサポートも希望したいですね。
0560nobodyさん
04/07/03 01:02ID:???こっからserXXXXXXXXXXXXXXXだけを取り出したいのだがどうすればいい?
問題はYYYYが必ず同じ長さではない。
つまりser以降指定の文字数を得たいのだが…
0562nobodyさん
04/07/03 02:36ID:???0563nobodyさん
04/07/03 02:59ID:???スマン、正規表現でがんがったんだがさっぱりわからん、、、。
>>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:???正規表現の書き方がわからんのなら、正規表現スレで抽出条件を詳しく書いて聞けばいい。
とりあえずDoCoMoの分だと、serに続く文字列で ; もしくは行末までって条件でいいのなら
(ser[^;$]+)
0566てふてふ
04/07/03 11:22ID:Upkf89lK日本語の文字化けがおきてる方っていませんか?
0567nobodyさん
04/07/03 16:10ID:???0568nobodyさん
04/07/03 16:52ID:wzmmIfWrそのままファイル自体を読み込んで調べるしかないのでしょうか?
0569nobodyさん
04/07/03 17:00ID:???0570nobodyさん
04/07/03 17:17ID:???*自分の*ファイルなんだから、PHPでそのファイルを読まなくても知る術はあるけど。
0571nobodyさん
04/07/03 18:33ID:n3s5B9BGここのPHPの詳細おねがいします。英語読めません。
0573nobodyさん
04/07/03 20:57ID:???$encoding = mb_detect_encoding(file_get_contents($_SERVER['SCRIPT_FILENAME']));
0574>>571 です
04/07/03 21:50ID:n3s5B9BGごめんなさい
0576nobodyさん
04/07/04 00:34ID:fnOHrUgA届いたメールの題名が文字化けします。
題名部分は $title = JcodeConvert("題名", 0, 3); で、
文字コード指定は1,2,3どれも化けます。
環境は、Win XP Pro + Apache + PHP4.2
どこがいけないの?
0577nobodyさん
04/07/04 00:49ID:???脳ミソの変わりにくらげとか入ってないか調べたい。
0578nobodyさん
04/07/04 01:22ID:???メールの件名は特別だから。
詳細をググって調べるべし。
↓と同じ感じでjcodeつかってできるようにがんがれ。
$title = "件名";
$title = "=?iso-2022-jp?B?" . base64_encode(i18n_convert($title, "JIS")) ."?=";
0579576
04/07/04 01:49ID:???以下2行の追加で直りました。
$title = base64_encode($title);
$title = "=?iso-2022-jp?B?" . $title . "?=";
ありがとうございました!
0580nobodyさん
04/07/04 06:26ID:???「100円のものを1000個買いました。全部でいくらですか」
という問題を100を1000回足して答えを出すのに近いな
0581nobodyさん
04/07/04 07:41ID:???釣りか?
なぜネストの話が
つーかALUでは加算の繰り返(ry
0582nobodyさん
04/07/05 10:41ID:???0583nobodyさん
04/07/05 13:28ID:???0584nobodyさん
04/07/05 16:02ID:???$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というのは何でしょうか?
0587584
04/07/05 16:09ID:???Division by zero in とはどういう意味なのでしょうか・・・ガクガクブルブル
0588nobodyさん
04/07/05 16:11ID:???それくらいの英語読め
0589nobodyさん
04/07/05 16:14ID:???$LV2に8、$LVに4入れても同じエラーが・・・
0590nobodyさん
04/07/05 16:22ID:???確認の仕方はマニュアル読んで調べろ
0591nobodyさん
04/07/05 16:30ID:???print "レベルが入力されていません。";
}else if($STR2 < $STR or $CON2 < $CON or $DEX2 < $DEX or $INT2 < $INT or $LUCK2 < $LUCK or $CHA2 < $CHA){
print "入力した値がおかしいです。";
}else{
}
これを使ったあと全部に0が入ってた〜(なぜだ
0593nobodyさん
04/07/05 16:36ID:???ttp://cgi.f44.aaacafe.ne.jp/~phpworld/002/seityo.php
値を出した後、ページが表示されない・・・
ソースを見ればHTMLがあるのに
0595nobodyさん
04/07/05 17:14ID:???もし$LV2=0で$LV=0なら じゃないんですか!?
0596nobodyさん
04/07/05 17:18ID:???★ ☆
☆ 質問者が返信する時は名前欄に「最初に質問したレス番号」を入れろ ★
★ ☆
☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
>>595
お前はアホか・・・
$LV2=0、$LV=0にして>>584の計算をしてみろよ
0599nobodyさん
04/07/05 17:31ID:???<TITLE><TITLE>
を
<TITLE></TITLE>
とすれば解決。
何が原因が分からない時は問題の絞込みってやつをするといいyp。
0600nobodyさん
04/07/05 17:56ID:???0604nobodyさん
04/07/05 21:01ID:???>>595
= は代入演算子だから比較の意味では使えない。
比較には == や === などを使う。詳しくは下記を読め。
http://www.php.net/manual/ja/language.operators.comparison.php
http://www.php.net/manual/ja/language.operators.assignment.php
0606nobodyさん
04/07/05 21:02ID:???0607nobodyさん
04/07/05 21:07ID:???unexpected T_IF
ってなんだYO!
0608nobodyさん
04/07/05 21:18ID:???0609nobodyさん
04/07/05 21:25ID:???ファイルに保存されないぽ
これのエラーを直せたら教えてやる
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);
}
}
0610609
04/07/05 21:30ID:???fputs($fp, "$input_msg\n");
これで保存したんだがデータが上書きされる・・・
0611nobodyさん
04/07/05 21:43ID:dk5OZx2a消す場合はどうしたらいいのでしょうか?
0612nobodyさん
04/07/05 21:45ID:???>$fp = fopen($data, "w");
あなたの書いた通りに動いているだけです。
PHPマニュアルのfopenのページをご覧あれ。
0615nobodyさん
04/07/05 21:51ID:???あれってPHPでもできんのけ?
0616nobodyさん
04/07/05 21:52ID:???>fputs($fp, $message[$i]);
上書きされるのはwriteでファイル開いてるんだから当然として
とりあえず改行コードが抜けているぞ。
0617nobodyさん
04/07/05 21:57ID:???JavaのSiteMeshみたいな?
できるかできないかでいえば「できる」けど書くのが面倒なら
そのCGIに任意のHTMLやPHPスクリプトを読み込ませてもいいんじゃない?
プロキシみたいなもんで、ブラウザの代わりにURIにアクセスして
レスポンスボディをレイアウトし直したり、リンクのURIを書き換えたりしてるだけだと思うから。
0618nobodyさん
04/07/05 21:58ID:???「PHP まぬある 付録 P. パーサトークンの一覧」
ttp://www.php.net/manual/ja/tokens.php
を読んでけれ。
"Parse error: parse error, unexpected T_VARIABLE" などという
エラーが表示された場合は、「私ってば PHP の構文解析をして
いるパーサですが、あなたの書いたソースを読んだら構文解析
に失敗しますた。予期せぬ位置に変数が表れたわよ。」と読む。
大抵の場合、パースエラーの出た変数の手前に問題があって、
セミコロン忘れてますた。括弧を閉じ忘れてますた。とかそういう
ことだたーりする。
だと思う。
0619618
04/07/05 22:04ID:???>大抵の場合、パースエラーの出た変数の手前に問題があって、
「正」
大抵の場合、パースエラーの出たイ "トークン" の手前に問題があって、
マチガエタ。サヨウナラ。サガサナイデクラハイ。
0620nobodyさん
04/07/05 22:07ID:???0621nobodyさん
04/07/05 22:20ID:???しってるよばーかマヌケ
>>620
スレとかんけーねーよ無能
■ このスレッドは過去ログ倉庫に格納されています