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

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

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2006/07/07(金) 14:54:53ID:KnVubDvE
PHPに関するくだらねぇ質問用スレです。
ここならお前の下らない質問に回答があるかも知れません。

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

過去スレは>>2
0764nobodyさん2006/07/19(水) 20:14:14ID:???
float型の 1.49080555641E+15 を、
一般的な数値の表示形式に変換して表示することはできますか?
単純にint型にすると、オーバーフローしてしまうので・・。
07657642006/07/19(水) 20:48:57ID:???
printf('%.0f', $float);
で、できたようです。

ところで、
echo $a = 1209314420881328;

echo $b = 1209314420881329;
は、違う値($a != $b)だけど、同じ表示(1.20931442088E+15)になるんですね・・。(いまいちよくわかってないです)
0766nobodyさん2006/07/19(水) 21:04:01ID:???
>>763 うちのかーちゃんそろそろ60歳なんだが、ある意味すごくイヤだなそれ
0767nobodyさん2006/07/19(水) 21:54:47ID:R8UceB4D
変数に指定の文字列が含まれている場合、処理するにはどうすればいいのでしょうか?
以下のようなソースですが、希望通りになりません。

$image="test.jpg";
if($image==".jpg"){
echo "これはJPEGファイルです";
}
0768nobodyさん2006/07/19(水) 22:03:14ID:SHpEirXb
>>767
正規表現でマニュアル嫁
0769nobodyさん2006/07/19(水) 22:11:02ID:???
>>767
> if($image==".jpg")
両辺が同一ではないのですから、当然、マッチしません。
正規表現を使ってください。

PHP: preg_match - Manual
ttp://jp.php.net/manual/ja/function.preg-match.php
0770nobodyさん2006/07/19(水) 22:28:02ID:???
>>768-769
以下のソースで出来ました。アドバイスありがとうございました。
if(preg_match("/.jpg/",$image)){
echo "これはJPEGファイルです";
}
0771nobodyさん2006/07/19(水) 22:33:40ID:???
敢えて言っておくと、

$image = 'test.jpg.png';

でも通るから正しくない
0772nobodyさん2006/07/19(水) 22:45:28ID:???
>>770
771氏が指摘されたように、後方一致にしないと完全ではありませんね。
そのままでは部分一致です。

PHP: パターン構文 - Manual
ttp://php.liukang.com/manual/ja/reference.pcre.pattern.syntax.php
0773nobodyさん2006/07/19(水) 22:47:54ID:???
if(preg_match("/\.jpe?g$/i",$image)){
echo "これはJPEGファイルです";
}
拡張子が.jpegの時もたまにある
0774nobodyさん2006/07/19(水) 22:54:39ID:???
>>773
jpeのときもあるんだよなコレが。
0775nobodyさん2006/07/19(水) 23:00:07ID:???
だったら「jeg」もあるんだなコレが。
0776nobodyさん2006/07/20(木) 00:05:34ID:???
任意の過去の日付をあらわす8桁の数字YYYYMMDDから、曜日を割り出す関数ってありますか?
0777nobodyさん2006/07/20(木) 00:32:58ID:???
まぁ組み込み関数ではなくてモジュールになってしまうけどあるよ。

http://search.cpan.org/~stbey/Date-Calc-5.4/Calc.pod
0778nobodyさん2006/07/20(木) 00:48:51ID:???
>>776
まあ、関数じゃないけど、俺ならこうする。モジュール使うよりはマシ。
$a = '20060101';// 任意の日付
$weekname = array('日','月','火','水','木','金','土');
echo $weekname[date('w',strtotime($a))]; // '日'
0779nobodyさん2006/07/20(木) 01:18:02ID:???
検索エンジンになりつつあるな
0780nobodyさん2006/07/20(木) 01:59:05ID:???
PHPって何で3項演算子が左結合なんですか?
0781nobodyさん2006/07/20(木) 02:03:59ID:???
>>780
開発した人に聞いて
07827542006/07/20(木) 02:05:26ID:???
レス遅くなりました。
>>755
>未定義だと言われるのなら先に定義しておけばいいじゃない。
$bを先に定義してもこの NOTICE は出ますよね?そういう意味ではないかな

>>756-758
試して検討してみます。ありがとうございます。

>>759
確かに NOTICE は表示されなくなりますが…
根本的な解決にならないので…
0783nobodyさん2006/07/20(木) 02:06:36ID:???
>>782
> $bを先に定義してもこの NOTICE は出ますよね?そういう意味ではないかな
試してからやれ、このハゲ。
0784nobodyさん2006/07/20(木) 02:11:13ID:???
>>783
Notice出るよ。
0785nobodyさん2006/07/20(木) 02:14:47ID:???
>>773-775
横着しすぎると .j にまでマッチしてしまったり
0786nobodyさん2006/07/20(木) 02:14:53ID:???
なんでPHPでこんな厳密なコーディングせにゃならんのだろうか
0787nobodyさん2006/07/20(木) 02:16:54ID:???
>>785
素直に
if(preg_match("/\.(jpg|jpeg|jpe|jeg)$/i",$image)){
echo "これはJPEGファイルです";
}
って書いた方がよさげ
でも俺、.jegって見たことないよ。どんなときに作られるんだそれ。
0788nobodyさん2006/07/20(木) 02:23:44ID:???
>>787
マジレスすると、拡張子なんて信用できない。

例えば、JPEG形式で保存された画像にファイル名を付けるとする。
そこで敢えて拡張子を「gif」にしたとする。

* * *
こんなことしてもJPEGがGIFになることはないよね。
誤解している人も多いが、HTML文書の拡張子は「html」か「htm」じゃないとダメだ ・・・なんて言う
香具師がいるけどそれは違う。

拡張子なんて関係無い。
0789nobodyさん2006/07/20(木) 02:34:35ID:???
>>782
>>759
>確かに NOTICE は表示されなくなりますが…
>根本的な解決にならないので…
といいつつ
>>758を検討している件について。

0790nobodyさん2006/07/20(木) 02:37:27ID:???
>拡張子なんて関係無い。
サーバーの設定とブラウザの挙動による。
0791nobodyさん2006/07/20(木) 03:40:55ID:???
>>788
論点がずれている気がする。
拡張子を変更してもフォーマットに変更はない。
が、「拡張子を変えることで画像を表示できない」ことは問題だ。

大抵のサーバは拡張子 html で "Content-Type: text/html" を送ってくるし、
「拡張子なんて関係ない」は言い過ぎではないかと。

自前のサーバで "Content-Type" を設定するというのなら、気持ちはわからないでもないが、
それを他の人に求めるかとなると話は別だろう。
0792nobodyさん2006/07/20(木) 07:32:37ID:???
>>789
おまけに、この場合のNoticeを消そうと思ったら
× list($a, $b) = @explode("|", $str);
○ @list($a, $b) = explode("|", $str);
だったりする罠。
0793nobodyさん2006/07/20(木) 09:42:16ID:???
>>789
必ず $a と $b の二つの要素だけが必要になるのなら、

list($a, $b, $dummy) = explode("|", $str."||");

こうすればよい。
0794nobodyさん2006/07/20(木) 09:50:36ID:???
ごめん。やっぱりこれでよかった。

list($a, $b) = explode("|", $str."|");
0795nobodyさん2006/07/20(木) 10:34:16ID:???
>>754
セパレータが存在するか事前にチェックして処理を分けるのが一番賢い方法だと思う。
見た目に囚われてて視認性や可読性を犠牲にしてないか?
三項演算子のダメな使い方と同じ道を辿ってるぞ。
07967542006/07/20(木) 12:01:05ID:???
>>789
>>792
エラー制御演算子使うのも確かに本質的に同じですね…
で、配列のエラーなので>>792のいう通りでした。

>>795
$strの中を2度も見たくないと思って質問したのですが、
ごもっともな指摘です。
0797nobodyさん2006/07/20(木) 12:06:05ID:???
ところで、変数に大き目の文字列(HTMLページ丸ごとのような)が入っていて、
スクリプト途中で使用済みになった場合、
$html = "";
とかって初期化すると、スクリプトの効率がよくなったりしますか?
たとえば、

$arHtml = file('aa.html');
$html = implode($arHtml);

のように読み込んだファイルを $html の文字列一つにした後、その後の処理で使用しない $arHtmlを

$arHtml = array();

とするとか。
0798nobodyさん2006/07/20(木) 12:43:44ID:???
>>765
float の大きさはプラットフォーム依存です。
ただし、通常はおよそ 10 進数で 14 桁の精度があり、最大値は ~1.8e308 (これは 64ビット IEEE フォーマットです) となります。

1.2093144208813E+015
普通は14桁のはずだが
0799nobodyさん2006/07/20(木) 12:47:16ID:???
>>797
どうせ消すならちゃんとunset($arHtml)で;変数管理構造体ごと消すべきだと思うけど…。
食ってるメモリ量にもよるけど、それが巨大なら効率が上がる場合もあるんじゃないかな。
HTML丸ごとくらいは大したサイズじゃないと思ったりもするけど。
メモリスワップを引き起こすほどじゃなきゃ体感できるほど変わらんと思ったりもするけど。
0800nobodyさん2006/07/20(木) 13:11:38ID:???
>>799
ありがとうございます。
どのくらいが大きい量なのかわからなかったので。
レンタル鯖であれば、100バイトの1万行でも楽々動いていたのでさほど気にすることでもないのでしょうか。
0801nobodyさん2006/07/20(木) 13:38:24ID:???
共有のレンタル鯖だと自分だけ省メモリにしたとこで速度的には何も変わらんよな。
単に他人への迷惑が多少減るだけ。
0802nobodyさん2006/07/20(木) 13:45:15ID:???
>>797
> $arHtml = file('aa.html');
> $html = implode($arHtml);
使ってしまったメモリを解放するより、2回もでかいメモリアロケーションを
発生させてるのを減らす努力をした方が効率は上がると思う。
0803nobodyさん2006/07/20(木) 13:52:49ID:???
>>802
まったくだw
0804nobodyさん2006/07/20(木) 14:06:48ID:zh5fHket
質問です。

自分で定義したfunctionが沢山書かれたファイルを、別のサーバにあるphpファイルで呼び出そうとしたらうまくいきません。

別のサーバのphpファイルには
require_once("http://hogehoge.com/my_function.php";);
としているのですが、実行すると、
Call to undefined functionといわれます。

ちなみhogehoge.comのサーバのルートからのパスをrequireで指定すると動きます。

くだらない質問ですみません、ヒントがありましたらお願いします。

0805nobodyさん2006/07/20(木) 14:10:58ID:???
>>802
そのスクリプトは、HTMLのテンプレートの中に置き換える予定の文字を書き込んでおき ( %name% ) 等
あとで、

foreach ($Ar as $key => $value) {
$html = str_replace("%".$key."%", $value, $html);
}

でワンクッションで置き換えようとおもうたからです。
0806nobodyさん2006/07/20(木) 14:13:16ID:???
>>804
淫狂うど
0807nobodyさん2006/07/20(木) 14:17:28ID:zh5fHket
>806
レスありがとうございます。
includeでも同じようです。
サーバの設定にもよるのでしょうか?
0808nobodyさん2006/07/20(木) 14:40:37ID:???
>>807
ブラウザでhttp://hogehoge.com/my_function.phpを表示させてみれ。
その表示内容がrequireで読み込まれてる内容だから。
その中に自分の欲しいPHPコードは入っているかい?
0809nobodyさん2006/07/20(木) 14:44:51ID:zh5fHket
>808
レスどうもです!
なるほど!ちょっと盲点でした。
httpで読んでもダメという解釈でいいのでしょうか?
0810nobodyさん2006/07/20(木) 14:44:57ID:???
>>805
んー・・・・ だから?
それと無駄メモリ使いの手抜きコードと何の関連があるの?
いや別にHTMLファイル2個分くらい、たかが知れてるから
さほどこだわる必要も無いと思うけどな。
そのくせメモリ解放を気にするなんて小にこだわり大を失うって言うか。。
0811nobodyさん2006/07/20(木) 14:48:58ID:???
>>809
http以外で何でアクセスするんだ。
そうでなく、httpでアクセスしてもちゃんとPHPコードの形で出力されるようにすればいいだけ。
0812nobodyさん2006/07/20(木) 14:51:49ID:???
>>809
拡張子を.txtにしてインクルードしたらいい
0813軟式PHP2006/07/20(木) 14:53:14ID:???
関数丸見えて嫌だな。
ちゃんとアクセス制限しないとな。
0814nobodyさん2006/07/20(木) 15:09:44ID:???
拡張子をcgiにしておけば500エラーが出て表示されない
0815nobodyさん2006/07/20(木) 15:14:57ID:???
>>810
ありがとうございます。
わからないから聞いたわけで。
HTMLファイル2個分くらいはいちいちこだわらずにおいたほうがいいということですね。
ありがとうございました。
0816nobodyさん2006/07/20(木) 15:25:46ID:???
>>814
何の意味がw
0817nobodyさん2006/07/20(木) 15:29:35ID:???
>>816
データファイルはよく拡張子cgiにしとくよ。
0818nobodyさん2006/07/20(木) 15:30:08ID:???
>>813
JavaScriptだって丸見えなんだから気にしない!
0819nobodyさん2006/07/20(木) 15:33:23ID:???
こんにちは。初めてお世話になります。
ホームページに、自作した柄のカウンターを置きたいのですが、そういったソフトはありますでしょうか?
なるだけ簡単に設置できるソフトがいいです。
出来れば、無料で。。。よろしくお願いいたしますm(_ _)m
0820nobodyさん2006/07/20(木) 15:34:18ID:???
>>819
いっぱいある。
どこのでもだいたい簡単で、ほぼ無料。
0821nobodyさん2006/07/20(木) 15:40:16ID:???
>>819
ここは自分で作る人のためのスレで、出来合いのソフト探しはスレ違い。
08228192006/07/20(木) 16:16:00ID:???
>>820
ありがとうございます。もっかい探してみます!ありがとうございました。
>>821
すれ違いスマソ。
それでは、失礼しますた。m(_ _)m
0823nobodyさん2006/07/20(木) 16:50:05ID:???
>>817
プログラムから読むのとhttpで読むのとは訳がちがう。

訳あってあいてのftpのパスワードを知る訳にいかない。
こっちのソースは相手にみえてもよい。
という場合に、手元で相手の鯖のプログラムをいじれるというメリットはある。
0824nobodyさん2006/07/20(木) 17:03:43ID:???
質問です。
ページを更新するたびに、
file()でデータを配列に格納させて
foreach(as)で処理をしているのですが、
file()では何行くらいまでのファイルにすれば良さそうですか?
やはり、1000も2000もあると、重すぎますよね。
また、読み込むファイルを2回に分けた場合、
負担があまりかからないのでしょうか?

例えば
$file = file("test1.dat"); <=500行
foreach ($file as $value){
処理
}
$file = file("test2.dat"); <=500行
foreach ($file as $value){
処理
}
この処理と

$file = file("test.dat"); <=1000行
foreach ($file as $value){
処理
}

この処理

どちらのほうがサーバーに負担をかけずに良さそうですか?
0825nobodyさん2006/07/20(木) 17:06:55ID:???
くだらない質問だと思いますがよろしくです。
文字列から最初の2文字だけを取り除くにはどうしたらいいでしょうか?
08268192006/07/20(木) 17:10:45ID:???
お陰様で、無料の自作画像の使えるカウンターの置いてあるサイトが見つかりました。
本当にありがとうございました。m(_ _)m
08278252006/07/20(木) 17:12:36ID:???
おかげさまで解決しました。
本当にありがとうございました。m(_ _)m
0828nobodyさん2006/07/20(木) 17:15:55ID:???
>>825
>>358
0829nobodyさん2006/07/20(木) 17:24:19ID:???
X年Y月が、A年B月〜C年D月の間にある年月かどうかを判定する
簡単な方法はないでしょうか?
0830nobodyさん2006/07/20(木) 17:28:14ID:???
>>824
たとえば一行10バイト程度なら?サーバーの環境にもよるし。
要はケースバイケース。
0831nobodyさん2006/07/20(木) 17:40:18ID:???
掲示板の送信内容が全て半角の場合をチェックしてキックしたいんですが
どうしたらいいでしょうか?
半角といえど色々あるので正規表現でもどう書いていいかわかりません
0832nobodyさん2006/07/20(木) 17:46:10ID:???
>>830
1行約50byteくらいなんですが・・・
サーバーの環境にもよるのですね
アリガトウございます。
0833nobodyさん2006/07/20(木) 17:47:15ID:???
>>831
送信内容を
$txt
に格納したとして
strlen($txt) == mb_strlen($txt)
なら
キック
0834nobodyさん2006/07/20(木) 17:58:59ID:???
>>829
年が西暦なら普通にXYとABとCDを比較すれば良いのでは?
0835nobodyさん2006/07/20(木) 18:02:55ID:a8uvmb5c
ちょっと、お伺い致します。「http://www〜/index.php」でアクセス
してきた人を全て、「https://www〜/index.php」に転送させてSSLで
通信させたいのですが、どうやれば良いのでしょうか?
PHPで$_SERVER['DOCUMENT_ROOT']; や $_SERVER['SCRIPT_FILENAME'];
で調べて、「https://www〜/index.php」に転送させようとしたのです
が、「http」でリクエストしてきたのか「https」でリクエストしてきた
のかまでは表示されませんでした。Apacheのバーチャルホストの設定
でも良いので、どなたか「http」でアクセスしてきた人を「https」の
同じページに転送させる方法をご存知でしょうか?宜しくお願い致しま
す。
0836nobodyさん2006/07/20(木) 18:11:46ID:???
>>835
$_SERVER["HTTPS"] は未定義?
0837nobodyさん2006/07/20(木) 18:12:08ID:???
何故、リファラーを調べない?
0838nobodyさん2006/07/20(木) 18:15:49ID:???
>>837
何故、リファラーを調べない? という発言が出てくるのか意味不明。
0839nobodyさん2006/07/20(木) 18:21:14ID:a8uvmb5c
>>836

>>835です。ありがとうございます!!
$_SERVER["HTTPS"] で調べたら、httpsの時は「on」になり、
httpの時は何も表示されませんでした。この$_SERVER["HTTPS"] が
onかどうかで、条件分岐させれば良いのですね。
どうも、ありがとうございました!!
0840nobodyさん2006/07/20(木) 18:26:40ID:???
>>839
こういう時は phpinfo を https でアクセスして表示させてみると良いよ。
定義される $_SERVER 変数一覧が見れるから。
0841nobodyさん2006/07/20(木) 18:32:25ID:???
>>838
ごめん。意味を取り違えていた。
0842nobodyさん2006/07/20(木) 18:37:11ID:???
許さんよ
0843nobodyさん2006/07/20(木) 18:37:59ID:???
許しておくれよ
0844nobodyさん2006/07/20(木) 18:43:17ID:???
ダメと言ったらダメだ!!
0845nobodyさん2006/07/20(木) 18:45:17ID:???
このガンコ親父が!!
0846nobodyさん2006/07/20(木) 18:47:32ID:a8uvmb5c
>>840

>>839です。ありがとうございます。phpinfoをhttpsでアクセスして
みたら、_SERVER["SCRIPT_URI"] 等の$_SERVER 変数一覧が出てき
ました。こういう時は、phpinfoで定義済み変数を調べれば良いので
すね。ありがとうございました!!
0847nobodyさん2006/07/20(木) 18:47:56ID:???
このウンコ親父が!!
0848nobodyさん2006/07/20(木) 18:48:20ID:???
このチンコ親父が!!
0849nobodyさん2006/07/20(木) 18:51:02ID:???
このマンコ親父が!!
0850nobodyさん2006/07/20(木) 18:51:49ID:???
(´Д`;)ハァハァ
0851nobodyさん2006/07/20(木) 19:08:29ID:???
おまいらオモロイw
けど、そんなのはマ板でやれ
0852nobodyさん2006/07/20(木) 19:09:33ID:???
おまえら自演しすぎ、迷惑だから消えろ
0853nobodyさん2006/07/20(木) 19:59:45ID:zh5fHket
>811
レスどうもです。遅くなってすみません。
なんとなく解決した気になっていたのですが、いままた別のパターンで同じような罠にはまりました。

A include(http://hogehoge.com/my_function.php);
B include(/home/htdocs/my_function.php);←サーバのパス

AがダメでBが大丈夫な仕組みというか理由が知りたいです。
僕はいまローカル環境で作っていますが、AのパスもBのURLもブラウザに直接入力すると、どちらも何も表示されません。


0854nobodyさん2006/07/20(木) 21:45:25ID:x+eRwqU4
"a=1&b=2&c=3"
という文字列を与えたら
Array
(
  [a] => 1
  [b] => 2
  [c] => 3
)
という配列を返してくれる関数はありますか?
また、その逆をしてくれる関数はありますか?
0855nobodyさん2006/07/20(木) 21:47:44ID:???
$ar=split('&', $str) ;
$str=join('&', $ar) ;
0856nobodyさん2006/07/20(木) 22:24:46ID:???
>>853
勿論ソースを表示させての話だよね>何も表示されない
0857nobodyさん2006/07/20(木) 22:47:11ID:???
>>854
ない

>>856
>>471
0858nobodyさん2006/07/20(木) 22:48:24ID:???
>>857
あるある
0859nobodyさん2006/07/20(木) 23:05:47ID:???
>>854
> という配列を返してくれる関数はありますか?
ある。

> また、その逆をしてくれる関数はありますか?
PHP5以降でならある。
0860nobodyさん2006/07/20(木) 23:06:09ID:eXAIKTBk
マルチバイトで「山田」と「田中」のように複数の文字列のうち、
どちらか一方の文字列をマッチさせるときはどのようにしますか?

単にマッチさせるだけなので、正規表現関数ではなくて
文字列関数でループ処理した方がいいですかね?
(マルチバイトのmb_eregとか試してみたけどうまくいかなかった)
0861nobodyさん2006/07/20(木) 23:12:56ID:???
>>853
> A include(http://hogehoge.com/my_function.php);
これはhogehoge.comのWEBサーバーにお願いしてファイルをダウンロード(名前をつけて保存と一緒)している。
そのため、取得できる内容はWEBサーバーの出力結果の内容になり、
PHPとして解釈できる拡張子だとPHPが実行されてその結果が表示されてしまう。

> B include(/home/htdocs/my_function.php);←サーバのパス
これは途中に何も介さず、PHP自身がファイルをそのまま取り込んでいる。
だから何も内容は変化せず、ファイルの内容がそのまま取得される。

通常のPHPの処理としてはBなわけだが、Aみたいに「ネット越し」でファイルを得ようとすると、
何を経由してるかによって結果が変化してしまう場合があるというわけ。
0862nobodyさん2006/07/20(木) 23:13:50ID:???
>>860
どう試して上手くいかなかったのかkwsk
(ソース貼れ)
0863nobodyさん2006/07/20(木) 23:14:36ID:???
>>860
mb_eregでもmb_strposでもどっちでもできると思うんだが。
mb_eregで一体どういう書き方をしたんだ。
■ このスレッドは過去ログ倉庫に格納されています