【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カテゴリ)の各スレで
・オブジェクト指向については良スレがないから本を買え。理解できないならムリに使うな。
・速さについては自分でベンチをとってここに書け(違う環境の人も調べてくれるかも)
0222nobodyさん
2006/08/10(木) 13:10:35ID:oKJYDnYFどうやって?
0223nobodyさん
2006/08/10(木) 13:15:11ID:???mb_internal_encoding("SJIS");
これがまずいんじゃない?
たしか内部エンコードSJISは使えなかったはず。
UTF-8かEUC-JPでやるとうまくいくと思う。
0225nobodyさん
2006/08/10(木) 13:21:15ID:???PHPで動作しないと思われる文字エンコーディングの例を以下に示します。
JIS, SJIS, ISO-2022-JP, BIG-5
これらのエンコーディングで書かれたPHPスクリプトは、 特に符号化された文字列がスクリプトで記述子やリテラルに使用される場合には、 動作しない可能性がありますが、
入力されるHTTPクエリに関して mbstringの透過的なエンコーディングフィルタを 設定することでこれらのエンコーディングをほとんど使用しないようにすることが できます。
SJIS使いたければ、内部エンコードUTF-8とかにして出力時に自動変換がお勧め
0226nobodyさん
2006/08/10(木) 13:27:35ID:???-------- .htaccess --------
php_flag output_buffering On
php_value output_handler mb_output_handler
php_value default_charset UTF-8
php_flag mbstring.encoding_translation Off
php_value mbstring.http_input auto
php_value mbstring.http_input UTF-8,SJIS,EUC-JP,JIS,ASCII
php_value mbstring.substitute_character none
php_value mbstring.internal_encoding UTF-8
php_value mbstring.http_output UTF-8
php_value mbstring.language Japanese
---------------------------
出力をSJISにしたいときは
php_value mbstring.http_output SJIS
とする
0227nobodyさん
2006/08/10(木) 13:33:18ID:???> $subject = "お問い合わせがありました。\n";
の."\n"を外せ。
「改行コードが余分だ」と言ったのに何を聞いてたんだ。
ttp://www.php.net/manual/ja/function.mail.php
> subject
> 送信するメールの表題。
> 注意
> 改行を含んではいけません。含めてしまうとメールが正しく送信できません。
0229nobodyさん
2006/08/10(木) 14:15:48ID:83OIGtylレスありがとうございます。
教えて頂いた内容を試しましたが、だめっぽいですorz
mb_internal_encoding("UTF8");としてみましたが、
あいかわらずヘッダー情報のようなものは出力されます。
\nはあまり関係が無いようでした。
以下のようエンコードをUTFにして各変数の中身を空っぽにして
送信したところ、そのいらないヘッダー情報だけが本文として送られてきてしましました。
<?php
mb_language("ja");
mb_internal_encoding("UTF8");
$to = "携帯のアドレス";
$from = "PCのアドレス";
$subject = "";
$header = "";
$msg = $header."";
mb_send_mail($to, $subject, $msg, $header);
?>
上から2行のmb関数の行を削除して送信してみたら、
mime-version:1.0
content-type:text/plane;carset=utf8
content-transfer-encoding: base64
これの最後の行がbace64になったという以外、大きな変化はありませんでした。
0230nobodyさん
2006/08/10(木) 14:16:46ID:83OIGtyl0231nobodyさん
2006/08/10(木) 14:25:41ID:???どのような関数で取得できるでしょうか?
下らない質問で申し訳ありませんがお願い致します
0232nobodyさん
2006/08/10(木) 14:26:53ID:83OIGtylttp://blog.itoy.jp/archives/20050108_0133.php
本家のURLは移動したっぽくて確認できませんでしたが、ドコモ的な仕様っぽいです。どうにもならないでしょうか?
0233nobodyさん
2006/08/10(木) 14:28:34ID:???<?php
mb_language("ja");
mb_internal_encoding("UTF8");
$to = "[email protected]";
$from = "[email protected]";
$subject = "てすとサブジェクト";
$header = "From: " . $from;
$msg = "本文";
mb_send_mail($to, $subject, $msg, $header);
?>
0234nobodyさん
2006/08/10(木) 14:37:03ID:83OIGtylありがとうございます。
ドコモ以外のキャリアをお使いですか?
ttp://www.nttdocomo.co.jp/info/spam_mail/if/index06.html
オフィシャルな情報をみつけました。
携帯に通知するようなサービスは結構あると思うのですが、どうやってやっているのでしょうか。
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:???■ このスレッドは過去ログ倉庫に格納されています