【PHP】質問スレッドpart22【php】
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
04/09/16 18:17:37ID:/HV017tY・新規質問の方は上げてください。age進行でお願いします。
・質問する際には環境も明記。
・正しい日本語で分かりやすく。
・レスがつかないからって逆切れする厨お断り。
・解決しなくてもこたえてもらったら礼を。
■本家
http://www.php.net/
■日本 PHP ユーザ会
http://www.php.gr.jp/
■PHP マニュアル
http://www.php.net/manual/ja/
■PEAR マニュアル
http://pear.php.net/manual/ja/
過去スレ, 関連スレ等>>2-4
0310カポコン
04/09/22 07:49:51ID:???<INPUT type="checkbox" name="direction[1]" value="1">西
<INPUT type="checkbox" name="direction[2]" value="2">南
<INPUT type="checkbox" name="direction[3]" value="3">北
は
<INPUT type="checkbox" name="direction[]" value="0">東
<INPUT type="checkbox" name="direction[]" value="1">西
<INPUT type="checkbox" name="direction[]" value="2">南
<INPUT type="checkbox" name="direction[]" value="3">北
で、結果を配列として返してくれる。
0311nobodyさん
04/09/22 09:57:12ID:???0313nobodyさん
04/09/22 11:07:11ID:???0314nobodyさん
04/09/22 11:11:00ID:???0316TT
04/09/22 11:26:39ID:uEBfdSm6mail(): SMTP server response: xxx x.x.x Client was not authenticated
というようなエラーになってしまいます。
ちなみにphp.iniの
SMTP
smtp_port
sendmail_from
の値はそれぞれ指定してあります。
何か、クライアントの認証のために追加で設定しなくてはならないことが
あるのでしょうか?
初心者のため、どなたかお分かりになる方がいらっしゃいましたら
教えていただけると幸いです。
よろしくお願いします。
0317nobodyさん
04/09/22 11:31:26ID:ldZoAcj3それはSMTPサーバが稼動してる環境なんだよね?
0318nobodyさん
04/09/22 11:39:15ID:GcmfNcfj文字コードにEUCを使っているなら、
単純に"を\"にリプレースするだけで問題ないですか?
2バイト目に"と同じ文字コードが来る文字があると、
問題出てくると思うのですが。
0319nobodyさん
04/09/22 11:59:03ID:???いくつかのデータを入力(*1)して、
入力の度にいくつかのフィルター(*2)でチェックして、
エラーがある物は再入力/訂正(*3)
というプログラムにしたいのですが。
とりあえず、*1をメインルーチンとして、*2や*3を
別のファイルにしてincludeする形で書いてみたのですが、
これだと長いメインルーチンの一部を別ファイルに書き出した
だけで、フィルターの変更や追加をしたい時に保守性が悪そうです。
OOPとしてサブルーチンをまとめるにしても、
*1のデータをオブジェクトにして、
*2のフィルターもオブジェクトにして・・・って
いうのはなんか変なような気がして、困っています。
変更され得る大量のフィルターが必要なプログラム、
PHPではどのように書くと良いか、教えて頂ければ幸いです。
0320nobodyさん
04/09/22 12:32:09ID:???文字コード関係ないよ。
>>319
入力データをメンバ変数として、
フィルターをメンバ関数として使うのが普通じゃないのかな。
0321nobodyさん
04/09/22 12:33:15ID:???オレなら2のフィルタをクラスにまとめると思う。
データチェックのパターンが増えたら
メソッドを追加するようなやり方するかな。
適当すぎかね・・・?教えてエロい人。
0322318
04/09/22 12:35:20ID:???文字コード関係なく、
htmlspecialcharsするんですね。
0323nobodyさん
04/09/22 12:46:57ID:???初心者のくせにかなり失礼だな。
0324nobodyさん
04/09/22 12:49:04ID:???普通に考えると、そうですよね・・・。私もそう思ったのですが。
クラスの定義は、複数のファイルに分けられませんよね?
フィルターは大量(簡単な物から複雑な物まで)になりそうなので、
定義部分がとても長くなりそうです。
そこで、メソッドの変更って事になると、長大なソースの中の
一部を書き換えると言う事になり・・・それもまた、大変そう。
ファイル1つにフィルター1つ、くらいが見やすいかな。
でも、今の>319のやり方(includeで読み込む)だと、
カプセル化されてないのがダメ(データ型の変更に弱そう)。
なにとぞ、何か良いお知恵をお願いいたします。
0325nobodyさん
04/09/22 13:00:12ID:???良くわかってないみたいだから
<html><body>
<?php
print("<span id=\"a\">this is \"a\" test</span><br>");
print('<span id=\"a\">this is \"a\" test</span><br>');
print(htmlspecialchars("<br>\n"));
print(htmlspecialchars('<br>\n'));
?>
</body></html>
これ試してページのソース見比べてごらん。
>>324
そのためのextendsじゃないのかなあ。
0326nobodyさん
04/09/22 13:42:33ID:???入力データとチェックの性質にもよるので適切かどうかは不明
class SimpleFilter {
function checkIsOK($input_data) {
...;
}
}
class BigFilter {
function checkIsOK($input_data) {
...;
}
}
class DeluxFilter {
function checkIsOK($input_data) {
...;
}
}
$filterObjects = array();
$filterObjects[] = new SimpleFilter;
$filterObjects[] = new BigFilter;
$filterObjects[] = new DeluxFilter;
for ($filters as $filter) {
$filter->checkIsOK($inData) or DO_INPUT_AGAIN();
}
}
echo "check is ok.";
0327326
04/09/22 13:44:50ID:???for ($filters as $filter) {
$filter->checkIsOK($inData) or DO_INPUT_AGAIN();
} // ← このブレースは削除してください。
}
0328nobodyさん
04/09/22 14:09:33ID:???extendだと、フィルターの改定毎にextendする事になりませんか?
class 平成16年のフィルタ extends 元のフィルタ{
...
}
class 平成17年のフィルタ extends 平成16年のフィルタ{
...
}
class 平成18年のフィルタ extends 平成17年のフィルタ{
...
}
...みたいに。
でも、こうやって書いて見ると、それが正しいような気がしてきた。
で、class毎にファイルを分ければ、年度毎の変更点は分かりますね。
>>326,327
なるほど。そのやり方も奇麗になりそうですね。
0329nobodyさん
04/09/22 14:21:50ID:???------------------------------
define("USE_FILTER", 1);
$clsFilter = null;
switch( USE_FILTER )
{
case 1:
$clsFilter = new 平成16〜;
break;
case 2:
$clsFilter = new 平成17〜;
break;
case 3:
$clsFilter = new 平成18〜;
break;
}
/*フィルタ使用*/
$clsFilter->function();
0330nobodyさん
04/09/22 15:11:38ID:shVA5n05$subject = "件名:秩父の秋";
$msg = "メールの内容秩父の秋はなんたらかんたら";
$header = "色々";
mail($mail, $subject, $msg, $header);
↑これを実行すると、相手の$subject(件名)の内容が文字化けて届くんですけど
どのようにしたら、文字化けせずに件名が届くようになりますか?
0331nobodyさん
04/09/22 15:14:36ID:???前の年のフィルタの一部を利用するならそうならなくもない。
ただ、親クラスがどこなのかわかりづらくなって、美しくないのであまりお勧めはできない。
abstructかinterfaceをひとつ用意して、各フィルタはバージョンごとにそこから派生させるのを基本としたほうがいい。
どうしても必要なら、孫ぐらいは仕方ないかもしれないけど。
あと、前年フィルタのうち次に持ち越されると部分が必ずあるなら、 構造解析からやり直したほうがいいかもな。
0333331
04/09/22 15:30:35ID:???ちなみに>328のやり方
class FilterFolder {
var $element;
function FilerFolder(){
$this->element = array();
function attach($filer){
$this->element[] = $filer;
}
・・・insertとかdeleteとかメソッド・・・
function checkIsOK($inData){
for ($this->filters as $filter) {
$filter->checkIsOK($inData) or return false;
}
return true;
}
}
とかやっておけばOOPらしいかな。
0334nobodyさん
04/09/22 15:39:46ID:???326とかのコードをコピペした部分があるとは思うんだが、
もうちょっとコードを丁寧に書いてくれないと分かりづらい。○| ̄|_ i|||
0335質問しなおします。
04/09/22 15:40:26ID:shVA5n05$subject = "件名:秩父の秋";
$msg = "メールの内容秩父の秋はなんたらかんたら";
$header = "色々";
mail($mail, $subject, $msg, $header);
↑これを実行すると、相手の$subject(件名)の内容が文字化けて届くんですけど
どのようにしたら、文字化けせずに件名が届くようになりますか?
ただし、mb_send_mailを使わずに
>>332
mb_send_mailのことですよね?
それが、mb_send_mailは使えないみたいなんで。お答えありがとうございます
0338nobodyさん
04/09/22 16:42:59ID:???未だにHTMLでのHPが多いのは何故ですか?
PHPは人気がないのですか?使いにくい?知られてないのか
何か理由がありますか?
0343nobodyさん
04/09/22 16:49:04ID:???HTML に偽装してるとか裏でアプリ動かしてるとかは考えないのか?
例えば HTML 形式 ならブラウザのキャッシュが殆ど自動的に働くが
PHP でキャッシュを効かせられるような、ちゃんとしてる奴はあんまりいないんじゃないかな
HTTP ヘッダについてしっかり学ぶ必要もある。
0344nobodyさん
04/09/22 16:55:03ID:???>>1にあるPHPマニュアルで
http://www.php.net/FAQ.php
とかは、何故拡張子がphpなんですか?
htmlで作ってるのに、phpとは理由があるのですか?
0345nobodyさん
04/09/22 17:01:10ID:???んだから、そのページが静的に作られてると判断した理由はなあに?
.php なページをブラウザで表示してソースを見ても <?php 〜 ?> はないよ。
0347nobodyさん
04/09/22 17:03:48ID:???根本的なところから勉強した方がいい。
htmlのコンテンツの生成にPHPを使ってるんだよ。
ただ毎回生成するのがいいのか、別のタイミングで事前に生成しておくのが良いのかは
それぞれのシチュエーションによって異なる。件のページはphpのデモンストレーションの
意味合いもあって動的生成。
あと拡張子がhtmlだから動的生成ではないとか、逆にphpだからphpを使ってるとは限らない。
設定の仕方でいかようにも。そこらのサイトなんかだと本当のことは中の人しか判らない。
0348nobodyさん
04/09/22 17:13:32ID:???0349ぼるじょあ ◆yEbBEcuFOU
04/09/22 17:15:56ID:???0350nobodyさん
04/09/22 17:19:51ID:???知らなかった…
すこし関心した
0351nobodyさん
04/09/22 18:09:14ID:Spt3uBKt必須項目に入力されているかどうか,
数字のみフィールドに対して数字以外が入力されているかどうか・・・
等々を判断してくれるような汎用ライブラリとかはありませんか?
自分でつくろうとしたんですが,radioやcheckboxやselectなど面倒くさくなったのです・・・
0352351
04/09/22 18:16:58ID:Spt3uBKt追加なのですが,レンタルサーバなもので
PEARのHTML_QuickFormなどは使えないのです・・・
単純にrequireして使えるライブラリやクラスが理想なのですが.
0353nobodyさん
04/09/22 18:23:31ID:???単体で色んなのやフレームワーク独自のがあるけど
有名どころだとPEARのHTML_QuickForm
http://pear.php.net/package/HTML_QuickForm
0355351
04/09/22 18:28:29ID:???ありがとうございます!PEARって使えるんですね!
色々彷徨っていて
ttp://lfsmart.itbdns.com/
↑のような良さそうなのも見つけたんですが,
とりあえずリソースの多そうな HTML_QuickFormから
チャレンジしてみます.
0356nobodyさん
04/09/22 19:25:15ID:???0357nobodyさん
04/09/22 19:30:16ID:???0358nobodyさん
04/09/22 19:35:41ID:???PHPの本を出版だー
0361nobodyさん
04/09/22 19:57:29ID:???「こんなスクリプト組んでみたんですけどどうですかね?」
「へー、ゴキゲンだねぇ」
0362nobodyさん
04/09/22 20:04:55ID:WbLCczlE0363nobodyさん
04/09/22 20:10:01ID:???0364TT
04/09/22 21:10:03ID:wzCQpIRe>317さん
自分のPC上のローカルサーバーでテストをしていて、普段E-メール送信に
使っているSMTPサーバ名やポート番号をメールソフトのプロパティから
拾ってきてphp.iniに記述したんですけど。。。
普段自分のPC上のメールソフトからメール送信はしてるので、SMTPは稼動
してる環境だとは思うんですが・・・
0365nobodyさん
04/09/22 21:41:19ID:???0366nobodyさん
04/09/22 22:10:34ID:???>SMTPサーバ名を拾ってきてphp.iniに記述
は変じゃないの。ローカルのpathを記述でしょ。
リモートのSMTPを使いたいならPHPMailerとか使わないと
mail関数だと今のところ出せないと思うけど
0368nobodyさん
04/09/22 23:20:41ID:???0369nobodyさん
04/09/23 01:40:26ID:???0370TT
04/09/23 02:45:45ID:wbKSUi7Yすみません、使用OSはWindows2000です。失礼しました!
マニュアルをもう一度確認してみます。
0371カポコン
04/09/23 03:59:06ID:???大きな動きになるよな。。。次に出るのはなんだろうか?
0372二階堂面一
04/09/23 04:50:35ID:loTaUpM/開発環境はWindowsXP HOME、使用サーバはレンタルサーバ(PHP 4.3.8)です。
簡単にフォーム送信プログラムをイチから書いて動かしてみました。
フォームから受けた内容をそのままstripSlashes()でクォートを消して
mail()で送信してます。
Windowsの一般的なメーラー(Outlook Express、Eudora、Becky!)や
Macintosh(OS9系)の一般的なメーラー(Outlook Express)では問題は起きませんが、
Macintosh(OS9系)のEntourageのみ、件名・本文が空白になってしまいます。
誰かこの事象に対するTIPSをお持ちではないでしょうか。
よろしくお願いしますです、押忍!
0374nobodyさん
04/09/23 07:15:06ID:???Mac OS9.2.2 で、PHPのローカルテストをしたいのです。
ですが、検索しても出て来ません。
同じ環境の方はどうやってローカルでPHPを動かしているんですか?
0375nobodyさん
04/09/23 07:18:18ID:???0377nobodyさん
04/09/23 10:10:38ID:???0378nobodyさん
04/09/23 10:31:29ID:???0380nobodyさん
04/09/23 12:29:45ID:3TpzK2e01)AファイルのコピーtmpAを作成してそこから1行づつ読み込みループ
変更しない場合はそのままAファイルへfgets
変更する場合は文字列処理してAファイルへfgets
仕上げにtmpAを削除
2)file(Aファイル)で一発読み込み
配列ループで変更する場所だけ文字列処理
Aファイルへ一発出力
処理速度やらメモリ効率やらなんやらでどっちがええやろか
まぁファイルサイズにもよるとは思うんけどファイルは1行60バイト前後で300行前後やね
0381nobodyさん
04/09/23 12:30:40ID:3TpzK2e00383nobodyさん
04/09/23 14:07:17ID:???どちらが良いとは一概に言えない気がする
0384nobodyさん
04/09/23 14:16:20ID:cIuxyfdR藤という漢字だけではないのですが、
特定の文字が化けます。
何がいけないのでしょうか?
$test = '藤';
echo "{$test}<br>"; //正常に表示される
$test = mb_convert_encoding($test,'EUC-JP','auto');
echo "{$test}<br>"; //?に化ける
0385nobodyさん
04/09/23 14:56:06ID:???単に文字エンコーディングの検出に失敗しているだけじゃないの?
mb_convert_variablesの説明にもあるが、短い文字列では
エンコーディングの検出があやふやになるのは仕方が無いこと。
解決するには、(解決になってないが)文字エンコーディングを明示するか、
もっと長い文字列を与えるしかない。
0386nobodyさん
04/09/23 15:52:26ID:???0387nobodyさん
04/09/23 16:03:44ID:???0388nobodyさん
04/09/23 16:14:58ID:+Z5r+lqeです。
.htaccessにて
php_flag register_globals on
をやったのですが、internal server error 500
になってしまいます。
CGI版は.htaccessは効かないのでしょうか
0389nobodyさん
04/09/23 16:50:26ID:???覚えたきっかけ。覚えて得をしたこと。損をしたこと。
などなど、少し聞かせてください。
0390nobodyさん
04/09/23 17:02:32ID:???0391nobodyさん
04/09/23 17:12:05ID:???0392nobodyさん
04/09/23 17:17:40ID:???0393nobodyさん
04/09/23 17:53:01ID:???0394軟式PHP
04/09/23 18:04:20ID:???0395nobodyさん
04/09/23 18:22:46ID:???どうやって取り掛かったのか
本?WEB?
0396nobodyさん
04/09/23 18:55:12ID:???0397nobodyさん
04/09/23 20:18:17ID:???0398nobodyさん
04/09/23 20:22:27ID:???0399nobodyさん
04/09/23 20:33:22ID:???0400nobodyさん
04/09/23 20:33:28ID:???0401nobodyさん
04/09/23 20:58:32ID:???想像通り効かない。この機会にマニュアルも嫁。
suexecなどでCGI版使わせる場合だと、ユーザ毎にphp.iniが使えるように
インストール時にphpを設定するのが普通。
0403nobodyさん
04/09/23 23:01:52ID:cIuxyfdRアドバイスどうもです。
みなさまのおっしゃるとおりぽいです。
一文字はやはりだめぽい上に、
autoも怪しいところでした。
その辺考慮してもうちょっと考えたいと思います。
ありがとうございました。
0404nobodyさん
04/09/23 23:29:52ID:???1分に1回更新されるファイルとかだったらどうする?
それもリモートのサーバに定期的にアップロードされてるものとか。
エディタのマクロの方が良い場合もあれば、スクリプトで対応した方が良い
というか、エディタではできない場合もあろう。
0405nobodyさん
04/09/23 23:32:34ID:???0406nobodyさん
04/09/23 23:49:20ID:???0407nobodyさん
04/09/24 00:00:12ID:???セッションを使うとtmpフォルダの中にファイルが作成されると思うのですが、
これはどうやって消すのでしょうか。。
厨な質問だと思うのですがよろしくお願いいたします。。
0408nobodyさん
04/09/24 00:01:21ID:???0409nobodyさん
04/09/24 00:05:51ID:???session.gc_probability
session.gc_divisor
session.gc_maxlifetime
あたりを読むと分かるかも。
一定の割合で勝手におそうじされます。
■ このスレッドは過去ログ倉庫に格納されています