【PHP】質問スレッドpart20【php】
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
04/08/06 15:44ID:paJ4kjjQ・新規質問の方は上げてください。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
抜けているものがあったら補足願います
0555552
04/08/18 16:23ID:???0556軟式PHP
04/08/18 16:32ID:???r;ァ'N;:::::::::::::,ィ/ >::::::::::ヽ
. 〃 ヽル1'´ ∠:::::::::::::::::i
i′ ___, - ,. = -一  ̄l:::::::::::::::l
. ! , -==、´r' l::::::/,ニ.ヽ
l _,, -‐''二ゝ l::::l f゙ヽ |、 よく頑張ったじゃねぇか。
レー-- 、ヽヾニ-ァ,ニ;=、_ !:::l ) } ト
ヾ¨'7"ry、` ー゙='ニ,,,` }::ヽ(ノ もうちょい先まで読んでみようぜ。
:ーゝヽ、 !´ " ̄ 'l,;;;;,,,.、 ,i:::::::ミ
::::::::::::::::ヽ.-‐ ト、 r'_{ __)`ニゝ、 ,,iリ::::::::ミ
::::::::::::::::::::Vi/l:::V'´;ッ`ニ´ー-ッ-,、:::::`"::::::::::::::;゙ , な!
:::::::::::::::::::::::::N. ゙、::::ヾ,.`二ニ´∠,,.i::::::::::::::::::::///
:::::::::::::::::::::::::::::l ヽ;:::::::::::::::::::::::::::::::::::::::::::/ /
::::::::::::::::::::::::::::::! :|.\;::::::::::::::::::::::::::::::/ /
0557552
04/08/18 16:37ID:???0558nobodyさん
04/08/18 16:38ID:???0559nobodyさん
04/08/18 16:39ID:???> headers already sent
0560552
04/08/18 16:40ID:???0561nobodyさん
04/08/18 16:40ID:???echo とか print とかしてると 起こりやすいね。
0562552
04/08/18 16:42ID:???<?php
if ($action == "投稿"){
$mynews = 'page/〜/data.cgi';
$file = file($mynews);
$count = count($file);
if ($count > 10){
$count = 10;
}
$host = getenv("REMOTE_HOST");
$addr = getenv("REMOTE_ADDR");
if($host == "" || $host ==$addr){
$host = gethostbyaddr($addr);
}
list ($name2,$url2,$title2,$comment2,$host2) = split( ",", $file[0]);
if ($host != $host2 && $url != url2){
$input = implode(",", array($name,$url,$title,$comment,$host));
$fp = fopen($mynews, "w");
flock($fp,LOCK_EX);
rewind($fp);
fputs($fp, "$input\n");
for($i = 0; $i < $count; $i++){
fputs($fp, $file[$i]);
}
flock($fp,LOCK_UN);
fclose($fp);
unset($file);
}
header ("Location:http://〜/index.php");
}
?>
0563nobodyさん
04/08/18 16:43ID:???> Cannot modify header information
の前に何かエラーか警告が出力されてないか
<?php の前に改行や空白がないか
0564562
04/08/18 16:50ID:???空白もナイポ
0565nobodyさん
04/08/18 16:54ID:???マジきもいんだけど
0566nobodyさん
04/08/18 16:57ID:???それからエラーの出ているHTMLのソースはどうなってるかよく見てみれ
0567nobodyさん
04/08/18 17:11ID:???ヘッダー情報-、(/usr/家/自由な/家/市場/public_html/mmorpg/index.php
で始められた出力: 4)既に送られたヘッダー-を修正することができません。
この辺りも見とけ
http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.30
headerの行を削除した時に、全く何も画面出力されていないことが必要だぞよ
0570nobodyさん
04/08/18 17:37ID:???0571nobodyさん
04/08/18 17:41ID:???無償のレンタル鯖でアクセス制限が掛けられない時、
データファイルの拡張子をcgiにしておけば、URL直打ちでも
データファイルを覗かれないという利点がありますけど。
0572nobodyさん
04/08/18 17:43ID:???500がでて見れないようにしているんだと思う
# 自分だったらそんな変なことしないで.htaccessによるアクセス制限するが
0575nobodyさん
04/08/18 19:03ID:???さんざんやってたような希ガス
0576nobodyさん
04/08/18 19:05ID:QMhJW4BU0577nobodyさん
04/08/18 20:07ID:???0578nobodyさん
04/08/18 20:31ID:???0579578
04/08/18 20:32ID:???0580nobodyさん
04/08/18 21:10ID:???すげー。このサイト全部 GIF かよ。ってことになるのか。
で、GIF 画像を表示するとき困らないかしら。
あふぉなブラウザが勘違いして妙なことになりはしないかしら。
わたしもやってみよー。
0581nobodyさん
04/08/18 22:03ID:sgbsN4EW$str = <<<EOS
aaa $x bbb
EOS;
この例なら $x を展開しようとして「初期化されてない変数」というエラーがでてしまう。
もちろん \$x と書けばいいのだが、ちょっと面倒くさい。
$s = <<<'EOS'
aaa $x bbb
EOS;
と書いたら変数展開されないかなーと思ったけど、シンタックスエラーだ。
0582nobodyさん
04/08/18 22:29ID:???0583nobodyさん
04/08/18 22:52ID:???jsp にしたら多少リソース喰っても許される
aspx にしたら客が他に移管するって言い出さなくなるし単価も上がり、初期投資も色乗せれる
cgi にしたら単価下がるけど杜撰な運用でデータ漏れても泣き寝入り度上がる
php にしたら 普通じゃーん と思われつつ、人員の技能レベルとセキュリティホールやバグを執拗に心配される
まぁどれを選ぶかはおまい次第だ。
# .html を被せて運用してるところはマジであるよね。運用情報隠して被いたずら/クラッキング率を下げる
0584nobodyさん
04/08/18 23:14ID:???0585nobodyさん
04/08/18 23:20ID:???1字付け足してエスケープするのが一番楽だろう。
それかその部分だけエラー制御で殺す。テンプレートエンジンはコレやってる。
ヒアドキュメント自体そんなに使う物でもないし、不満になってきたら他のやり方探す方がいい。
0586nobodyさん
04/08/18 23:22ID:???> それかその部分だけエラー制御で殺す。テンプレートエンジンはコレやってる。
考え無しにコレをやると脆弱性作るぞ。
運用段階で register_globals を有効にされたり、そのコードの前で外部変数を extract されたらまさに鴨。
テンプレートエンジンがソレやって許されるのは、きっちり閉じ込めてあるからで。
0587nobodyさん
04/08/18 23:27ID:???0588nobodyさん
04/08/18 23:28ID:???PHP の変数ではなく、> 変数 $hoge に対して~ とか文章の流れで $var が出てくるってのなら、
$ はエンティティにでもしておくのが妥当だと思われ。
0590530
04/08/19 01:08ID:???シェルからphp hoge.phpとしてphpを呼び出すとちゃんと日本語にしてくれて、
apacheから呼ぶと駄目みたいです。
どっちも同じユーザーでやってみたので権限の問題でもないようですが、
もうさっぱりです。
どなたかご教授願います。m(_ _)m
>>539
PHPがshell関数で動かす環境の言語とは何処を設定すれば良いですか?
PHP-usersも検索してみましたが探し当てられず・・・。
0591nobodyさん
04/08/19 01:37ID:???shell_exec('touch 日本語のファイル名.txt');
としてapacheとシェルから実行したらどうなるかやってみてよ
0592530
04/08/19 01:54ID:???mkdirでも出来たので予想はしてましたけど、
apacheとシェルどちらもEUC-JPで日本語名のファイル作ってくれました。
EUC-JPで.shファイル作ってやっても出来たので、oggencの引数はEUC-JPで良いみたいですし。
何が悪いのでしょう?
0593nobodyさん
04/08/19 02:00ID:???0594530
04/08/19 02:11ID:???やりました。
apacheからやった場合は文字コードの1バイトが#に置き換わって表示されます。
シェルからやった場合は#と?で出てきます。
どちらも英字の部分は普通に表示されています。
0595581
04/08/19 02:15ID:???どうもありがとう。
背景をちょっと説明すると、PHPスクリプトの中にPHPスクリプトを書く必要があって、
それをヒアドキュメントで書いています。
$code = <<<EOS
#PHPスクリプトをここにかく
<?php echo \$x ; ?>
EOS
それで、Cut&Pasteで貼り付けてるんだけど、そのあとに¥でエスケープするのが
面倒だったので質問しました。
\n なんかも \\n としなきゃいけないんで、結構面倒なんですよ。
まあ頑張ってちまちま直します。
>>587
どういう意味?
0598nobodyさん
04/08/19 09:23ID:???0599もん吉
04/08/19 10:35ID:???SQL文で
$sql = "SELECT * FROM data WHERE NAME LIKE '%".$data."%'";
$dataは前ページからもらってきたデータが入ってるんですが
データベースの中身(NAME)が全角(例:カーショップ)の場合で
$dataが半角(例:カーショップの場合bとかjでした)の場合
なぜか引っかかってしまいます。
これはなぜでしょうか?
0600nobodyさん
04/08/19 10:58ID:???$hoge .= "ほげ";
これだとエラー。
$hoge = "";
$hoge .= "ほげ";
これだとエラーなし。
そういうもんなんでしょうか?
php4.3.4
0601もん吉
04/08/19 11:06ID:???先に$hoge = ""; としておかないと追加する場所がなく
エラーが出るのだと思います。
$hoge = "ほげ";だと問題ないですよ。
0602nobodyさん
04/08/19 11:07ID:???いれば教えてホシイのですが、どういう手段で文字コード変換やってますか?
jcode.phpとかだと半角カナをうまく使えないですし、
かといってレンサバなのでphp.iniをいじくったりモジュール追加できないので悩んでいます。
0603nobodyさん
04/08/19 11:16ID:???0605nobodyさん
04/08/19 11:26ID:???0606nobodyさん
04/08/19 11:43ID:???0608nobodyさん
04/08/19 12:02ID:???そもそもjcode.phpって必要
0609nobodyさん
04/08/19 12:03ID:???0610nobodyさん
04/08/19 12:26ID:???Warning: fputs(): supplied argument is not a valid stream resource in /usr/home/free/home/market/public_html/mmorpg/link/index.php on line 20
Warning: fclose(): supplied argument is not a valid stream resource in /usr/home/free/home/market/public_html/mmorpg/link/index.php on line 24
Warning: Cannot modify header information - headers already sent by (output started at /usr/home/free/home/market/public_html/mmorpg/link/index.php:19) in /usr/home/free/home/market/public_html/mmorpg/link/index.php on line 28
もうだめぽ_| ̄|○
0611nobodyさん
04/08/19 13:06ID:???とはどういう意味でしょうか?
0613Imo ◆.jC7ANgFY.
04/08/19 13:23ID:???文法エラー
文法上の誤りがあります。
本来、case(T_CASE)またはdefault(T_DEFAULT)または}であるべき
ところが文字列(T_STRING)になっています。
0615611
04/08/19 13:27ID:???case1:$a = "q";break;
case2:$a = "w";break;
case3:$a = "s";break;
case4:$a = "x";break;
}
って間違ってるのかな〜
0616nobodyさん
04/08/19 13:33ID:???0619軟式PHP
04/08/19 14:39ID:???case 2
case 3
case 4
だろ。
0620nobodyさん
04/08/19 14:43ID:HVGJn52bが167にならないのって一体どういう事だ?
おかげで徹夜しますた。
0621Imo ◆.jC7ANgFY.
04/08/19 14:59ID:???注意: 引数の値が 2 つの整数の中間にある場合の ROUND() の動作は、
C ライブラリの実装に応じて決まる。
実装に応じて、最も近い偶数に丸められる場合と、
常に切り上げまたは切り下げられる場合、
あるいは常にゼロ方向に丸められる場合がある。
特定の丸め方法を必要とする場合は、この関数ではなく、
TRUNCATE() や FLOOR() などの明確に定義された関数を使用するようにする。
0624軟式PHP
04/08/19 15:13ID:???あと俺はcase処理を1行で書くのは嫌いだな。
619のようなやつだったら配列処理でいいし。
0625620
04/08/19 15:15ID:HVGJn52bなんか>>621の文言が言い訳にしか聞こえない(^^;
で、結局「四捨五入」する方法ってどれなの?
TRUNCATE() や FLOOR() ってどう工夫すると期待した結果が得られるの?
0626nobodyさん
04/08/19 15:20ID:???0627nobodyさん
04/08/19 15:20ID:???私も書き方は気に入らないが個人の好みもあるし
最初はあんなものでしょ
>>625
てかMySQLにいけ
オマケにマニュアル読め
0628nobodyさん
04/08/19 15:32ID:???"四捨五入 銀行型"辺りでぐぐれ
明確にされてないのが気に食わないのかもしれないが、
そのround実装は普通(の範疇)だ
0629Imo ◆.jC7ANgFY.
04/08/19 16:12ID:???私はマニュアルをコピペしただけですが?
0.5引いて切捨てしろってことだろ
FLOOR(`num` - 0.5)
0630nobodyさん
04/08/19 16:14ID:h2ZrLQAF教えて頂きたいのですが、
アドレスで
123/456/
の時は最後の「/」を削除して
123/456
の時は何もしない
最終的にどちらも123/456
となるようにしたいのですが、
何か方法ないでしょうか?
よろしくお願いします。
0631Imo ◆.jC7ANgFY.
04/08/19 16:17ID:???最後が「/」の時は最後の「/」を削除して
ほかのときは何もしない。
をそのままプログラムにすればいいじゃない。
0633nobodyさん
04/08/19 16:37ID:???ども〜
マニュアルみてきました!
$trimmed = rtrim($text," \t.");
ってのがのっててそれで目的が達成できそうです。
欲しい関数はなんでもありますねw
ありがとうございました!
0634nobodyさん
04/08/19 16:43ID:???630ではないが、rtrimってこういう使い方もあったのか・・・知らなかった
「/」が可能という事は全ての文字で利用出来るという事ですね
0635nobodyさん
04/08/19 16:45ID:???rtrim()は以下の文字を削除します。」と書いてあるが空白文字以外でも利用出来るなら
そう書いてくれよ
0637nobodyさん
04/08/19 17:24ID:???ttp://www.beginnersphp.co.uk/digitalclock.php
を参考にしたのですがファイルのCRC4の取得方法がわかりません。
途中に出てくる ^ 排他的論理和(Xor?)がワケワカラン…
$file = "./data/a.png";
$size = filesize($file);
$fp = fopen($file, rb);
$da = fread($fp,$size);
fclose($fp);
echo crc4($da);
function crc4($a){
〜〜〜〜〜〜〜〜〜〜〜〜〜
処理
〜〜〜〜〜〜〜〜〜〜〜〜〜
return $crc_data;
}
こんな感じにしたいのです。
0638nobodyさん
04/08/19 17:39ID:???0639nobodyさん
04/08/19 17:58ID:???string rtrim ( string str [, string charlist])
[]はオプション。お前オプション注意して見たことないだろ?
phpの関数には至る所にオプションがある
0640nobodyさん
04/08/19 18:22ID:???<tr>
__<td class="">
____<a href="http://hogepage.com/sample.php">サンプル</a>
__</td>
__<td class="">
____2004/08/19 00:00
__</td>
</tr>
以上の文字列から、パターン %<a href=\"(.+?)\">(.+?)</a>(.+?)</tr>% で
リンク部分を抽出して、さらに3番目にマッチした部分から、
パターン ([0-9]+/[0-9]+/[0-9]+ [0-9]+:[0-9]+:[0-9][0-9]) で時刻を
抜き出していますが、最初のパターンで、更新時刻もきれいに取得したいのです
もう少しコンパクトにすることはできないでしょうか?
どうぞよろしくお願いします。
0641nobodyさん
04/08/19 18:34ID:???こんな感じか?
preg_match_all('%<tr>(?:.*?)<a href="(.+?)">(.+?)</a>(?:.*?)(\d\d\d\d/\d\d/\d\d \d\d:\d\d)(?:.*?)</tr>%s', $html, $m);
print_r($m);
0642620
04/08/19 18:54ID:HVGJn52b>>629
いや、知ってる、そのマニュアルの文言が言い訳っぽいって事
>>628
せめて一貫性を保ってほしいよな
select round(166.5); が166なのに
select round(167.5); が168になるのはどうかと・・・
そんな中途半端な関数最初から作るなって感じだな
というわけで、MySQLスレ逝ってくるわ
0644nobodyさん
04/08/19 19:00ID:???echo "COOKIE";
}
この処理をディレクトリ変えたらできなくなるのですがなぜでしょうか?
よろしくおねがいします
0646nobodyさん
04/08/19 19:06ID:???"四捨五入 銀行型"でぐぐったのか?
0.5を偶数になるように繰り上げたり切り捨てたりするのさ
167.5 -> 168
166.5 -> 166
165.3 -> 165
0647nobodyさん
04/08/19 19:07ID:???> ディレクトリ変えたら
意味わかんね
0648644
04/08/19 19:10ID:???<?php
if(isset($_COOKIE['ck'])){
echo "COOKIE";
}
?>
このファイルがa.phpで、hogeというディレクトリに入っていて、a.phpを実行するとCOOKIEと表示されます。
で、a.phpをhoge2というディレクトリに入れると、COOKIEと表示されないのです。
0649628
04/08/19 19:16ID:???世の中には「偶数側に丸める(round(166.5)→166, round(167.5)→168)」
という丸め方法があって「銀行型の四捨五入」と呼ばれています
それに一貫性がないってのは……、銀行に文句を言ってみてくださいね(苦笑
0651nobodyさん
04/08/19 19:28ID:???echo "COOKIE";
}
これって間違ってますか_?
なぜディレクトリ変えただけでクッキーの値取れないのだろう(汗
0652620
04/08/19 19:32ID:???とりあえず銀行に文句言ってくるわ
■ このスレッドは過去ログ倉庫に格納されています