【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
0267nobodyさん
04/09/21 10:20:02ID:???100件程度なんだけど。
0268266
04/09/21 10:26:53ID:???0269nobodyさん
04/09/21 10:43:04ID:???�@-------------------------------------------------------------------------------------�A
�B
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
�C
■カウンター
�@一日に10も回らない
�Ayahoo並み
■件数及び取り出すデータ量
�B10件程度、数文字
�C数十万件、数千文字
0270軟式PHP
04/09/21 11:02:46ID:???0272nobodyさん
04/09/21 11:38:58ID:???�B
|
|
|
|
|
|
|
|
| ○_○
| ⊂(・(ェ)・ )つ-、
| /// /_/:::::/
| |:::|/⊂ヽノ|:::| /」
| / ̄ ̄旦 ̄ ̄ ̄/|
| /______/ | |
| | |-----------| |
|
|
|
|
|
|
|
|
|
|
|
�C
0273nobodyさん
04/09/21 11:41:05ID:???0276nobodyさん
04/09/21 11:58:58ID:???普通にreturnした時もfalseなんですね。
nullとfalseは別物だと思っていたのではまりました。
0277nobodyさん
04/09/21 12:00:20ID:???0278nobodyさん
04/09/21 13:14:55ID:8frhj/+D1年くらい前の php の時(4.2.x くらい?)の checkdate は
与える引数が空でも処理してくれたと思うのですが,今 4.3.8 で試したら
Warning: checkdate() expects parameter 1 to be long, string given in
とエラーになってしまいます.
気になっているのは PHP のどのバージョンから上記のように
checkdate の仕様が変更されたか? という事です.
もしかしたら 4.2.x の時にエラーを表示しなかった事が気のせいなの
かもしれませんが,このあたり御存知の方,いらっしゃいませんでしょうか?
0279nobodyさん
04/09/21 13:16:26ID:???header('Content-Type: image/jpeg');は必ず必要なのでしょうか?
↑これなしでもサイズ変更して保存できますか?
0281nobodyさん
04/09/21 13:37:48ID:???確かに PHP 4.2.2 あたりの checkdate() はエラーを表示しない。
PHP 4.2.3 ではエラーが表示されるので、そのあたりのバージョンで
引数のチェックを行うようになったのでは?
でも checkdate() の引数は3つで、さらにオプションではないので
引数を空にする意味があるとは思えないけど。
どうしてもエラーが表示されるのを抑制したければ、
@checkdate() とすれば良い。
0283nobodyさん
04/09/21 17:44:22ID:???判断するため
$sql = "SELECT * FROM table WHERE example = 'test'";
if (pg_query($sql)){
echo "testが含まれています。\n";
}
と書いてみたら、testが含まれているときは思い通りに
動作したのですが、testが含まれていないときも
「testが含まれています」と表示されてしまいました。
WHEREで条件を指定したとき、表示するデータが
空っぽかどうかはどうやって判断したらよいのでしょうか?
0284nobodyさん
04/09/21 17:48:37ID:vELHxRQT有名な掲示板のプログラムでクラスを使用しているものがあるのですが、
全体を一つのクラスにしているのです。
(始めにクラスではじまってプログラムの最後まで一塊)
私にはこれが良く分からず、たとえば
記事関係の処理ならNewsEditing、
投稿文の処理等ならPostEditingという
クラスで括ったほうが処理ごとに似通った操作ができるのでそのほうがいいと思うのです。
多分私が、間違ったことを言っているのだと思うのですが、
全体を括る利点を教えていただければ幸いです。
0287283
04/09/21 17:56:42ID:???pg_query($sql)をvar_dump($sql)に差し替えと言うことでしょうか。
差し替えてみたところ、相変わらず、実際に含まれていようと
いまいと「testが含まれています」と表示されてしまいます。
0288nobodyさん
04/09/21 18:01:22ID:vELHxRQTttp://shu.sub.jp/
こちらのサイトの
ttp://shu.sub.jp/xoops/modules/tinycontent/rewrite/tc_2.html
のsimplet board + が一例です。
0289nobodyさん
04/09/21 18:06:27ID:???誰も差し替えろとは言ってない
なにでもって条件判断しているのか確認してみたらといってるだけで
var_dump(pg_query($sql));
これをif文の前か後においてそれぞれの条件でどう値が変化するか確認してみたらいいさ
http://jp2.php.net/manual/ja/function.var-dump.php
0291nobodyさん
04/09/21 18:53:16ID:???たぶんPerlから移行してきた人。
スコープを明確にするためにclassを使ってるだけっぽい。
オブジェクト指向で書いているわけじゃないね。
これをオブジェクト指向のクラスの使い方とは思わないほうがいいよ。
以下、感想。
ソースは職業プログラマらしい書き方だね。
行コメントに # 使ってたり、なんかそういうの嫌な感じ。
俺はヒアドキュメントも嫌い。
0292283
04/09/21 19:02:27ID:???var_dump(pg_query($sql));
の結果はtestが含まれているかに関わらず
resource(5) of type (pgsql result)
でした。
pg_query($sql)が変化しないとなるといったい何で判断したらよいのでしょうか…
0293nobodyさん
04/09/21 19:04:19ID:???普通は、count(*) して件数が0件なら“含まれていない”
件数が0件より大きければ“含まれている”ってするのが筋じゃないか?
0294nobodyさん
04/09/21 19:10:56ID:???PHP + PostgreSQL
http://pc5.2ch.net/test/read.cgi/php/983128806/
専用スレもあるぞ。
まぁ、>293か
SELECTした内容が必要ならpg_num_rowsですね。
0296nobodyさん
04/09/21 19:28:02ID:???$sql = "SELECT example FROM table WHERE example = 'test'";
$result = pg_query($sql);
if ( pg_fetch_row( $result, 0)){
echo "testが含まれています。\n";
}
0297nobodyさん
04/09/21 19:34:50ID:???っか、それだと、「0件存在する」という結果が返ってくるので、
falseにはならんと思うが?
$sql = "SELECT * FROM table WHERE example = 'test'";
$res = pg_query($sql);
if (pg_num_rows($res) > 0) {
echo "testが含まれています。\n";
}
0298297
04/09/21 19:36:58ID:???0300nobodyさん
04/09/21 21:48:00ID:???header関数はHTTP"レスポンス"ヘッダを変更する関数です。
そして、Content-Typeってのはクライアントに返される内容のタイプを指定する。
画像を返す(表示させる)なら、適切に指定してやる必要がある。
0301nobodyさん
04/09/22 00:41:01ID:lkwJEqST<INPUT type="checkbox" name="direction[1]" value="1">西
<INPUT type="checkbox" name="direction[2]" value="2">南
<INPUT type="checkbox" name="direction[3]" value="3">北
として、どれがチェックされてるかを
for ($i = 0; $i < 4; $i++) {
if ($direction[$i]) {
処理
}
}
として調べてるのですが、
添え字0以外の値は受け取れるのに$direction[0]の値だけ受け取ることができません。
htmlかphpで制限あるのでしょうか?
そのような記述は探しても見あたらないのですが。。。
よろしくお願いいたします。
0302nobodyさん
04/09/22 00:43:40ID:???0なんで偽ですよね。。。
1時間も悩んでたのに。。。
すんませんでした。。。
0303nobodyさん
04/09/22 00:57:54ID:???頑張れ
0304nobodyさん
04/09/22 01:44:23ID:awT4KPUtfor ($i=0; $i< $match_all; $i++) {
$url = "http://dailynews.yahoo.co.jp/fc/". $item[1][$i];
$title = $item[2][$i];
$title = strip_tags($title);
echo "<li><a href=\"". htmlspecialchars($url) ."\">". htmlspecialchars($title) ."</a></li>\n";
}
echo "</ul>\n";
ヤフートピックを書き出すコードらしいんだけど、URLをこれを新しいウィンドウで開くようにするにはどうすればいいの?
0305ぼるじょあ ◆yEbBEcuFOU
04/09/22 01:56:47ID:???0306nobodyさん
04/09/22 04:38:01ID:aBxduLG0「ダイエー本社とダイエー球団の命運にかかわらず、来季(05年)2リーグ12
球団以上を約束する、と渡辺恒雄会長が明言しない限り、私(わが社)は読売
新聞を購読・購入しません」
が1万通以上届かない限り、あの傲慢な渡辺がこんなコメントを出すことは
ないだろう。
が、「大読売」と「インターネット」と、メディアとしてどっちが強いのか、
いっぺん試してみる価値はあるのではないか。米国では、インターネット上
で「イラク戦争反対」を唱えるblog(ブログ、簡易型ホームページ)同士が
コメントを投稿し合ってリンクで結び付き、「反戦」以外にさしてとりえ
のない、マスコミが軽視していた泡沫候補、ハワード・ディーン前バーモ
ント州知事を、03年後半の一時期とはいえ、米民主党の大統領候補指名争
いのトップに押し上げた、という例もある(このため米国ではblogは、日本
のように「個人の日記」としてではなく、市民運動の手段として知られて
いる。産経新聞04年3月6日付朝刊21面「正論」)。
この種の運動で効果をあげるには、大勢の参加を容易にするため作戦を
シンプルにしたほうがいい。「桶狭間の奇襲戦」と同様に、標的は1つ(読売
の渡辺)に絞り、宮内のような雑魚は攻撃対象から除外し、抗議メールの宛先
もmailto:[email protected]に絞るべきだ。
0307nobodyさん
04/09/22 05:53:16ID:awT4KPUtできました。こんなんも知らないですんせん。
それにしてもN速で見たようなHNだ・・・
0308nobodyさん
04/09/22 06:47:49ID:GcmfNcfjApacheのServerTokensをProductOnlyにしました。
これでヘッダにApacheのバージョンは出なくなりましたが
X-Powered-By:
でPHPのバージョンがばればれです。
これを表示しないようにする方法があれば教えてください。
0309308
04/09/22 06:57:52ID:???で解決できました。すみません。
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関数だと今のところ出せないと思うけど
■ このスレッドは過去ログ倉庫に格納されています