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

【PHP】下らねぇ質問はID出して書き込みやがれ 96

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2010/05/28(金) 16:33:44ID:???
質問者はまず>>1を良く読むこと(必須!)
過去スレ、関連スレ、FAQなどは>>2-10辺り
次スレは>>980が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。

◆前スレ
【PHP】下らねぇ質問はID出して書き込みやがれ 95
http://pc11.2ch.net/test/read.cgi/php/1271636105/

◆質問用テンプレ
【OS名】CentOS
【PHPのバージョン】5.3
【連携ソフトウェア】MySQL ImageMagick
【質問内容】

◆質問する時の注意
・ スレを上げて自分のIDを表示させること。(メール欄に何も記述しない。専ブラのsageチェックを外す)
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に関連リンクの公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
(PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。)

◆質問後の注意
・2回目以降は最初に質問した際のレス番号を入れて、偽者防止に必ずIDを表示させること。
・解決しなくても回答をもらった場合はお礼を言うこと。
 (荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)

◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。

【その他諸注意】
・SQL・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
0042402010/05/30(日) 23:57:02ID:???
>>41
すまんかったスルーするわ
0043nobodyさん2010/05/31(月) 00:16:26ID:???
>40-42
なにこの自演乙
0044nobodyさん2010/05/31(月) 15:40:04ID:v3qt+P/M
負担の観点からの質問です。
100個のファイルから一つのファイルを読み込む、
require "/home/config.php";
とするのと、100個、個別の
require "./config.php";
とした方が良いのか、負担率としては同じなんでしょうか?
全く別物なのでしょうか?
よろしくお願いします
0045nobodyさん2010/05/31(月) 16:02:39ID:???
前者の100個のファイルは同時に100個処理するするのかどうか書かないと
それだけじゃ何とも言えない
0046442010/05/31(月) 16:15:07ID:???
>>45
テンプレートみたいな使い方をしたいんです
設定部分やデザインなんかの記述をしてます
$a="<css--・・・・
$b="ようこそ";
みたいな感じですね。
アクセス数はかなり多いのでどんなものかと思いまして
0047nobodyさん2010/05/31(月) 16:22:33ID:???
普通は1つのファイルに収めるよね
オープンソースのCMS見りゃ分かるが個別に分けてるものなんてないよね
0048nobodyさん2010/05/31(月) 16:25:07ID:???
いい加減スレタイ嫁
0049nobodyさん2010/05/31(月) 16:48:35ID:???
>>47
分かれてるがキャッシュにより毎回読み込まないようにしている実装とかよくある
0050nobodyさん2010/05/31(月) 17:12:47ID:GblyjBgz
小沢一郎幹事長、ソウルの国民大学で講演「日本人は寄生虫、害虫」

民主党の小沢一郎幹事長は12日、ソウルの国民大学で講演後、約250人の学生と
日本人について語り合った。学生から、多くの日本人が学校にも通わず、仕事にも
就かないニートについて聞かれ、小沢氏は「日本のニートの現状はみんな親が悪い。
日本人の親は学校にも行かないで、仕事もしないぶらぶら遊んでいる子供を食べさせ
ている」と持論を披露した。
小沢氏は「学校にも行かない無職の子どもを責める前に、日本人の親達は子供を
甘やかしている。親に民族教育をしっかりしないといけない」と主張した。「日本人の
若者は漠然と他人に寄生し寄生虫として生きているとんでもない害虫だ」とした。
「もともと日本人の親達もどうかしている。日本人は動物にも劣る民族といっても
過言ではない」とした。「日本人はもともと民度が劣るから、君達韓国人のような
優秀な民族の血を日本人に入れない限り、他人やアジアに寄生して生きる害虫日本人
が増えるだけだ」とした。日本の古代歴史についても「韓半島南部の権力者が日本の
国家を樹立したもの」と述べた。・・・・( ソウル発外電 2009/12/13)

【トンデモ史観】小沢一郎・韓国講演
ttp://www.youtube.com/watch?v=uX7xFMvCly8&feature=youtube_gdata
【売国】小沢一郎幹事長言行録
ttp://www.youtube.com/watch?v=NXjgD4jb_Jg&feature=channel

0051EM114-48-95-102.pool.e-mobile.ne.jp2010/05/31(月) 23:42:10ID:dCMCj0N4
http://tsushima.2ch.net/test/read.cgi/newsplus/1275313544/20

質問あげ
0052nobodyさん2010/06/01(火) 07:26:04ID:qOSq8mL1
$option = array (
"src" => ここ,
"folder" => "folder/",
"size" => 120
);

そこに配列の格納された変数を指定したいんですが、
どうすればいいのでしょうか
0053nobodyさん2010/06/01(火) 08:11:26ID:???
>>52
そこってどこだ?こういうこと?

<?php
$option = array (
"src" => 'ここ',
"folder" => "folder/",
"size" => 120
);

var_dump($option['src']);
string(6) "ここ"
0054nobodyさん2010/06/01(火) 08:29:02ID:qOSq8mL1
>>53
わかりにくい書き方してすいません。
こういうことがしたいんです。

$hairetu = array ('aaa', 'bbb', 'ccc');

$option = array (
"src" => $hairetu,
"folder" => "folder/",
"size" => 120
);

配列のうちの一つを指定するなら、$hairetu[0]などで可能なんですが
配列に含まれるすべての値を指定したいんです。foreachでループさせるときのように。
0055nobodyさん2010/06/01(火) 09:34:11ID:???
その書き方で  $option["src"]にすべて入るけど違うの?

foreach( $option["src"] as $var ) {
print $var;
}
0056nobodyさん2010/06/01(火) 09:41:23ID:???
質問の意味が分からない
0057nobodyさん2010/06/01(火) 11:11:13ID:qOSq8mL1
54
すいません、自己解決しました。
foreachループの中に入れたらうまくいきました。
どうもお騒がせしました。
0058nobodyさん2010/06/01(火) 17:52:51ID:k/zNPSvj
php.ini
display_errors Offのまま、
特定のディレクトリのスクリプトだけ表示させるという方法はないでしょうか?
0059nobodyさん2010/06/01(火) 18:01:26ID:???
ini_set('display_errors', 1);
0060nobodyさん2010/06/01(火) 18:07:39ID:???
PEAR DB + ORACLE 使ってるんだけど、number型の0.01を取得すると、
文字列の".01"が帰ってきます。
"0.01"を取得するにはどうすればよいですか?
0061nobodyさん2010/06/01(火) 18:26:56ID:???
掲示板を作成してるのですが
$comにhogeが入ってる場合NGワードが入ってますというエラー文を出すにはどうすればいいのでしょうか
0062nobodyさん2010/06/01(火) 18:29:03ID:???
strstr
0063nobodyさん2010/06/01(火) 18:30:18ID:???
to_char
0064nobodyさん2010/06/01(火) 18:31:14ID:???
>>63は >>60の SQLへ
0065nobodyさん2010/06/01(火) 19:50:51ID:6jzz/jSk
ereg_replaceからpreg_matchに切り替えをしたいのですが、
よく分かりませんでした。

$rcd = ereg_replace("\./", "", $filename22);
$dr6 = ereg_replace("\./", "", $thum);

$rcd = preg_match("(\./)", "", $filename22);
$dr6 = preg_match("(\./)", "", $thum);

これでは機能しません。どう記述したらいいでしょうか?
0066nobodyさん2010/06/01(火) 19:54:44ID:???
>>65
replaceをやめたいというのは本意なの?
0067nobodyさん2010/06/01(火) 19:55:46ID:???
$rcd = preg_match("/(¥.¥/)/", "", $filename22);
$dr6 = preg_match("/(¥.¥/)/", "", $thum);

左右を/で囲わないとだめ、もしくは以下のような感じ

$dr6 = preg_match("|(¥./)|", "", $thum);
0068nobodyさん2010/06/01(火) 19:56:54ID:???
と思ったらereg_replaceかよw
0069nobodyさん2010/06/01(火) 20:31:05ID:6jzz/jSk
$rcd = preg_match("/(\.\/)/", "", $filename22);
$dr6 = preg_match("/(\.\/)/", "", $thum);

$rcd = preg_match("|(\./)|", "", $filename22);
$dr6 = preg_match("|(\./)|", "", $thum);

$rcd = preg_match("|\./|", "", $filename22);
$dr6 = preg_match("|\./|", "", $thum);

試しましたが値は0しか帰ってきません・・・・
0070nobodyさん2010/06/01(火) 20:44:06ID:???
>>69
>>66
0071nobodyさん2010/06/01(火) 20:45:49ID:???
preg_matchの構文がおかしい
マニュアルみたらすぐ解決するのになぜ見ないかね
./を消すだけならstr_replaceでやればいいじゃん
0072nobodyさん2010/06/01(火) 21:44:02ID:6jzz/jSk
str_replaceで処理するようにしました
ありがとうございました
0073nobodyさん2010/06/01(火) 22:04:52ID:???
超初級質問です
echoの際、シングルクオテーションで囲まれた$変数はそのまま$つきで
表示されるはずなんですが、以下はなんでちゃんと、
$変数の中身が表示されるんでしょう?

echo '<a href="check.php?id='.$row['id'].'">チェック</a>'
0074nobodyさん2010/06/01(火) 22:16:37ID:???
シングルクォーテーションに囲まれてないから
0075nobodyさん2010/06/01(火) 22:17:59ID:???
途中で送っちゃった
'<a href="check.php?id=' . $row['id'] . '">チェック</a>' 
なのだよ
0076nobodyさん2010/06/01(火) 23:55:39ID:???
シングルクォーテーションに囲まれてないから
0077nobodyさん2010/06/02(水) 08:29:32ID:???
囲まれた・・・
0078nobodyさん2010/06/02(水) 10:25:39ID:???
しかも熟女に
0079EM114-48-32-41.pool.e-mobile.ne.jp2010/06/02(水) 11:06:30ID:mhIc5LxU
質問受付あげ
0080nobodyさん2010/06/02(水) 15:28:49ID:1PsJc2A4
質問です

VBで作ったものをPHP上で動作させることはできますか?
それはどのようにして実現できますか?


宜しくお願い致します
0081nobodyさん2010/06/02(水) 15:32:01ID:???
system
0082nobodyさん2010/06/02(水) 15:32:50ID:1PsJc2A4
質問が悪いですかね?
値の受け渡しとかではなく、VBの画面をそのままWebアプリとして使いたいのです

フレームか何かでその部分だけはVBの部分と独立させてやれると尚いいのですが
0083nobodyさん2010/06/02(水) 16:07:21ID:???
PHPMyAdminのタイムアウトまでの時間を延ばす方法をググったら
config.inc.phpというファイルを編集すれば良いことがわかりましたが、
同名のファイルが4つあって、どれをいじればいいのかわかりません。
OSはUbuntuです。

1) /etc/phpmyadmin/config.inc.php
2) /usr/share/phpmyadmin/config.inc.php
3) /usr/share/phpmyadmin/setup/frames/config.inc.php
4) /var/lib/phpmyadmin/config.inc.php

1を編集しても効果ありませんでした。
2を編集したら時間は延びたようでしたが、元に戻ってしまったようです
(ファイルの中身はちゃんと追記されたままになってるのに)。

結局どれが正しいファイルでしょうか?
0084832010/06/02(水) 16:09:20ID:1gJ1/kVu
IDを出し忘れました。すみません。
0085nobodyさん2010/06/02(水) 16:29:50ID:???
PHPスクリプトのタイムアウト<PHPのタイムアウト(php.ini)<Webサーバのタイムアウト(Apache)<OSのタイムアウト
となってるわけでconfig.inc.phpとやら以外に原因がある可能性は?
0086nobodyさん2010/06/02(水) 16:38:16ID:???
>>82
無理、といいたいところだけど、そういうActiveX作って、PHPでそれを使うフレームを出力すればいけるのかも
0087nobodyさん2010/06/02(水) 16:44:12ID:1gJ1/kVu
>>85
そういう優先順位になってるんですね。

http://ameblo.jp/hyperdev/entry-10345093485.html

上のページを見てやってみたんですが、
「php.iniに設定した、ガベージコレクタの時間より大きくなる場合が多い」というのを防ぐために
ini_set("session.gc_maxlifetime", 18000);
っていう一行を入れてるみたいなので、問題はApacheとOSの設定ってことですかねぇ。

でも、昨日2のファイルに設定した直後はちゃんと有効だったのは何だったんだろう…。
0088nobodyさん2010/06/02(水) 17:41:42ID:???
73です
>>75
ありがとうございます。
おっしゃられてる方法でわかったつもりで、
以下を書くとエラーで怒られてしまいました・・・。

print '<a href='."$_SERVER['PHP_SELF']".'> 削除 </a>';

ほんとは上の文章が動作していたら、
?をつけてGetで変数を送りたいのですが、
?をつける以前につまづいてしまいました・・・
お助けください。
0089nobodyさん2010/06/02(水) 17:55:17ID:???
>>88
print '<a href=' . $_SERVER['PHP_SELF'] . '> 削除 </a>';

あと$_SERVER['PHP_SELF']の部分がソース名(php名)をひっぱってきたいだけなら
$_SERVER['SCRIPT_NAME']を使った方が良い
0090nobodyさん2010/06/02(水) 18:29:44ID:???
'<a href='          ←これは文字列
$_SERVER['PHP_SELF']  ←これもの中身も文字列

文字列同士を結合するために . (ドット)を使われるんだよ。
正しく書くと、

print '<a href=" . $_SERVER['PHP_SELF']. "> 削除 </a>';

となる。
hrefのクォートはシングルじゃなくてダブルね。

というか、リンク先を自分と同じスクリプトにするなら $_SERVER['PHP_SELF'] すら要らんよね。
クエリ文字を付けたリンクにしたいなら↓こんな感じ。

print '<a href="?del=1"> 削除 </a>';

あと余談だけど、ダブルクォーテーションの中に変数を入れる場合は
変数を { } で囲む癖をつけておいたほうがいいよ。
009190訂正2010/06/02(水) 18:56:09ID:???
いろいろ間違っててスマソ


これもの中身も文字列
   ↓
これの中身も文字列

文字列同士を結合するために . (ドット)を使われるんだよ。
   ↓
文字列同士を結合するために . (ドット)が使われるんだよ。

print '<a href=" . $_SERVER['PHP_SELF']. "> 削除 </a>';
   ↓
print '<a href="' . $_SERVER['PHP_SELF']. '"> 削除 </a>';

hrefのクォートはシングルじゃなくてダブルね。
   ↓
href=の後のクォートはシングルじゃなくてダブルね。
0092nobodyさん2010/06/02(水) 20:18:19ID:???
>>91
今回の例ではダブルだというだけだよね。状況によってはシングルの方が便利だし。
0093nobodyさん2010/06/02(水) 22:14:08ID:D8F23o+y
>>90
何で変数を{}で囲まないといけないんですか?
0094nobodyさん2010/06/02(水) 22:39:11ID:???
それが変数出力だとコードを見てすぐわかるから
0095nobodyさん2010/06/02(水) 22:44:45ID:???
>>94
そんな理由じゃないと思う。
ダブルクォートに囲まれた部分で配列を使おうとすると分かる。
0096nobodyさん2010/06/02(水) 22:56:54ID:???
配列使わないときも囲う癖をつけるべきって人は>>94が理由でしょう
0097nobodyさん2010/06/02(水) 23:02:05ID:???
>>94
{}で囲うのは俺もオススメする。
0098nobodyさん2010/06/02(水) 23:02:05ID:???
>>93

>>94の言うとおり、わかりやすいっていうのが理由の一つ。

あと、{ } を付ければ前後にスペースがいらない。
例えば、次の3つを比較するとわかる。

(1) echo "ab $text cde";
(2) echo "ab$textcde";
(3) echo "ab{$text}cde";

1はOKだけど、出力結果にもスペースが入ってしまう。
2は不可。
3はOKで、スペースも入らない。

あと、速度も違うんだけど、このことはあまり知られてないのかなぁ。
ちなみに、配列でキー名に ' ' を付けるのと付けないのも速度に差が出る。
0099982010/06/02(水) 23:03:54ID:???
ちょっと補足。

2は不可っていうか、エラーにはならないけど期待する表示にならないってことね。
0100nobodyさん2010/06/02(水) 23:27:40ID:???
ちなみに当然だけど文字列リテラルで
ダブルクォートとシングルクォートを使うとでも速度は違うね。
0101nobodyさん2010/06/02(水) 23:31:43ID:???
>>98
{} なんぞ使ってて速度を気にするような人なんておらんだろ?
そもそも文字列内に変数を展開なんてしないし
0102nobodyさん2010/06/02(水) 23:37:57ID:???
速度の違いが分かるほど複雑なスクリプト組んでるわけじゃないけど
>>100の理由でシングルしか使ってないな。妄信的に
0103nobodyさん2010/06/02(水) 23:57:58ID:yUWMqjwo
whileで条件式が数値の0のときにも、
TRUE判定させるにはどうしたらいいですか?

while($num=strpos(゙あかあおしろ゙,゙あが,0))
)
で一番最初の文字列にヒットした場合弾かれてしまいます。
何かいい解決法があれば、どうかご教示をお願いします。
0104nobodyさん2010/06/03(木) 00:03:18ID:???
>>103
while (($num = strpos('あかあおしろ', 'あか', 0)) !== false) {}
0105nobodyさん2010/06/03(木) 00:42:40ID:???
>>102
{}使ったほうがすっきりする場合は使ってる。
0106nobodyさん2010/06/03(木) 01:25:57ID:???
88です
>>91
ありがとうございます。
print '<a href="'.$_SERVER['PHP_SELF'].'"> 削除 </a>';
は無事動きました。
href="
の部分のダブルクオテーションは文字という考え方ということですよね?
なので、
'<a href="'
という、シングルクオテーションで囲まれている
<a href="
が文字と言う考え方であってますでしょうか?


次に、変数を""というダブルクオテーションで囲むと、
その囲まれてる変数は展開されるという認識の下、以下にしてみるとダメでした。
print '<a href="'."$_SERVER['PHP_SELF']".'"> 削除 </a>';

今回、a href=の後のクオートがもともとのHTMLの仕様では、
ダブルクオテーションであり、そのあとに、変数を囲むダブルクオテーションが続くと
何か問題が出てしまうのでしょうか?


さらに、{}で変数を囲めるということでためしてみました。

print '<a href="'{$_SERVER['PHP_SELF']}'"> 削除 </a>';
も、
print '<a href="'.{$_SERVER['PHP_SELF']}.'"> 削除 </a>';
も動きませんでした。
書き方がまちがっていますでしょうか?
0107nobodyさん2010/06/03(木) 01:26:34ID:???
展開可能とはいえ文字列ん中に変数入れるとか普通気持ち悪くね?
HTMLの中に書くって事でスタートしてるからこうなってるんだと思うよ
つまりビュー層のハナシ
zend のコーディング規約でもシングルクオートで変数は連結しろとかなかったっけ?
他言語の使い手にも読みやすいって事まで考えてそうなってると思うんだけどな
0108nobodyさん2010/06/03(木) 01:35:04ID:???
>>106
<a href="
が文字と言う考え方であってますでしょうか?

あってる

print '<a href="'."$_SERVER['PHP_SELF']".'"> 削除 </a>';
では,"$_SERVER['PHP_SELF']" のパースができない(だったような

print '<a href="' . "{$_SERVER['PHP_SELF']}" . '"> 削除 </a>';
なら動くと思う。

素直に
print '<a href="' . $_SERVER['PHP_SELF'] . '"> 削除 </a>';
でいいじゃんかよ

ちゃんとエスケープもしろよ?歯も磨けよ?
0109nobodyさん2010/06/03(木) 01:35:14ID:???
>>106
> '<a href="'
> という、シングルクオテーションで囲まれている
> <a href="
> が文字と言う考え方であってますでしょうか?

あってる。

> 次に、変数を""というダブルクオテーションで囲むと、
> その囲まれてる変数は展開されるという認識の下、以下にしてみるとダメでした。
> print '<a href="'."$_SERVER['PHP_SELF']".'"> 削除 </a>';

print '<a href="'."{$_SERVER['PHP_SELF']}".'"> 削除 </a>';
にしてみて。

> print '<a href="'{$_SERVER['PHP_SELF']}'"> 削除 </a>';

.が無いし、{}が不要。

> print '<a href="'.{$_SERVER['PHP_SELF']}.'"> 削除 </a>';

{}が不要。
0110nobodyさん2010/06/03(木) 01:36:35ID:???
>>106
$_SERVER['PHP_SELF']はセキュリティ上の問題があるのでHTMLとして出力する物には使わない
$_SERVER['SCRIPT_NAME']またはbasename(__FILE__)で代用
0111nobodyさん2010/06/03(木) 01:40:41ID:???
$_SERVER['PHP_SELF']や$_SERVER['SCRIPT_NAME']を使わなくても
<a href=""> 削除 </a>
でいけるやん
0112nobodyさん2010/06/03(木) 03:47:38ID:???
みんなよくつきあうな。どうみても釣りじゃん。
0113nobodyさん2010/06/03(木) 05:12:55ID:???
{}で囲むのはダブルクオテーション中のときだけでいいです

//ダブルの場合
echo "こんにちわ、{$name}さん。";

//シングルの場合
echo 'こんにちわ、' . $name . 'さん。';
0114nobodyさん2010/06/03(木) 05:28:29ID:XbPCpr1k
>>104
ありがとうございます。
もうひとつお伺いしたいのですが、文字列の指定位置に文字列を挿入する場合の関数はありますか?
substr_replaceの使用を考えたのですが、置き換え文字数を0に指定するとうまくいきません。
1以上にして置き換え後の文字列に消した文字を含ませるのもスマートではない気がします。
どうかよろしくお願いします。
0115nobodyさん2010/06/03(木) 07:26:38ID:???
>>114
そういうのはそのまま考えて分割して連結でよくね?
マルチバイトとか絡んでくると面倒になるし
0116nobodyさん2010/06/03(木) 07:28:03ID:???
sprintfとか使うけどな
0117nobodyさん2010/06/03(木) 07:36:18ID:LdZGbuVn
fc2とかのアクセスランキングで、ランキングを表示させているサイトは混在する文字コードなのに
文字化けせずに表示できているのはどういった仕組みなのでしょうか。

よろしくお願いいたします。
0118nobodyさん2010/06/03(木) 07:37:57ID:???
>>117
変換してんじゃないの?
0119nobodyさん2010/06/03(木) 08:12:37ID:LdZGbuVn
>>118

mb_convert_encoding autoとかででしょうか?
0120nobodyさん2010/06/03(木) 08:26:57ID:???
PHP でやってるとしたらそうじゃね? auto は微妙だけど
0121nobodyさん2010/06/03(木) 10:56:12ID:???
>>109
>>110
>>111
>>113
ありがとうございました。
おかげさまで完全に理解できました!!
0122nobodyさん2010/06/03(木) 12:10:17ID:???
>>121
おめ。

どうやって勉強してるかわからないけど、
今の知識だとセキュリティ対策が十分にできないと思うから
本とか読んで学んだほうがいいよ。
0123nobodyさん2010/06/03(木) 15:18:39ID:???
>>89 >>108
元の質問者とは別人ですが、便乗して質問させてください

$_SERVER['PHP_SELF']より$_SERVER['SCRIPT_NAME']のほうが安全ということですが、
$_SERVER['SCRIPT_NAME']を使ってもエスケープは必要なんでしょうか?
0124nobodyさん2010/06/03(木) 16:24:14ID:???
>>123
確かにそちらの方が安全だが、アンカーの先にはそれについて言及していない。
誰にレスをしたんだ?
0125nobodyさん2010/06/03(木) 16:51:43ID:???
>>123
なぜ危険/安全なのか理解してる?
「php_self script_name」で検索すれば比較してるサイトがいっぱいでてくるよ
0126nobodyさん2010/06/03(木) 16:55:55ID:???
ttp://www.ipa.go.jp/security/awareness/vendor/programmingv2/contents/003.html
>第1章 総論
>より良いWebアプリケーション設計のヒント
>(1) プログラミング言語の選択
>1) 例えば、PHPを避ける
0127nobodyさん2010/06/03(木) 17:15:09ID:???
>>124
> 誰にレスをしたんだ?

主に>>108の「ちゃんとエスケープもしろよ」へのレスです。

>>125
はい、$_SERVER['PHP_SELF']のほうをそのまま出力すると
JavaScriptを仕込まれてしまう可能性があるということですよね?
なので、エスケープする理由はわかります。

お尋ねしたいのは、_SERVER['SCRIPT_NAME']でもエスケープする必要があるのかということです。
SCRIPT_NAMEにはPHP_SELFのようなXSSの脆弱性はないと思ってたんですが、
何か特殊な方法による攻撃の対象になることがあるんでしょうか?
0128nobodyさん2010/06/03(木) 17:55:31ID:???
>>127
http://www.php.net/manual/ja/reserved.variables.server.php
'PHP_SELF'
現在実行しているスクリプトのファイル名です。
ドキュメントルートから取得されます。
例えば、http://example.com/test.php/foo.bar というアドレス上にあるスクリプトでは
$_SERVER['PHP_SELF'] は /test.php/foo.bar となります。

'SCRIPT_FILENAME'
現在実行されているスクリプトの絶対パス
0129nobodyさん2010/06/03(木) 17:57:58ID:OUHRb8my
CentOS5.3でPHP5.1を使っています。

クライアントにバイナリデータを送るときに
fopenとfreadをとechoを使ってるんですが、
クライアント側からはバイナリデータが壊れていると
言われたりしています。
freadってバイナリセーフな関数なんですよね?

何か他に注意すべきところがありますか?
0130nobodyさん2010/06/03(木) 18:08:47ID:???
>>129
fopenでmodeにbフラグ付けてる?
0131nobodyさん2010/06/03(木) 18:13:58ID:iSHgRF9v
requireとかrequire_onceする静的?なモジュールと
.soをextension_dirで登録する動的?タイプのモジュール。
後者はコンパイルなんかのコスト分遅いっていう認識はあってますか?


0132nobodyさん2010/06/03(木) 18:15:38ID:iSHgRF9v
ごめんなさい文末一行
○前者はコンパイルなんかのコスト分遅いっていう認識はあってますか?
×後者はコンパイルなんかのコスト分遅いっていう認識はあってますか?
0133nobodyさん2010/06/03(木) 18:19:41ID:???
>>130
はい。読み込み専用で開けばよいので
パラメータは'rb'をつけています。

0134nobodyさん2010/06/03(木) 19:59:49ID:???
>>133
file_get_contentsやreadfileは試してみた?
0135nobodyさん2010/06/03(木) 20:02:16ID:???
>>131
requireやincludeは外部ファイルのスクリプトを読み込むもの。
extension_dirなどの拡張モジュールは、
Cなどの低級言語で書かれているのでPHPより高速で、当然にコンパイルされているので速い。
0136nobodyさん2010/06/03(木) 20:22:42ID:???
>>129
PHPスクリプトにBOMが付いてないかい
こういう問題はHTTPをモニタリングするツールを入れて
実際に送られたヘッダとデータを確認するのがいいんだが
0137nobodyさん2010/06/03(木) 21:00:55ID:???
>>133 >>136

先ほど自己解決しました。
おそらく・・なんですが。
サーバ側のファイルとクライアントでダウンロードしたファイルを
比較したところ、クライアント側には行頭に改行コードが入ってました。

そのせいでファイルサイズも1バイト分差異がありました。

対策としてサーバ側のスクリプトファイルの
不要な改行コードを削除しました。

<?
--色々なロジック--
?>
 ←この辺りの不要な改行コードを削除。


そうしたところ、こちらが意図するとおりにファイルを
送ることが出来ました。

どうもありがとうございました。
0138nobodyさん2010/06/03(木) 21:02:06ID:???
137ですが、
>>133ではなく、>>134でした。

申し訳ありません。
0139nobodyさん2010/06/03(木) 21:30:19ID:???
SAPIのCGIを見ると、「PHP5.3まで」とあるんですが、PHP5.4以降はどうなってしまうのでしょうか?

ttp://jp2.php.net/manual/ja/function.php-sapi-name.php
0140nobodyさん2010/06/03(木) 21:56:52ID:???
>>137
XML吐く時に同じ事食らったよ
以来終了タグ ?> は書かなくなった
zend framework のコーディング規約でも書くなってなってる
0141nobodyさん2010/06/03(木) 22:36:01ID:???
>>140
バカよけのための規約で、結構前からあるにはある
■ このスレッドは過去ログ倉庫に格納されています