【PHP】下らねぇ質問はここに書き込みやがれ 25

このエントリーをはてなブックマークに追加
926925:2006/08/06(日) 04:16:48 ID:EsUUYOdr
訂正

○キャストされる
×キャストされてから評価される
927nobodyさん:2006/08/06(日) 04:31:31 ID:???
マニュアルの「型の相互変換」が参考になると思われ
928nobodyさん:2006/08/06(日) 04:37:37 ID:???
phpversion()はおもっくそ引数に文字列を取ると書いてある
内部のzvalについてはZendのドキュメントかソースコードを読
929925:2006/08/06(日) 04:58:44 ID:EsUUYOdr
すいません、例えが悪かったです。。
phpversion()についてではなく、式の中で型がどう自動変換され評価されるか についてです。phpversion()は例として出しました。
型についてのマニュアルもひととおり見ました。

if("1.1.1">"1.1.0"){
print("true");
}

出力結果:true

↑このような式がなぜ成立するのか、内部的にはどう型変換などが行われているのか について解りません。
1.1.1 なんて数値はfloatとしても不正ですから、floatに変換され、評価されてるわけではないというのは解るんですが・・
だったら、アスキー値として評価されてるのでしょうかね??そのへんが解りません。

あと、<や>などの演算子は必ずしも数値を要求するわけではないのでしょうか?
930925:2006/08/06(日) 05:14:00 ID:EsUUYOdr
あ、なんか自己解決したっぽいです。。ありがとうございました。
要するに、↓の式も成立するわけですね。

if("A"<"B"){
print("true");
}
出力結果:true

という事は、
if("1.1.1">"1.1.0"){
print("true");
}

if("\x31\x2E\x31\x2E\x31">"\x31\x2E\x31\x2E\x30"){
print("true");
}
は等価で、 > は数値を要求するわけではない(数値変換して評価するわけではない)という事ですね?
間違ってたらつっこみお願いします
931nobodyさん:2006/08/06(日) 05:45:30 ID:???
Yes。strcmpみたいな処理だと思いねえ
詳しくはzend_operators.c
932925:2006/08/06(日) 06:01:37 ID:???
ありがとうございます。
zend_operators.c というとphpそのもののソースコードのようなものですよね?
ちょっと敷居が高そうですが・・(汗 余裕があれば参考にしてみます。
933nobodyさん:2006/08/06(日) 06:15:34 ID:???
教えてください。
関数 mb_http_outputは任意の変数がどんな文字コードでも出力時には指定文字コードに変換してくれるのでしょうか?
934nobodyさん:2006/08/06(日) 06:26:34 ID:???
PHPのzvalってPerlで言うSVのこと?
935nobodyさん:2006/08/06(日) 08:19:57 ID:CMHstoCK
レン鯖で、自分のアカウントが鯖にどれだけ負荷がかかってるか調べるようなことを、そのアカウントに設置したPHPからできますか?そもそもPHPでできるんでしょうか?
936nobodyさん:2006/08/06(日) 10:16:10 ID:???
キャッシュされちゃうんだが・・・
ブラウザ側でキャッシュしない設定を行えば正常なんですけど。

普通、ページ内容が変化するのでキャッシュしないはずなんだけど。。。
なんででしょう?
937nobodyさん:2006/08/06(日) 10:20:16 ID:???
>>933
内部文字コード→出力文字コードの変換しかしないと思う。
938nobodyさん:2006/08/06(日) 10:23:34 ID:???
>>936
URLにパラメータが付加されてればキャッシュしないことが多いけど、
パラメータが無ければ内容がなんであれキャッシュ読んじゃうのが一般のブラウザの設定。
それを防ぐにはブラウザに送信するヘッダ出力に「変更があるよ」かもしくは
「このページはキャッシュ禁止」というサインを出さないといけない。
939nobodyさん:2006/08/06(日) 10:26:34 ID:???
>>938
一応、これだけ書いてますが・・・ダメです。

<HTML>
<HEAD>
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Cache-Control" content="no-cache">
<meta http-equiv="Expires" content="Sat, 01 Jan 2000 00:00:00 GMT">

<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=EUC-JP">
<TITLE>INS 試験</TITLE>
</HEAD>
<BODY>

<?
以下PHP
940nobodyさん:2006/08/06(日) 10:40:34 ID:???
>>939
METAで書いても効果は薄い。ちゃんとheader()で出力してみよう。
941nobodyさん:2006/08/06(日) 10:52:28 ID:???
>>935
ちょっと厳しいと思う。
942nobodyさん:2006/08/06(日) 10:56:06 ID:???
>>940
大ありがとうございます!早速やってみたら・・・GJでした。

<?
header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // 過去の日付
?>

(参考)
http://phpspot.net/php/man/php/function.header.html
943nobodyさん:2006/08/06(日) 11:44:21 ID:???
GJって・・・。回答してくれた相手にそれはおかしくないか?
944nobodyさん:2006/08/06(日) 12:00:41 ID:???
中学生にそこまで求めるのは酷だと
945nobodyさん:2006/08/06(日) 12:02:00 ID:???
だからこそここで正しい使い方を教えてやるんじゃないのか?
946942:2006/08/06(日) 12:06:05 ID:???
>>943
どうもすみませんでした。
思わず喜んでしまいました・・・
947nobodyさん:2006/08/06(日) 12:48:57 ID:???
いいんだよ
948nobodyさん:2006/08/06(日) 12:56:28 ID:???
グリーンだYO!!
949nobodyさん:2006/08/06(日) 14:17:59 ID:???
ファイルを使ってデータの読み書きをする時、
file_put_contents("./data.php", "<?php\n\$data = " . var_export($data, true) . ";\n?>");
みたいな感じで PHP スクリプトとして書き出して、読み込む時には
include("./data.php"); で読み込んでいるのですが、この方法、何かやばかったりするでしょうか。
基本的にデータファイルへの直アクセスは .htaccess などではじいています。
950nobodyさん:2006/08/06(日) 14:27:22 ID:hfhMCxc1
あっ、ID が出ていない。
951nobodyさん:2006/08/06(日) 14:41:44 ID:???
>>949
面白いとは思う。

でも余り一般的な手法では無いと思う。
952nobodyさん:2006/08/06(日) 14:42:34 ID:???
別にいいんじゃないの?
953nobodyさん:2006/08/06(日) 14:42:38 ID:???
>>949
var_exportの引数$dataに何が与えられるかによる。
例えば外部からくる変数だと、ちゃんとチェックしないと心配かな。
954nobodyさん:2006/08/06(日) 14:45:18 ID:???
>>953
それは別に出力がPHPコードであろうとなかろうと一緒の気がするんだが。
自分でPHPコード化してるならともかく、var_exportを通してる時点で
エスケープ処理もできてるんだし、他の変数を破壊されるような心配はないだろ。
955nobodyさん:2006/08/06(日) 15:17:40 ID:???
>>949
internal_encodingがSJISでデータに日本語を含んだりするわけじゃなきゃ問題ないのでは?
SJISでそういう手法を使うとvar_exportはSJISの特殊な構文パースに対応しないから、
$data = '表';
とかいうデータだった場合、
期待する出力
<?php
$a = '表';
?>
実際の出力
<?php
$a = '表\';
?>
となって、include時にパースエラーを起こす。
ま、常識的にUTF-8かEUC-JPでスクリプト書いてれば特に心配はないよ。
956949(950):2006/08/06(日) 15:34:08 ID:hfhMCxc1
>>951, 952
自分の知らない脆弱性か何かがあるかもしれないと思い質問しましたが、平気そうですか。ありがとうございます。
>>953
$data = array(0 => array('name' => 'xxx', 'date' => 'xx.xx.xx'), 1 => 以下略);
のような多次元配列が格納されています。外から来たものは一応個別にサニタイズしています。
>>954
UTF-8 で書いています。心配はあまりしなくても良いみたいですね。ありがとうございます。

皆様ありがとうございました。
957949(950):2006/08/06(日) 15:35:47 ID:hfhMCxc1
>>954 ではなく >>955 でした。訂正します。
958nobodyさん:2006/08/06(日) 16:00:27 ID:???
PHPで半角カタカナが連続するか末尾に来るPOSTを発行すると文字化けするのですがどう対処すればよろしいでしょうか?
959>>958:2006/08/06(日) 16:11:32 ID:???
例:
アケwケ→厩w
960nobodyさん:2006/08/06(日) 16:26:01 ID:???
>>958
文字コードは何を使ってるの。
961>>958:2006/08/06(日) 16:33:32 ID:???
>>960
ShiftJISです。
php.iniの内部文字コードもShiftJISです
962nobodyさん:2006/08/06(日) 16:55:12 ID:???
>>949
"$data"が固定されるとか、1ファイル1データ制限とかはまあ仕方無いとして、特に問題無いんじゃないかな。
問題が出て来たとしてもすぐにserialize/unserializeに切り替えられるし。

>>958
sjis送信されたテキストがEUCとして扱われている。設定ミスだね。
例を出せたのは良いけど、その程度の知識で内部エンコーディングにsjis使うとデメリットしか出ないよ。
963>>958:2006/08/06(日) 17:04:29 ID:??? BE:270282645-DIA(41010)
>>962
と思ったらできました。ありがとうございます。
mbstring.http_input = auto

mbstring.http_input = SJIS
964>>958:2006/08/06(日) 17:06:36 ID:???
と思ったらじゃなくて厳密には「>>962を見て」だね
ともかくありがとうございました ノシ
965nobodyさん:2006/08/06(日) 17:48:40 ID:???
>>962
949の例が単純すぎるだけで、別に1ファイル1データ制限とかは無いと思う。
例えば
$save = "<?php\n";
foreach($envlist as $name => $value) $save .= "\$$name = " . var_export($value, true) . ";\n";
$save .= "?>";
file_put_contents($savefile, $save);
とする程度で普通に汎用化できるし。

変数名固定問題も、関数内でローカル変数としてincludeして、returnでリファレンスを返すか
指定した別の変数に代入するって仕組みにすれば全然問題ない。

後はunserialize()とincludeでのPHP構文パースとどっちが高速かの勝負だろう。
コードキャッシュと組み合わせればこっちの方が性能は高いかもしれんよ。
966962:2006/08/06(日) 18:49:59 ID:???
>>965
確かに制限は避けられたね。
967nobodyさん:2006/08/06(日) 19:21:37 ID:VRNU21+t
鮎川寛さんの「 PHP 開発日誌 」ってサイトどこいっちゃったの?
そこで配布していた『HTML テンプレート』を使いたいんだけど
見当たらなくて困ってます。

どこに移ったか知っている方、
もしくはPHP5 版『HTML テンプレート』を
再配布しているところを知っている方
教えてください。
968nobodyさん:2006/08/06(日) 19:41:29 ID:???
Smartyでいいじゃん、って思ったりもするんだが。
そういう話なら
【Smarty】PHPのテンプレートエンジン【Flexy】
http://pc8.2ch.net/test/read.cgi/php/1118799352/
こっちの住人の方が詳しいと思う。
969nobodyさん:2006/08/06(日) 19:57:58 ID:???
>>967
閉鎖した模様
970nobodyさん:2006/08/06(日) 23:12:52 ID:???
ttp://php.s3.to/man/features.http-auth.html
こちらに書いてあるような方法でBASIC認証をした後、ブラウザを閉じるまで $_SERVER['PHP_AUTH_USER'] の情報が維持されますが(ブラウザのクッキーに?)、ログアウトさせて明示的に情報を消去させる(クッキーの?)ためにはどうすればよいでしょうか?
971nobodyさん:2006/08/06(日) 23:20:32 ID:???
nai
972nobodyさん:2006/08/07(月) 03:11:14 ID:???
php4 -> php5に移行しているのですが
$thisで何故かエラーになってしまいます。
全く分からないのでもし分かる方いらっしゃいましたらお願いします
class checked {

function checkFData() {
global $fobj;
global $DATA;

$fobj = new FDataUtil();
$fobj->setVar('title');
$fobj->setVar('cate');
$fobj->setVar('aflg');
$fdata = $fobj->getFData();
$this->DATA = $fdata; //ここ
}
}
973nobodyさん:2006/08/07(月) 03:23:21 ID:???
エスパー希望のガイドラインでやれ
974nobodyさん:2006/08/07(月) 03:55:10 ID:???
助けてください!お願いします(><)
975nobodyさん
>>972
どういうエラーが出てるかをまずださないと。

っていうかなんか汚いクラスだな。