【PHP】下らねぇ質問はここに書き込みやがれ 55
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2007/09/29(土) 18:35:56ID:YlkpEUW6PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。
過去スレ、関連スレ、FAQなどは>>2-10辺り
◆前スレ
【PHP】下らねぇ質問はここに書き込みやがれ 54
http://pc11.2ch.net/test/read.cgi/php/1189309377/
◆質問する時の注意
・ 自分のIDを表示させること。(メール欄に何も記述しないこと。空白も入力しちゃダメ)
・ サーバーのOS(Linux、Windows他)、WebサーバーとPHPの種類やバージョン等を明記すること。
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
◆質問後の注意
・偽者防止に必ずIDを表示させること。(メール欄に何も記述しない)
・2回目以降は最初に質問した際のレス番号を名前欄に入れること。
・解決しなくても回答をもらった場合はお礼を言うこと。
(荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)
◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
【その他諸注意】
・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
・SQLについての質問はデータベース板(PCカテゴリ)の各スレで
0203nobodyさん
2007/10/03(水) 04:35:16ID:???トリミングしてくれるライブラリや関数は無いだろうか?
一応、gdやImagick、MagickWandの関数を調べたり実際に試したりしてみたんだが、どうも見当がつかない・・・・・・
いったんjpgに分割してトリミング後に再結合とかはできるみたいだけど、
それだと結局、delay値取得するためにヘッダを解析しなきゃならなそうでなあ。
もし何か良い方法知っていれば教えて欲しい。
0205nobodyさん
2007/10/03(水) 09:35:05ID:I/i9laybを入れないとValidは通るのですが入れろといわれるので、入れると
エラーがでるのでechoに入れてみるとページすべてでエラーになります。
<?xml version = "1.0" encoding = "utf-8"?>の部分をヒアドキュメントに入れても
同じようにエラーが出ます。
phpページでValidを通す時みなさんはどうしてますか?
本体のページはTransitionalで
<?xml version = "1.0" encoding = "utf-8"?>はいれずに通ります。
問題があるのがCompact HTMLの携帯ようサイトです。
0207nobodyさん
2007/10/03(水) 10:02:24ID:???でダメだったって事?
0208nobodyさん
2007/10/03(水) 10:10:37ID:???xml宣言の<?とphp宣言の<?がかぶってしまうため起こる問題でしょ?
<?php echo "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"; ?>
とviewの1行目に入れればいいんじゃない
0209nobodyさん
2007/10/03(水) 10:26:22ID:???それならechoやヒアドキュメントではエラー出ないだろ。
根本的にどっかPHPの構文間違ってるんだよ、多分。
0210nobodyさん
2007/10/03(水) 10:37:07ID:xx+cFlmVPHPのmb_send_mail関数を使ってメール送信をしているのですが、届くドメインと届かないドメインが
あり困っています。
サーバーはロリポップを使っているのですが、
お聞きしたいのはメールサーバのログの見方です。
ググってみたりしたんですが、方法が良くわかりませんでした。。。
OSは、macOSX 10.4.10です。
どなたか、宜しくお願い致します
0212nobodyさん
2007/10/03(水) 10:45:07ID:???macってクライアントが?
クライアントは関係ないんじゃないの?
ロリポのメールサーバが何使ってるか知らないけど
サーバ側のシステムログなんてサーバ管理者しか普通見れないよ
0213nobodyさん
2007/10/03(水) 10:53:12ID:xx+cFlmVそうなんですね。ありがとうございます。
できればmail()の利点をご教示頂けますでしょうか。。。
>>212
クライアントがmacです。
ロリポップはqmailというメールサーバを使っている様です。
色々調べてみたら、メールが届かない時はとりあえず
メールログを見ろと書いてあるところが多かったもので。。。
0214nobodyさん
2007/10/03(水) 11:06:01ID:???オッパッピ?
0215nobodyさん
2007/10/03(水) 11:36:14ID:zZ6Mc9LXたとえばメニューを登録するプログラムがあって、 menu と priceの2種類のフィールドを
DBが持ってるとします(それと自動インクリメントのID)。
これに対して、登録用フォームで3つのメニューを一度に登録したい時、
どういう処理をしたらいいんでしょう?
メニュー1:<input type="text" name="menu"> <input type="text" name="price">
メニュー2:<input type="text" name="menu"> <input type="text" name="price">
メニュー3:<input type="text" name="menu"> <input type="text" name="price">
これじゃダメですよね?
それぞれにユニークのフィールドを持たせるのが一番無難かもしれないですが、
なんかイヤなので…(実際には3つでなく任意の数にしたいんです)
1メニューずつ追加登録してくのがいいんでしょうか?
それとも、上記のやり方でも解決できるPHPのくみ方があれば
教えて欲しいです。
よろしくお願いします。
0217215
2007/10/03(水) 12:33:24ID:zZ6Mc9LXごめんなさい どういうことでしょう?
HTML側は上に書いた通りでよくて、PHPで用意したmenu配列とprice配列に
入れるってことですか?
DBへの登録はmenu[0]〜menu[N]までループで処理??
そんなことできるのかな? 大雑把にでも教えてもらえれば嬉しいです。
0218nobodyさん
2007/10/03(水) 12:41:59ID:???menu[0]〜[2]
price[0]〜[2]
みたいに振り分ければ?
>そんなことできるのかな?
プログラムは「できるかな?」じゃなくやってみるんだ
やるまえに「できるかな?」と尋ねると進歩しない
0219nobodyさん
2007/10/03(水) 12:43:16ID:???mb_send_mail()はmail()のwrapperだよ
mail()にマルチバイト文字変換処理を付加したもの=mb_send_mail()
よってメイル送信前の処理は全て自前で行わなければならない
0221nobodyさん
2007/10/03(水) 12:47:42ID:???レンタルサーバを利用している時点で貴方が掌握できるのは
PHPで作ったプログラム(フロントエンド)の部分だけ
バックグランドで何が起きているのか知る術は無いから諦めろ
0222nobodyさん
2007/10/03(水) 12:58:51ID:???そうだねぇ、自分で全て面倒みれる人ならmail()の方が良いかも
mb_send_mail()はSubjectと本文しか処理しないしね
例えば"おいら<me@example.com>"ってヘッダにつけると
"おいら"が化けるから予めMIME処理しなけりゃならん
結局、手間はたいして変わらなくなる
0223nobodyさん
2007/10/03(水) 13:03:01ID:???0224213
2007/10/03(水) 13:59:15ID:xx+cFlmV>>221さん
ありがとうございます。大変勉強になります。
今ロリポップのサーバーからテスト運用しているのですが、
独自ドメインとgmeilの方へは送信できるのですが、
yahooアドレスや携帯のアドレスへ送信しようとすると
デーモンよりfailure noticeとして帰ってきます。
<=?ISO-2022-JP?B?省略==?=@sv390.lolipop.jp>:
Sorry, no mailbox here by that name. (#5.1.1)
と、宛先が文字化けしている様です。
0225213
2007/10/03(水) 14:02:17ID:xx+cFlmV以下にコード晒します。
mb_language("Ja");
mb_internal_encoding("UTF-8");
$mailfrom = mb_encode_mimeheader($name)."<".$email.">";
$mailto = mb_encode_mimeheader("example@yahoo.co.jp");
$subject = "WEBサイトよりお問い合わせです。";
$content = wordwrap($content, 70);
$header = "To: <{$mailto}>\r\n" .
"From: {$mailfrom}\r\n" .
"X-Mailer: PHP/" . phpversion();
$param = "-f" . $email;
if (mb_send_mail($mailto, $subject, $content, $header, $param))
{
echo("メール送信完了しました。");
} else {
echo("メール送信に失敗しました。");
}
$email,$nameはフォームからの入力値になります。
サーバーのphpはver.4.4.6となります。
宜しくご教示お願い致します。
0226nobodyさん
2007/10/03(水) 14:21:34ID:???ヘッダーで文字コード指定してやれば?
0227213
2007/10/03(水) 14:25:09ID:xx+cFlmVありがとうございます。
おっしゃるとおりで、コピペです。。。
ヘッダーで文字コード指定試してみます!
0228nobodyさん
2007/10/03(水) 14:35:21ID:???$mailto = mb_encode_mimeheader("example@yahoo.co.jp");
こいつはMIMEエンコードをしないで$mailto = "example@yahoo.co.jp";
$header変数にこいつ→ "To: <{$mailto}>\r\n" を含めない
ヘッダにTo:句が重複して現れてないか?
0229213
2007/10/03(水) 14:47:29ID:xx+cFlmV>>$mailto = mb_encode_mimeheader("example@yahoo.co.jp");
>>こいつはMIMEエンコードをしないで$mailto = "example@yahoo.co.jp";
これを試したら届きました!
本当にありがとうございます。
よく分からずにWEBで拾ったコードを信用していたのが原因でした。
やはりPHPマニュアル以外はあまり参考にならないのですね。
To:が重複していたのもおっしゃるとおりで、解決しました。
皆様ありがとうございました。
0230nobodyさん
2007/10/03(水) 15:00:48ID:???http://jp.php.net/html#faq.html.arrays
0231205
2007/10/03(水) 15:39:42ID:I/i9laybindex.phpの内容は
<?xml version = "1.0" encoding = "utf-8"?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD Compact HTML 1.0 Draft//EN">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>test</title>
</head>
<body>
test
</body>
</html>
です。このままだと、
Line 1, Column 0: end of document in prolog.
とでるので、<? echo '<?xml version = "1.0" encoding = "utf-8"?>'; ?>と修正すると
Line 1, Column 104: no system id specified.や
Line 3, Column 5: element "head" undefined.
などすべての行でエラーがでます。レスいただいた
<? echo "<"."?xml version = \"1.0\" encoding = \"utf-8\"?".">"; ?>
も試しましたが全く同じエラーです。
0233nobodyさん
2007/10/03(水) 15:43:55ID:???0234nobodyさん
2007/10/03(水) 15:55:44ID:???普通にこれで通らないか?
<?php
echo "<?xml version = \"1.0\" encoding = \"utf-8\" ?>\n";
?>
0235nobodyさん
2007/10/03(水) 16:00:37ID:???0236205
2007/10/03(水) 16:36:11ID:I/i9laybそれにしても、みんなどうやって通してるんだろ。
失礼しました!
0240nobodyさん
2007/10/03(水) 17:37:30ID:???0242nobodyさん
2007/10/03(水) 18:00:30ID:e5ck+SXs配列Aだけにある値と配列Bだけにある値をとりたいのですが
どのように処理すればよいでしょうか?
0243nobodyさん
2007/10/03(水) 18:07:51ID:???0245242
2007/10/03(水) 18:13:11ID:???どうもありがとうございました!!
0246nobodyさん
2007/10/03(水) 18:32:30ID:oSSk/nfV改ページなどはGETで行いますよね?
その際、以下のようにして検索対象となるWHEREの内容を、作成しています。
if($_POST["name"] ){
$name =htmlspecialchars($_POST["name"]) ;
}elseif($_GET["name"]){
$name = htmlspecialchars($_GET["name"]) ;
}
$search_set ="name='$name'"; //検索用のSQLを作成
$where = "WHERE $search_set"; //MySQLのWHEREに当てはめる
見たいな感じでやっているのですが、上記だとコードが長すぎますし、
正直無駄に感じます。みなさんはどのようにしているのでしょうか?
0247nobodyさん
2007/10/03(水) 19:04:28ID:???abcdefg
全角
ABCDEF
0248nobodyさん
2007/10/03(水) 20:02:08ID:???HTMLエンティティ化はHTML出力に対して行うものであって入力値にかけるものではない。
それから初めのうちはコードの長さなんか気にするな。ロジックを気にしろ。
0250246
2007/10/03(水) 20:07:41ID:???入力値にかけないと余計なコードを入力された場合、
対処出来ないのではないでしょうか?
>>249
REQUESTでも問題ないですかね。リファレンスでは「あまり使われていない」
って書かれていたので、上のようなコードにしていました。
0251nobodyさん
2007/10/03(水) 20:12:04ID:???htmlspecialcharsは「HTML表示の際」に必要なエスケープであって
SQLを組み立てる場合に必要なエスケープではないでしょ。
この場合は例えばmysql_escape_stringとかを使うわけだけど、
逆にSQL用にエスケープしたものをHTML表示に使えるわけでもない。
つまり、入力値はいきなりエスケープするものではなく(汎用のエスケープというのは無い)
何かの用途に使う時点で、それぞれの目的にあった形にエスケープしなきゃダメなのよ。
0252nobodyさん
2007/10/03(水) 20:34:58ID:???0253nobodyさん
2007/10/03(水) 20:44:52ID:L+I4Rl+L最近、PHPを勉強し始めました。
もし、アドバイスしてくださる方が居れば、こちらへ宜しくお願いします。
http://php121.blog121.fc2.com/
0255nobodyさん
2007/10/03(水) 20:47:44ID:???0257nobodyさん
2007/10/03(水) 21:21:37ID:???GET、POSTのどちらで来てもいいなら$_REQUESTだけど
どちらかしか認めないような場合(特にPOST)なら分けた方がいい。
>>246の場合ならDB用にSQLエスケープでいいけど
入力値によっては妥当な(期待している)値かのチェックは必須(数値や日付等)
0261nobodyさん
2007/10/03(水) 22:01:19ID:???気をつけろ! $_REQUESTには$_COOKIEも入ってくる。orz
あと$_FILESも
0262nobodyさん
2007/10/03(水) 22:13:05ID:???げ、マジですか! ジェットストリームアタックだw
優先順位はどうなってるのだろ? 当然高い方に上書きされるよね?
0263262
2007/10/03(水) 22:16:54ID:???0264nobodyさん
2007/10/03(水) 22:19:10ID:???バグ生む原因になるだけ。
0265nobodyさん
2007/10/03(水) 22:40:04ID:gbZJiSoXinclude_once("A.php");
include_once("B.php");
とやってしまうと function hoge が二度呼び出されたことによりエラーが返されます。
なんとかうまくエラーが出ないようにする方法は無いでしょうか?
ちなみにA.phpかB.phpのどちらかから function hoge を消してしまうと他の部分で
エラーが生じてしまうのでできるだけA.phpとB.phpの中身には大幅な変更は
加えたくありません。
0266nobodyさん
2007/10/03(水) 22:49:49ID:???二重定義のエラーは回避できない。
つ[function-exists()]
http://jp.php.net/manual/ja/function.function-exists.php
0268nobodyさん
2007/10/03(水) 23:18:29ID:???0269nobodyさん
2007/10/03(水) 23:26:48ID:???0270265
2007/10/03(水) 23:31:05ID:gbZJiSoX二重定義は回避不能でしたか・・・
>>267-269
今後プログラムするときは気をつけたいのですが>>267さんの言うとおり
関数は一つにつき一つのphpファイルの中で定義して使い回すのが
正しい作り方になるのでしょうか?
0271nobodyさん
2007/10/03(水) 23:40:21ID:???0273nobodyさん
2007/10/03(水) 23:47:35ID:???0274nobodyさん
2007/10/04(木) 00:36:17ID:2S6z8FqVecho 1+2がなぜ3になるのですか?
echoは引数を評価する関数なんですか?
0275nobodyさん
2007/10/04(木) 00:45:23ID:???すまん。include_once(C.php)だ (だと大丈夫だよね?)
C.php -------------------------
function hoge(){}
A.php -------------------------
include_once("C.php");
B.php -------------------------
include_once("C.php");
Main.php -------------------------
include_once("A.php");
include_once("B.php");
$foo = hoge();
0278nobodyさん
2007/10/04(木) 01:09:13ID:???俺も$_REQUEST使ってた...。
じゃやっぱり$_POSTと$_GETを書いて、どちらか入力されているか
チェックして変数に入れる方がいいみたいだな。
0279nobodyさん
2007/10/04(木) 01:27:57ID:???0280nobodyさん
2007/10/04(木) 02:02:54ID:???0281nobodyさん
2007/10/04(木) 02:03:28ID:???URLをそのまま他人に教えたりできるし
POST なら前ページと次ページのみのフォームボタンにする
0282nobody
2007/10/04(木) 02:08:25ID:wWWlpRkK早速質問ですが・・・
http://aki.adam.ne.jp/php/script/thumb.php
のサムネイルモジュールを使っているのですが・・・
thumb.phpで画像へのパスが設定されていませんとなってしまってサムネイル画像が×になってしまいます。
thumb.phpで画像へのパス設定って何行目ぐらいに書いてありますか?
ご回答よろしくおねがいします。
0283nobodyさん
2007/10/04(木) 02:17:48ID:???0284nobody
2007/10/04(木) 02:21:00ID:???0285nobodyさん
2007/10/04(木) 02:23:12ID:???おいおい・・・230行足らずのスクリプトだぞorz
しかもしょっぱなにヒントあるのに。
ソース見たり調べてないだろ
0286nobodyさん
2007/10/04(木) 02:33:58ID:VoLA0M9Q$saza = ("$tekuno" and "$posh");
$saza1 = ("$tekuno" or "$posh");
$saza2 = ("$tekuno" != "$posh");
?>
<html><head>
<?php if ($saza){echo 'ああああ';} ?>
</head>
<body>
<?php if ($saza1){echo 'いいいい';} ?>
<?php if ($saza2){echo 'うううう';} ?>
</body><html>
これを
<saza>ああああ</saza>
<saza1>ああああ</saza>
<saza2>ああああ</saza>
と置き換えて反映させたいのですが
どうすればよいのでしょうか?
置換タグ等で調べましたがわかりませんでした。
深夜ですがよろしくお願いします。
0287286
2007/10/04(木) 02:36:00ID:VoLA0M9Q<saza2>うううう</saza>
すみません間違えていました
0288nobodyさん
2007/10/04(木) 03:28:51ID:???変数名を取得って事だよね? 自分も調べたけど出来なかったような記憶がある。
変数名の取得関数getVarName()があったとして↓みたいになればいいって事でしょ?
$saza = ("$tekuno" and "$posh");
if($saza) {$var = getVarName($saza); echo "<$var>ああああ</$var>";}
# => <saza>ああああ</saza>
可変変数使っても無駄かな?
$sz ="saza";
$saza = ("$tekuno" and "$posh");
$sz1 = "saza1";
$$sz1 = ("$tekuno" or "$posh");
if($$sz) {echo "<$sz>ああああ</$sz>";}
if($$sz1){echo "<$sz1>いいいい</$sz1>";}
0290nobodyさん
2007/10/04(木) 04:14:55ID:???クラス化は一つの解決方法でもあるよね。本来は抽象化が目的だけど。
俺の作ったクラスには各クラスに必ずError()があるし。
逆に↑を非効率的だ!ってイライラする人もいるけど。
(コピペがそんなに面倒かね?)
0291nobodyさん
2007/10/04(木) 04:17:11ID:???つうかPHPって、hoge.php?test=1にpostすると、
$_GETと$_POSTの両方が取得できるよね。
0292265
2007/10/04(木) 04:17:26ID:cABdO5b9> クラス化は一つの解決方法でもあるよね。本来は抽象化が目的だけど。
私の持っているPHPの本にはクラスのクの字も出てこなかったりしますorz・・・
おそらくクラスがPHPに策定される前に出た本を買ってきてしまったかと(´・ω・`)・・・
0293nobodyさん
2007/10/04(木) 04:17:51ID:???仕様変更とか入ったときに恐ろしく面倒。
バグの元にもなる。
0295nobodyさん
2007/10/04(木) 04:24:42ID:???クラスなんてそんなに難しい概念じゃないよ。
まぁ概念を説明してる本を読むと難しそうに(高尚そうに?)書いてあるけど。
使い方は簡単。でも、思想を理解しないと、メリットや使い方を間違えると思うけどね。
>>293
コピペすることを前提に作ってる関数は、抽象化されてるからバグの温床になったことはないなぁ。
0296nobodyさん
2007/10/04(木) 04:28:21ID:???初日に -> ってなんですか?って質問してきた事を思い出した
入門書ってクラスの説明が少なかったり全く無い本が多い気がする
どうして駄目プログラマーを量産するのか
0297nobodyさん
2007/10/04(木) 04:36:25ID:???0298286
2007/10/04(木) 04:48:11ID:VoLA0M9Qcase: $sazaの場合
<saza>〜</saza>で〜を表示すると言う事です。
質問の内容の書込みが全く間違っていました。
すみませんでした。
<html><head>
<saza>ああああ</saza>
</head>
<body>
<saza>ああああ</saza>
</body><html>
ああああを表示。
0299203
2007/10/04(木) 05:10:31ID:???質問したGIFアニメをそのままの状態でトリミングする方法だけど
1.imagickでGIFアニメを読み込み(バージョンはimagick2のRC4)
2.リストの中に画像全てに対してトリミング処理
3.coalesceImagesで画像を結合
4.writeImagesで引数にtrueを指定して書き出し
としてみたら何とかなった。
俺と同じような事で迷っている人ここに来るかもしれないから、一応書き残しておく。
0300nobodyさん
2007/10/04(木) 06:39:53ID:???define ('HUGA','/tmp/huga');
if (($fp = fopen(HOGE, "w")) == FLASE)
exit;
sleep(100);
?>
というスクリプトで
自分としてはfopenの引数が違うので実行できないと思ったのですが、
なぜかエラーが出ないばかりか、
実行までできて、しかもsleepもしてしまいます。
どうしてでしょうか?
■ このスレッドは過去ログ倉庫に格納されています