【PHP】下らねぇ質問はここに書き込みやがれ 26
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2006/08/07(月) 13:11:50ID:???まず読め→【PHP マニュアル】http://www.php.net/manual/ja/
PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。
過去スレは>>2-10 関連スレは>>4-10 FAQは>>6-10 辺り
◆質問する場合の注意
1. 自分のIDを表示させること。(メール欄に何も記述しないでください)
2. サーバーのOS、WebサーバーとPHPの種類やバージョン等を明記すること。
3. 己の行った操作、変更などを詳しく明記すること。
4. エラーメッセージはそのまま表記すること。「エラーが出ます」では絶対分かりません。
5. 質問者としても態度をわきまえること。
6. 事前に公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
◆質問後の注意
・質問者は必ずIDを表示させてください。(メール欄に何も記述しないでください。)
・2回目以降は最初に質問した際のレス番号を名前欄に入れてください。
(逆に回答者は質問者に対して>>(アンカー)をつけて答えてください。)
・解決しなくても回答をもらった場合はお礼を言う。
(荒らし、煽りは除く。逆に煽られたときも、無闇に反論せずスルーすべし)
【その他諸注意】
・正規表現・PEAR・テンプレート(Smarty等)・フレームワークはそれぞれの該当スレへ
・SQLについての質問はデータベース板(PCカテゴリ)の各スレで
・オブジェクト指向については良スレがないから本を買え。理解できないならムリに使うな。
・速さについては自分でベンチをとってここに書け(違う環境の人も調べてくれるかも)
0237nobodyさん
2006/08/10(木) 15:30:32ID:???サブスクライバIDって書いていることはAU限定だろうから
>>236 の方法か getenv() を使えばいいよ
0238nobodyさん
2006/08/10(木) 15:37:30ID:???山ほど例が出そうな気がするが
0240hage
2006/08/10(木) 15:47:18ID:GpwygKMQどうしても"''"になってしまう。回避法ご存知のかたいらっしゃいます?
$apo = mb_convert_encoding("'",'UTF-8','EUC-JP');
0243nobodyさん
2006/08/10(木) 16:45:42ID:???松田さん、こんにちは。
こちらの環境(php4.4.2)でも確認できませんでした。
そもそも、半角の ' に文字コードが関連するとも思えませんし。
0244nobodyさん
2006/08/10(木) 16:54:41ID:kXNrpO55HTMLファイルを取得したいと思います。
ソケットオープン
↓
ヘッダー送信
↓
データ受信
という流れになるんですが、
その際に、
ユーザーエージェントを携帯端末にしたいと思います。
たぶんheaderで指定する必要があるんだと思うんですが、
誰かサンプルソース持ってないでしょうか?
0245nobodyさん
2006/08/10(木) 17:11:12ID:???0246hage
2006/08/10(木) 17:13:02ID:GpwygKMQどうも、すみません。私の勘違いでした。前処理で、余計なことしてて
気づかなく、ハマッました^^;
0247nobodyさん
2006/08/10(木) 17:17:46ID:???php の公式にサンプルがあるよ
http://jp2.php.net/manual/ja/function.fsockopen.php
0248nobodyさん
2006/08/10(木) 17:21:56ID:???0249nobodyさん
2006/08/10(木) 17:31:33ID:???0250nobodyさん
2006/08/10(木) 22:05:54ID:???上記のページ(W3C勧告私的日本語訳)で、「1つのフォームで複数のチェックボックスが同じコントロール名を共有してよい。こうしたチェックボックスは、例えば、ユーザが1つのプロパティについて複数の値を選ぶことを許容する。」とありますが、
例えば以下のようなformを作って送信すると、
<input type="checkbox" name="q" value="1">
<input type="checkbox" name="q" value="2">
<input type="checkbox" name="q" value="3">
確かに「q=1&q=2&q=3」というリクエストが送信されます(IE、Firefoxともに確認済み)。しかし、これをサーバサイドでPHPで受け取って print_r($_POST) とかで表示すると、
Array
(
[q] => 3
)
のように q の値は 3 のみになっています。これはPHPの仕様がW3Cの勧告に即していないということでしょうか?
0251nobodyさん
2006/08/10(木) 22:10:12ID:???<input type="checkbox" name="q[]" value="1">
<input type="checkbox" name="q[]" value="2">
<input type="checkbox" name="q[]" value="3">
でお願いします。
0252nobodyさん
2006/08/10(木) 22:17:30ID:???一応こうならば何とか動くけど。
<input type="checkbox" name="q[]" value="1">
<input type="checkbox" name="q[]" value="2">
<input type="checkbox" name="q[]" value="3">
0253252
2006/08/10(木) 22:19:59ID:???0254nobodyさん
2006/08/10(木) 22:20:09ID:???0256nobodyさん
2006/08/10(木) 22:42:35ID:???なぜでしょうか?
0258nobodyさん
2006/08/11(金) 01:07:57ID:???文字コードはちゃんと判別してると思います。(たまに?になるだけですので)
mbstring.substitute_character はnone,long,12307と変更してみましたが
やはり1文字で検索するとたまに?になってしまいます。
0259nobodyさん
2006/08/11(金) 01:13:14ID:???1文字だと誤判別しやすいんだよ。>>257の言ってるのはそういう指摘だと思う。
文字コード自動判別にはある程度の字数がないと正確に判定できないのだ。
0260nobodyさん
2006/08/11(金) 01:39:59ID:???0261164
2006/08/11(金) 03:07:29ID:???すいません、そこはここで質問する時にキーを打ち間違えたんです。
「function」ですね、お恥ずかしい。
やりたいことはようはXMLで読み込んだオブジェクト?($xml->itemみたいな)
を引数にして関数に渡して、そっちで処理したい、ってことなんですが、
まだできません。
引き続きどなたかアドバイスなどいただけたらと。
0263nobodyさん
2006/08/11(金) 04:36:07ID:???試したことないのであてずっぽだけど、引数をリファレンスで渡してみたらどうよ?
$xmlを丸ごと渡すなら分かるけど、$xml->itemとかいう渡し方をした場合、
$xml->itemの中で$thisとして$xmlのメンバ変数を参照しようとしたとき
$itemしかコピーされてないと正常動作しようがないんじゃないか?って気がした。
0264nobodyさん
2006/08/11(金) 05:20:15ID:???間で処理が遅れる事があるだろうと思うので、少し増えたりするのはうなずけるんですが、
試してみたところ、ある環境では引数に指定した値のの約3倍ずつ待っていたり
またある環境では引数に指定した値より待ち時間が少なかったりしました。
どなたかご存知でしたら教えてください。
0265nobodyさん
2006/08/11(金) 07:28:05ID:???<?php
$time1 = microtime();
usleep(3);
$time2 = microtime();
list($m1, $s1) = explode(" ", $time1);
list($m2, $s2) = explode(" ", $time2);
echo $m2 - $m1;
?>
これを繰り返したけど0.003〜0.01程度とばらばら(Win32, PHP5.1.4, Pentium D 930)
CPUのスペックや同時に動いているプロセスの数や種類などでかなり差が出るとは思われる
0266nobodyさん
2006/08/11(金) 09:36:05ID:???$time1 = microtime();
$time2 = microtime();
というふうに連続でやってもマイクロ秒付近の偏差はでるんだから、usleepのせいってわけじゃなくね?
0267nobodyさん
2006/08/11(金) 11:15:29ID:???0268nobodyさん
2006/08/11(金) 12:11:15ID:???The usleep() function suspends execution of the calling process for (at least) usec microseconds.
The sleep may be lengthened slightly by any system activity or by the time spent processing the call or by the granularity of system timers.
>>264
最低、引数の時間は止まるので少なくなることはない
0269nobodyさん
2006/08/11(金) 12:14:53ID:???$a = array(1,2,3,);
この最後のカンマってあってもいいのでしょうか?
echo count($a);
とすると 4 になるかと思ったら 3 になりました。
マニュアルのどこかに載ってますでしょうか?
0272nobodyさん
2006/08/11(金) 15:53:56ID:???0273nobodyさん
2006/08/11(金) 16:21:47ID:???0274nobodyさん
2006/08/11(金) 17:20:55ID:???エラーでなかったよ
int main(void)
{
char a[] = {1, 2, 3, };
return 0;
}
0275nobodyさん
2006/08/11(金) 17:47:27ID:???http://jp.php.net/manual/ja/function.array.php
一般的ではないですが、 最後に定義された配列エントリの後に
続くカンマがある場合、 これは有効な構文です。
配列要素を修正した時とかに最後のカンマの消し忘れても
エラーにはならない対応なんだろうけど
一般的じゃないと書かれている以上、消し忘れでない限りは
つけない方が個人的にはいいと思う
0276234
2006/08/11(金) 18:08:04ID:Pasm0XSVmb_send_mail($to,subject,$msg,$header)
これの$headerの中に"from:"って書いておかないと、
ヘッダー情報が本文におくられちゃうみたいです。
234でドコモの情報とか書きましたが、上の条件をみたして、携帯に送ったら
至って普通に受け取れました。
沢山レスくれたみなさん、お騒がせしました。
0277nobodyさん
2006/08/11(金) 18:43:28ID:???>>233のレスのが正解だったわけだ。
言われるまで、$headerにFromアドレスをヘッダ識別子なしで
そのまま格納しちゃってることに気付かなかったよ…
0278nobodyさん
2006/08/11(金) 19:25:38ID:???$a = array(
1111111111111,
2222222222222,
3333333333333,
);
みたいに行単位で書く場合は最後にもコンマつけられたほうがいいんじゃない?
0279nobodyさん
2006/08/11(金) 19:35:45ID:???0280nobodyさん
2006/08/11(金) 19:41:09ID:???ただSQL文とかでそれやるとエラーだから、PHP使う上では出来るだけ意識的に外したほうが良いかもな。
0281nobodyさん
2006/08/11(金) 20:00:10ID:???ただ、頻繁に配列内容の変更があるならむしろカンマをつけておいた方がメンテはしやすくなる。
これは
if(式)
実行文;
っていう1行しかない場合でも、保守性を考慮して
if(式) {
実行文;
}
と必ず { } をつけるコーディングポリシーに通じる話だと思う。
その辺の兼ね合いを考慮したうえで、後は好みの問題だから好きにすればいい。
0282nobodyさん
2006/08/11(金) 21:35:28ID:???おいらは値の追加とか削除した際にも最後に,が残らないように
$a = array(
1111111111111
,2222222222222
,3333333333333
);
って書き方してるな。
0283nobodyさん
2006/08/11(金) 21:43:56ID:???なんかエロくて嫌です><
0285nobodyさん
2006/08/11(金) 21:59:02ID:256svcAIjava scriptで自身を500ms周期でリロードするHTMLを書き、
数時間走らせておくと、web serverが重くなります。
web server(httpd)を再起動すると元通り軽くなります。
httpdのconfig設定等でチューニング可能でしょうか?
また、どこらへんを設定すればいいのでしょうか?
環境;
OS Linux CENT-OS4.3
web server apach2
外部公開せずLAN内でのみ使用。クライアントは上記のアクセス1台のみ。
HTMLで記述
です。よろしくお願いします。
0286nobodyさん
2006/08/11(金) 22:00:48ID:???そんな俺はPHPだけは必ず最後にコンマを付けちゃう派。楽すぎて幸せになれる。
他の言語もみんな同じようになればいいのに。
0288nobodyさん
2006/08/11(金) 22:40:38ID:???「…続く」というのが付け足されるようにしたいんですが、
下のように書いたら、切り取った最後のところに「?」が追加されてしまいます。
マルチバイトの扱いがちゃんとできてないんでしょうけど、
どのように書くのがいいでしょうか?アドバイスよろしくおねがいします
$byte= mb_strlen($str);
if($byte>300){
$str=mb_substr($str,0,300)."…続く";
}
0289nobodyさん
2006/08/11(金) 22:49:45ID:???0290nobodyさん
2006/08/11(金) 23:12:10ID:???たぶん mbstring.internal_encoding が正しく設定されていない。
それから一応常識だから言っとくけど、PHP(mbstring)で内部エンコーディングSJISは通用しない。
0291nobodyさん
2006/08/11(金) 23:18:03ID:???mb_strlenで$byteかよ。
やりたいのはmb_strimwidthじゃないの?
mb_strimwidth:「あああ…続く」「aaaaaa…続く」
288の方法:「あああ…続く」「aaa…続く」
0292nobodyさん
2006/08/11(金) 23:29:14ID:???0293nobodyさん
2006/08/11(金) 23:44:06ID:???>>291
ありがとうございます。
mb_strlenがマルチバイトを2文字として計算してるようなので$byteとかいう変数名にしてしまいました。
ややこしかったですね。
あとphpinfoで調べてみたところmbstring.internal_encodingはno valueになってますね。
これのせいかな、ファイルは全部utf-8で作ってます。
自分のサーバーじゃないんので設定変えたりはできないんですが、
他になにか良い方法があればぜひ…
0294nobodyさん
2006/08/12(土) 00:03:14ID:???, は「かんま」と呼ぶようにしてる。
ま、どでもいい事ではある。
0295nobodyさん
2006/08/12(土) 00:04:16ID:???0296nobodyさん
2006/08/12(土) 00:05:12ID:???0297nobodyさん
2006/08/12(土) 00:22:10ID:???カモン
0299nobodyさん
2006/08/12(土) 00:43:56ID:???> mb_strlenがマルチバイトを2文字として計算してるようなので$byteとかいう変数名にしてしまいました。
この時点でmbが正常に動作してないことに気付け。
> 自分のサーバーじゃないんので設定変えたりはできないんですが、
> 他になにか良い方法があればぜひ…
プログラム中でinternal_encodingは設定できる。
mb_strlenの挙動もそうだけど、1度はmb系のリファレンスを読みましょう。
0300nobodyさん
2006/08/12(土) 02:44:18ID:???Win環境でライブラリ(特にGD2)の関数を使用すると
ソースがshift-jisでなきゃうごかんのはphp.iniがおかしいのでしょうか?
激しく既出でしたらスルーしてください。
0301nobodyさん
2006/08/12(土) 04:15:24ID:???0302nobodyさん
2006/08/12(土) 08:04:13ID:???>>299
ありがとうございます!
ini_set("mbstring.internal_encoding","utf-8");
でいけました
0303nobodyさん
2006/08/12(土) 12:42:05ID:???0304nobodyさん
2006/08/12(土) 12:49:27ID:???連想配列でもいい気がするんですが、どうなんでしょうか。
0305nobodyさん
2006/08/12(土) 12:53:44ID:???0306nobodyさん
2006/08/12(土) 12:57:12ID:???この場合もJava同様getter, setterを作る方法がスマートなんでしょうか?
連想配列の方が楽な気がするんですよね。
どうなんだろう。
0307nobodyさん
2006/08/12(土) 13:05:10ID:???0308nobodyさん
2006/08/12(土) 13:08:08ID:???getter、setterごとに制御を入れるってことも滅多になかったもので。
DBのカラム名、画面の部品名称が変わるたびに、変数やメソッドの名前が変更になるので
すごい面倒だとJavaのときも感じていました。
実際、getter、setterを使っていて得したってことはなかったです。
痛い目にあっていないだけからかもしれませんが。
0309nobodyさん
2006/08/12(土) 13:42:36ID:???勇気を出して聞いたほうがいいぞ
とてつもなく、罵倒される可能性もあるが
0310nobodyさん
2006/08/12(土) 13:49:37ID:???連想配列があるPHPでも実装する利点ってどこにあるのでしょうか?
0311nobodyさん
2006/08/12(土) 13:52:48ID:???その辺を吟味し、自分なりの方法を確立していくのも
プログラムを書いていく上で必要なことだと思うが。
0312nobodyさん
2006/08/12(土) 13:57:54ID:???いやたぶん自分なりの方法を確立すると大変なことになります。
だから、デザインパターンなんてものがあるんだし。
ここ人が少ないんですね。
レスが少なくてむなしいw
0314nobodyさん
2006/08/12(土) 14:05:12ID:???勧告程度しかない
ようは、setter、getter が定義されていないプロパティに関しては
外部からアクセスするなというルール作りでしかない
一人で、作っているときはそれで問題ないかもしらないが、
複数人で使いまわす処理なんかを作ると、一時領域に使っている
プロパティを勝手に書き換えられて、後の動作がうまく動かなく
なるということは良く起こる
これが一つの理由
0315nobodyさん
2006/08/12(土) 14:05:24ID:???setter、getter 内の変更だけですむ可能性がある
これらの理由は、連想配列があろうがなかろうが関係ない
別の使い方としては、連想配列へのアクセスのためのヘルパーメソッド
として使う程度だろう
0316nobodyさん
2006/08/12(土) 14:05:59ID:???0317nobodyさん
2006/08/12(土) 14:10:30ID:???複数人で使いまわす処理なんかを作ると、一時領域に使っている
プロパティを勝手に書き換えられて、後の動作がうまく動かなく
なるということは良く起こる
プロパティ(変数?)を勝手に書き換えられてってありますが、
privateにすれば勝手に書き換えられることはないですよね。
Java板で質問したところ、すごいきっちりとした納得できる内容の
返信をもらいましたので、追記します。
0318nobodyさん
2006/08/12(土) 14:12:17ID:???本来はカプセル化のためだし、
getterやsetterにいろいろ仕込む手法もあったのだけど、
最近の流れはそうではないよね。
でも当初の思想がそうだったために、各種開発ツールや
ライブラリやカスタムタグがgetter/setterありきで設計されている。
ってとこが現実かな。
変数名とメソッド名を合わせて変更は、IDEが対応しているでしょ。
データを保持するだけの単純なJavaBeanは手書きするもんじゃないよ。
--
個人的にすごい納得できる内容でした。
0319nobodyさん
2006/08/12(土) 14:42:23ID:???理解に苦しむ
>privateにすれば勝手に書き換えられることはないですよね
まあ、別に変更可能なメンバ変数は public で
それ以外は private って使い方でもいいけど
0320nobodyさん
2006/08/12(土) 16:06:12ID:???そういう関数どこかにないですか?
0321nobodyさん
2006/08/12(土) 16:21:09ID:???0323nobodyさん
2006/08/12(土) 16:50:08ID:???0324nobodyさん
2006/08/12(土) 18:39:39ID:???> 正直、その答えで納得できる人間がなぜ、今まで悩んでいたのかが
> 理解に苦しむ
おそらく単に>>318みたいな答が欲しかったってだけの話だろ。
特に「本来は〜だけど、当初の思想が〜」のように「仕方なく使わざるを得ないだけ」みたいな言葉を待っていたって感じ。
俺はsetterとgetterは依然カプセル化に重要な役割を果たしてると思うけどね。
たとえばあるプロパティをpublicにするとどんな値にでも変更し得るけど、setterが毎回呼び出されるなら不正なデータや範囲外のものをチェックしたり修正したりと、整合性をとるのが容易になる。>>315の「仕様変更時に一箇所の変更ですむ」、という話につながる。
setterだけでもプロパティに代入されるものの整合性を保つことはできるけど、そのプロパティをsetすることのほうが多いのかgetすることのほうが多いのかによって、setter/getterの処理の重さを調節することもできる。
まあ、そんなこと考えずにガムシャラに動くものを作れば良いっていう今時の風潮からすれば、俺の言ってることも古い考えってことになるのかねぇ?
0325nobodyさん
2006/08/12(土) 19:06:56ID:???みんなどこぞの解説書によくあいてあるようなことを言うが
ちなみに俺の実務経験上では、データのみを保持するオブジェクトDTOなどにsetter,getterごとに範囲チェック処理などを入れることはまずナイ。
エラーチェックはエラーチェックで別の処理で行っている。
Javaの基本概念として、setter,getter使っているってことがホトンドだろう。
場所によりけりだけど。
0326nobodyさん
2006/08/12(土) 19:35:08ID:???それらの方法論の良い悪いではなく、自分で取捨選択・応用する頭を持たなきゃ、プログラマーではなく、ただのタイピストだ。
0327nobodyさん
2006/08/12(土) 19:59:25ID:???DTOの内部でエラーチェックetcをしないのは、オブザーバパターンなりコントローラなり、より広い範囲での例外処理のほうが有用だからってだけでは?
似た処理はなるべく同じところに書いたり隠蔽したほうがいい(=カプセル化)ってのはどういうレベルで見ても一緒だし、setterの目的が基本概念として、っていうだけだったら、publicじゃダメな理由がなくなってくる。
0328【閑話休題】
2006/08/12(土) 20:14:04ID:???全く無いとは言わないが、相当なレアケースだと思うんだよね。
前者はsetterでやるより入力段階などで処理した方がパフォーマンス上がるしエラー時処理の融通も利かせやすい。
ユーザからの入力処理以外でエラーチェックを行う必要性そのものがまず無いし。無闇に毎回チェックは無駄もいいとこ。
後者は現実問題として、仕様変更入った場合はsetter/getterのメソッド自体を組み直す羽目になるケースが多く、
結局呼び出し元も含めて修正せざるをえないことの方が多い。I/F仕様と中身の実装が食い違ってると後で混乱を招くし。
setter/getterで一括処置できるのは非常に些細なレベルの修正でしかなくて、そのためにメソッドを用意するのは手間の方が大きい。
結局、現時点でsetter/getterを使うメリットって「隣に座っているプログラマがまるで信用できない」場合くらいのもので、
それをコーディング規約やコードレビューやテストなどの事前のチェックでなく、実行時の処理でリアルタイムにチェックしようって
発想そのものが根本的に間違ってると俺は思うんだよな。プログラマの至らなさをユーザに不便として押し付けてるだけ。
大体、メソッドの使い方自体が間違ってるのを実行時に判定できたとして、それでどうフォローすんの?って感じ。
そんなレベルでこけてるってことはロジック全体も含めてそのプログラムは信用ならんわけで、まともに使い物にならんじゃん。
コアダンプみたいにデバッグ情報吐き出させるか、適当にごまかして動いてるように見せかけるか、そのくらいしかできないでしょ。
デバッグ中にはメリットもあると思うが、そんな動的チェックは納品時には外して欲しいもんだと俺は思うよ。
ひょっとすると中にはデバッグ用/納品用でsetter/getterを交換してるようなとこもあるかもしれんけど、まずやらんよね。
関数プロトタイプやデバッグシンボル付きコンパイルとかの仕組みに比べるとsetter/getterの考え方はイマイチだと俺は思うなー。
0329nobodyさん
2006/08/12(土) 21:40:56ID:???> 発想そのものが根本的に間違ってると俺は思うんだよな。プログラマの至らなさをユーザに不便として押し付けてるだけ。
コーディングは下流工程だし。
いかに至らないプログラマを効率良く使えるかってのは問題じゃん。
昔GCを自動化しようって流れが出てきたときにも似たようなこと言う奴はいた。
メモリ管理くらいプログラマならできて当然、とか言ってね。
今やメモリ管理を自分でやることほどアホな作業はない罠。
0331nobodyさん
2006/08/12(土) 21:57:55ID:???それは思いっきり実行時の高度で複雑な処理の話だしなー。
高級言語開発がいいかアセンブラ開発がいいかという議論と同レベル。
OS通さずに低レベルI/FでファイルI/Oや画面表示しようとかいうのと一緒
setter/getterの論議は設計図通りに作れない手抜き工事者がそこらにうようよしてるから、
建物の安全対策は建築時には考えずに監視員雇って定期的に見張らせよう、って話じゃね?
昨今のビルやプールでのトラブル続出を見てるとこれも現実的な選択だろう、ってことだろ。
0332nobodyさん
2006/08/12(土) 22:08:57ID:???別にいらないのなら、やらなくてもいいとは思うけど
現実的にそう主張して、仕事が上手くいっているのなら問題ないと思う
0333nobodyさん
2006/08/12(土) 22:16:27ID:???0334nobodyさん
2006/08/12(土) 22:31:24ID:???ってどういう状況?
使い方が間違っているってこと?
0335nobodyさん
2006/08/12(土) 22:37:09ID:???0336nobodyさん
2006/08/13(日) 00:13:38ID:???■ このスレッドは過去ログ倉庫に格納されています