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

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

レス数が950を超えています。1000を超えると書き込みができなくなります。
0001nobodyさん2006/02/24(金) 22:05:48ID:YHkZgU8b
PHPに関するくだらねぇ質問用スレです。 
ここなら本スレで回答のないお前の下らない質問に回答があるかも知れません。 

まず読め【PHP マニュアル】 
http://www.php.net/manual/ja/

本スレ【PHP】質問スレッドpart33【php】
http://pc8.2ch.net/test/read.cgi/php/1140027592/l50

前スレ【PHP】下らねぇ質問はここに書き込みやがれpart16
http://pc8.2ch.net/test/read.cgi/php/1139146534/l50

過去スレは>>2
0879nobodyさん2006/03/14(火) 14:15:25ID:???
>>876
キーワードが文字化けしてるが壊れてはいない
0880nobodyさん2006/03/14(火) 14:30:02ID:???
>>878ってできないんだな
ttp://php.s3.to/man/language.variables.variable.html
0881nobodyさん2006/03/14(火) 14:31:41ID:???
>>877
こんな感じになった。
<?php
// デバッグ用
// エラーは全て表示する
error_reporting(E_ALL);
function getSGlobal (&$gname, $name) {
return (isset ($gname[$name]))?($gname[$name]):(NULL);
}
$hogehoge = getSGlobal($_GET, "hogehoge");
echo $hogehoge;
?>
0882nobodyさん2006/03/14(火) 14:45:52ID:???
三項演算子 (〜?〜:〜);

ほんと便利だよね。
0883nobodyさん2006/03/14(火) 15:06:54ID:???
IDとパスワードでログインする仕組みをセッションを使って作ったのですが、
ログイン後しばらく放置しておいてからアクセス(更新など)すると、ログアウトされてしまいます。

これは放置時間が一定以上続いた場合にセッション情報が破棄されているのだろうと思いますが、
このセッション破棄までの時間は、php.iniのどこをいじればいいのでしょうか?
「session.cache_expire」が関係あるのかとも思いましたが、デフォルトの「180」のままなのに、
180分も経たないうちに(具体的には10分くらいで)ログアウトになってしまいます。
0884nobodyさん2006/03/14(火) 15:12:29ID:???
>>882
俺への何かのあてつけかと一瞬勘ぐった。
08858822006/03/14(火) 15:14:33ID:???
>>884
あてつけのつもりはないから安心汁
0886nobodyさん2006/03/14(火) 15:14:58ID:???
>>883
http://php.s3.to/man/ref.session.html
session.gc_maxlifetime integer
0887nobodyさん2006/03/14(火) 15:17:49ID:???
>>885
ってか三項演算子って言葉って知ってて当然なんかな?
(〜?〜:〜);と全部記号だから検索でヒットさせられるのが無くて困る。
Cだと#defineと併用して使うからマクロ関数とかばっかり出てくるし。
0888nobodyさん2006/03/14(火) 15:24:55ID:???
>>887
三点演算子だと思い込んでいて検索でかからなくて困ってたことが・・・。

http://www.sra.co.jp/people/t-ishii/php_new/php4_new.html

第一部 PHPをはじめよう(3360KB)

だけでもいいから読んどいた方がいいよ。
0889nobodyさん2006/03/14(火) 15:25:36ID:???
>>887
マニュアルをじっくり読めば書いてある
08908882006/03/14(火) 15:26:55ID:???
「ふざけんな、そんな初心者向けの本なんて読むかbk」と言われそうだから追記
ざっとでいいから、眺めれば「三項演算子」という言葉ぐらいは分かるって意味ね。
0891nobodyさん2006/03/14(火) 15:27:21ID:???
>>886
あいたしゅ。
0892nobodyさん2006/03/14(火) 15:48:49ID:???
sessionスタートさせて(セッション用プログラムをrequire)、
セッション値を参考にしてダウンロード場所を選択して
ファイルをダウンロードする仕組みを作ってるんですが、
どうもセッション用プログラムをrequireすると
上手くダウンロードログが表示されません。

セッション用プログラムをコメントアウトすると機能するので、
おそらくヘッダー関係あたりの問題かなと思うのですが、
何か良い解決方法は無いでしょうか。
0893nobodyさん2006/03/14(火) 16:36:12ID:???
日本語おk
08948772006/03/14(火) 17:02:51ID:???
>>878
>>881
更なるアイディアありがとうございます。
教えていただいた方法を試してみた結果、881に紹介していただいた
方法を自分好みにして、以下のようなコードで記述することにしま
した。

function getSGlobal (&$gname, $name) {
$gname[$name] = isset($gname[$name]) ? $gname[$name] : NULL;
}
getSGlobal($_GET, "hogehoge");
echo $_GET["hogehoge"];

これなら、入力が楽です。本当にありがとうございました。
0895nobodyさん2006/03/14(火) 17:06:30ID:???
〜です。本当にありがとうございました。
0896nobodyさん2006/03/14(火) 18:36:34ID:???
>>892
まず問題点を整理し、そして質問する前に国語の勉強から・・・
0897nobodyさん2006/03/14(火) 18:49:44ID:???
配列を foreach で回すときの
順番って設定した順番になりますが
これは保証されてるのでしょうか?

0898nobodyさん2006/03/14(火) 19:01:58ID:???
>>897
されてるはず。
0899nobodyさん2006/03/14(火) 19:05:12ID:???
>>897
されてる。
0900nobodyさん2006/03/14(火) 19:13:33ID:???
>>899
して
0901nobodyさん2006/03/14(火) 19:57:29ID:???
されてるっけ?
不安になってきた
0902nobodyさん2006/03/14(火) 20:45:04ID:???
>>897
保証はされていないが、設定した順番になる。
0903nobodyさん2006/03/14(火) 20:50:40ID:???
>>901
foreachで取り出される順番はリンクリストに従ってるので
「設定した順番」つうのが通常のpushしていくやりかたなら
保証されてると考えていい。明確に保証するとは書いてなかったと思うけど。
0904nobodyさん2006/03/14(火) 21:33:46ID:???
それが保障されてなかったらasort()なんて意味なくなるだろ。
PHPでの連想配列は格納順番を内部に保持していてその通りに取り出せる。
0905nobodyさん2006/03/14(火) 22:01:08ID:???
>>892
ソースコードを出すのが手っ取り早い。
09068972006/03/14(火) 23:17:06ID:???
>>898-904
みなさんありがとうございました
安心して回します
0907nobodyさん2006/03/15(水) 00:27:49ID:???
>>906
っていうかこんなとこで聞いてるヒマがあったら、
自分で実験して確かめてみりゃあいいのに。。。
ループでecho使えば分かる話だろ。
0908nobodyさん2006/03/15(水) 00:34:04ID:???
>>907
それ、偶然動いてるのか環境依存なのか言語仕様なのか、動きを見ただけでお前は分かるのか?
0909nobodyさん2006/03/15(水) 02:02:25ID:???
>>908
>907じゃないが、俺なら数十回は試すな。
知的探究心ってのは止められないね。
その中で出てきた結果から憶測を何度も繰り返す。
再度何度も試し憶測どおりだったら頭の中に入れとく。

ところでPHPで、OSが違うと処理が変わる事ってあるん?
機会に便乗して質問してみる。
0910nobodyさん2006/03/15(水) 02:19:33ID:???
>>909
数十回試して同じ結果ならそれが正しいと?
0911nobodyさん2006/03/15(水) 02:27:00ID:???
>>910
正しいって言ってるか?好奇心の話だろ?

>>909
そんな話は聞いたこと無いな。インストールはまったく違うけど
0912nobodyさん2006/03/15(水) 02:33:21ID:???
マルチバイト関数はwinでのバグなのか挙動が違うって話はあったような・・

なんか話がずれてる人同士が言い合ってて不毛そうなのでやめたら?
0913nobodyさん2006/03/15(水) 02:36:17ID:???
>>907
むしろお前が暇人
0914nobodyさん2006/03/15(水) 03:14:22ID:???
>>913
このスレでそれは禁句(爆)
0915nobodyさん2006/03/15(水) 04:09:05ID:???
>>908
2〜3回試せば十分。ヲタは何事も粘着質でキモイな。

>>913
なんで? 5分もあれば出来ることだろ。
0916nobodyさん2006/03/15(水) 04:34:09ID:A2wD7hwK
質問です。
print関数の出力先を変える関数、方法をおしえてください。
0917nobodyさん2006/03/15(水) 05:10:12ID:???
>>915
危険なプログラマハケーン
そんなハンパな知識でWebアプリ組むなよ
0918nobodyさん2006/03/15(水) 05:11:37ID:???
>>916
ob_start()、ob_get_contents()
0919nobodyさん2006/03/15(水) 05:11:44ID:???
>>916
どこに変えたいの?
0920nobodyさん2006/03/15(水) 05:13:11ID:???
>>917
お前みたいなヤツは長生きしそうだな。
0921nobodyさん2006/03/15(水) 05:16:13ID:???
ヲタ同士喧嘩してないで、一緒に秋葉原でピザでも食ってろデブ。

はい、次の質問どうぞ。
0922nobodyさん2006/03/15(水) 05:20:12ID:???
アルテマウエポンはどこで手に入りますか
0923nobodyさん2006/03/15(水) 05:35:22ID:???
>>922
まずジュノン近くの湖へ行きましょう。
ボスが居ます。
戦闘終了後(まだ倒してない)ぶアルテマウェポンがどっか飛んでくのでぶつかって何度も倒しましょう。
今度は直線に飛び始めるので、止まったら再度戦闘を仕掛けて倒しましょう。
アルテマウェポンがコスモキャニオンか古の森で止まったら最後です。
おめでとうございます、アルテマウェポンをゲットします。
0924nobodyさん2006/03/15(水) 05:36:19ID:???
ありがとうございます。これで悔いはありません。
0925nobodyさん2006/03/15(水) 07:18:48ID:???
>>922
まずおもちゃの銃を手に入れろ
少年が倉庫へ行くためのカードキーの場所まで連れて行ってくれるところでカードキーを落とす敵の奥で手に入る
8章以降でおもちゃの銃をアルテマウェポンにチューンできる。20万ギルほど必要
0926nobodyさん2006/03/15(水) 08:44:03ID:???
今からここはFF専用下らねぇ質問スレになります
0927nobodyさん2006/03/15(水) 09:12:36ID:???
>>922
まず、となり
0928nobodyさん2006/03/15(水) 09:17:17ID:???
>>907
ソース見た方がはやい
0929nobodyさん2006/03/15(水) 09:58:51ID:???
>>915
2〜3回くらいならPerlの連想配列ですら格納順でループしちゃう可能性があるけどなw
0930nobodyさん2006/03/15(水) 10:14:44ID:???
>>909
配列みたいな基本部分では多分変わんないと思うけど、
システムコールを呼んでる部分では微妙に違うとこあるね。
そういう中身を想像できる人ならあまり気にならないんじゃない?
0931nobodyさん2006/03/15(水) 10:18:36ID:???
>>912
そういや、4.4.1でallow_url_fopenがバグったのはWin版だけだったね。
0932質問2006/03/15(水) 10:38:37ID:48VnBYob
"/head.bin"と、"/data/body.bin"というファイルを、
"/data/hoge.bin"として結合する方法を教えてください。
それぞれのファイル内容をfread()で$headと$bodyに読み込んで、

$ToFile = fopen("/data/hoge.bin","wb");
fwrite($head.$body,$ToFile);
のようにしてみたのですが、
エラーが出て、"/data/hoge.bin"のファイルが、サイズが0の状態で出力されます。
この方法は正しくないのでしょうか?
御教示お願い致します。
エラーメッセージの内容は、今家にいないので、帰ってきてから書きます。
0933nobodyさん2006/03/15(水) 10:50:35ID:???
fwrite($ToFile,$head.$body);
では。

そもそも連結しなくたって、
fwrite($ToFile,$head);
fwrite($ToFile,$body);
2回書けばいいだけでは。
09349322006/03/15(水) 11:11:38ID:F5a3ZDp1
>>933
> fwrite($ToFile,$head.$body);
> では。
そうでした。携帯からだったので書き写し間違えてました。PCのほうは正しく書いてます。

2回書けばいいんですか。帰ったら試してみます。
0935nobodyさん2006/03/15(水) 11:29:41ID:???
すいません。スクリプトの最初と最後でmicrotimeでスタンプ取得して、
その差を求めてベンチ取ってるんですが、
なぜかときどき結果がマイナスになってしまうことがあります。
なぜなんでしょう??? ありえないですよね・・・
0936nobodyさん2006/03/15(水) 11:45:42ID:???
>>935
すごい速いとか
0937nobodyさん2006/03/15(水) 11:48:18ID:???
光の速度を超えちゃったんだね
0938nobodyさん2006/03/15(水) 11:53:25ID:???
>>935
時刻あわせかな?
0939nobodyさん2006/03/15(水) 11:54:21ID:???
プログラムミスだと思うよ。
0940nobodyさん2006/03/15(水) 12:06:52ID:???
>>935
ちゃんとスペースで分割してる?
0941nobodyさん2006/03/15(水) 12:14:33ID:???
>>935
ソース出せ
0942nobodyさん2006/03/15(水) 13:06:22ID:???
つーかマニュアルにあるな。
function microtime_float()
{
list($usec, $sec) = explode(" ", microtime());
return ((float)$usec + (float)$sec);
}
0943nobodyさん2006/03/15(水) 13:16:44ID:???
>>940 スペースで分割・・・???

>>941
$start_time = microtime(); //スクリプトの先頭に置く
$end_time = microtime(); //ここから下はスクリプトの末尾に置く
$exe_time = $end_time - $start_time;
echo $exe_time;
0944nobodyさん2006/03/15(水) 13:29:54ID:???
>>943
まづ下の結果をよく見て来い。話はそれからだ。
echo microtime();
0945nobodyさん2006/03/15(水) 13:46:48ID:???
phpのfloatって倍精度保証?
0946nobodyさん2006/03/15(水) 13:52:38ID:???
>>945
標準はdouble精度

てか、また保証話かよ
0947nobodyさん2006/03/15(水) 13:54:06ID:???
実際にmicrotimeでベンチ取っても、結果にはかなりのバラつきあるよね。
10回や20回数値を取った程度じゃ、偏りのある結果を得られないかもしれない。
ましてや共有鯖みたいな環境だったら、他に影響される部分が多すぎて、
自分のスクリプトの真のベンチが取れないね。
はて、どうしたもんやら。
ローカルでベンチ・スクリプト以外は極力動かさないようにしてやるしかないか??
0948nobodyさん2006/03/15(水) 13:55:06ID:???
そこでPEARですよ。
0949nobodyさん2006/03/15(水) 13:57:47ID:???
>>947
共有鯖でベンチとろうってお前の姿勢が気に食わない
0950nobodyさん2006/03/15(水) 14:00:10ID:???
>>947
共有鯖でベンチテストなんてやらないでね
0951nobodyさん2006/03/15(水) 14:04:40ID:???
>>947
100万回ループさせて割り算しろよ。
0952nobodyさん2006/03/15(水) 14:07:56ID:???
>>949>>950>>951
ベンチって言っても、いわゆる何万回も意味のないループを
繰り返したりするような類のベンチじゃないっつーの。
キモヲタと一緒にするなっての。

ふだん運用してる自作のスクリプトの実行時間を知りたいだけ。
0953nobodyさん2006/03/15(水) 14:08:45ID:???
>>947
頼むから俺様がピーコちゃんを飼ってるサバの住人じゃありませんように
0954nobodyさん2006/03/15(水) 14:10:37ID:???
>>953
カエレ
0955nobodyさん2006/03/15(水) 14:14:57ID:???
>>952
情報小出しにしてなに優越感に浸ってるんだ?
0956nobodyさん2006/03/15(水) 14:16:22ID:???
>>952
きんもーっ☆
0957nobodyさん2006/03/15(水) 14:19:20ID:???
>>955
ハァ?? 何が小出しなんだ??? バカかお前?
これ以上何を知りたいってんだ?

>>956
キモいよお前wwwwwwwwwwwwwwwwwwwwwwwwwww
0958nobodyさん2006/03/15(水) 14:23:45ID:???
>>957
お前の全てを知りたい。
まずその穴をこっちに向けてくれ…。
0959nobodyさん2006/03/15(水) 14:23:58ID:???
>10回や20回数値を取った程度じゃ、偏りのある結果を得られないかもしれない。
>ましてや共有鯖みたいな環境だったら、他に影響される部分が多すぎて、
>自分のスクリプトの真のベンチが取れないね。
>はて、どうしたもんやら。

100万回とって平均値とれや

>ベンチって言っても、いわゆる何万回も意味のないループを
>繰り返したりするような類のベンチじゃないっつーの。

そんなの後出しされても知るか。
0960nobodyさん2006/03/15(水) 14:25:01ID:???
>>959
小出しも後出しも駄目だ。外へ出してくれ。
0961nobodyさん2006/03/15(水) 14:37:04ID:???
>ふだん運用してる自作のスクリプトの実行時間を知りたいだけ。

これがキモヲタらしくてよい。
0962nobodyさん2006/03/15(水) 14:43:22ID:???
>>952
それをベンチと呼ぶ君の無知っぷりがかわいい
0963nobodyさん2006/03/15(水) 14:45:13ID:???
>>943
それは小数点以下の部分だけで差分を出してる。
当然、タイミングによってはマイナスになるし、1秒以上の実行時間は算出できない。
0964nobodyさん2006/03/15(水) 15:12:10ID:???
>>963
え、単純に引き算しているだけで、小数点以下の部分の差分になるの?
0965nobodyさん2006/03/15(水) 15:15:36ID:???
はい、共用鯖での実験ももちろんokですよ
うるさい御老人の事は気にせずなんでもどうぞ^^
0966nobodyさん2006/03/15(水) 15:17:55ID:???
>>964
そこがphpの怖いところなんだな
文字列を算術演算で使うと数値として評価できる部分までがその数値になる
この場合は' 'より前の部分だけ

>>965
カエレ
0967nobodyさん2006/03/15(水) 15:21:11ID:???
>>964
microtimeは
"小数部"スペース"整数部"
の文字列
そのまま引き算するとスペース以降の部分は無視され小数部のみの引き算になる
09689642006/03/15(水) 15:26:35ID:???
>>966-967
なるほど。
試しに、print microtime(); をやってみたら、
「0.90277600 1142403902」みたいになってた。

phpの演算って面白いね。
普通の言語だと余計なものが入っている状態で減算したら
エラーになる気がする・・・。
09699672006/03/15(水) 15:27:05ID:???
マニュアル見直したらPHP5から
microtime(true); //floatを返します。
が使えるんだ
0970nobodyさん2006/03/15(水) 15:27:30ID:???
的確なアドバイスの>>942>>944は無視して話が進んでいるな
0971nobodyさん2006/03/15(水) 15:30:10ID:???
>>942 のコードの、型宣言floatは必要なの?

function microtime_float()
{
list($usec, $sec) = explode(" ", microtime());
return $usec + $sec;
}

これで同じ結果になると思うけど。
09729712006/03/15(水) 15:34:21ID:???
あ、精度を落としているんだね。
失礼しました。
http://jp.php.net/manual/ja/language.types.float.php
09739712006/03/15(水) 15:38:02ID:???
あ、でも実験したら同じ結果になった。
宣言しない場合は、float型として加算されるのかな。

0974nobodyさん2006/03/15(水) 15:39:06ID:???
>>971
宣言は不要
何を勘違いしてるか知らんがどっちも同じだけ精度は失われてる
0975nobodyさん2006/03/15(水) 15:40:56ID:???
>>944が可愛そうだ。
むしろ可愛い
0976nobodyさん2006/03/15(水) 16:02:04ID:???
精度を気にするなら$secと$usecは足してしまう前に減算した方がいいんじゃないのか?
$secがかなりでかい数字なので、それに$usecを足した時点でかなりの精度が失われてる。
それはfloatだろうとdoubleだろうと避けられないかと。
先に$sec同士、$usec同士で減算を済ませてから最後に足せばかなり精度を維持できると思う。
0977nobodyさん2006/03/15(水) 16:03:53ID:???
>>976
君は正しい
0978nobodyさん2006/03/15(水) 16:09:07ID:???
>>976
> 精度を気にするなら$secと$usecは足してしまう前に減算した方がいいんじゃないのか?
> $secがかなりでかい数字なので、それに$usecを足した時点でかなりの精度が失われてる。
正しい。
君は賢いね。

> それはfloatだろうとdoubleだろうと避けられないかと。
phpにおいては、float と double は全く同じものじゃないだろうか。
http://jp.php.net/manual/ja/language.types.float.php

> 先に$sec同士、$usec同士で減算を済ませてから最後に足せばかなり精度を維持できると思う。
だね。
普通はそれで十分。

まぁ、更に精度を気にするなら、GMP関数を使うべきだと思う。
ただ、モジュールだからレンタル鯖な人は使えねーかもな。
http://jp.php.net/manual/ja/ref.gmp.php
レス数が950を超えています。1000を超えると書き込みができなくなります。