【PHP】下らねぇ質問はここに書き込みやがれ 61
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2008/01/27(日) 18:17:59ID:jK32tI//PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。
過去スレ、関連スレ、FAQなどは>>2-10辺り
◆前スレ
【PHP】下らねぇ質問はここに書き込みやがれ 62
http://pc11.2ch.net/test/read.cgi/php/1199956159/
◆質問する時の注意
・ サーバーのOS(Linux、Windows他)、WebサーバーとPHPの種類やバージョン等を明記すること。
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
◆質問後の注意
・偽者防止に必ずIDを表示させること。(メール欄に何も記述しない)
・2回目以降は最初に質問した際のレス番号を名前欄に入れること。
・解決しなくても回答をもらった場合はお礼を言うこと。
(荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)
◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
【その他諸注意】
・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
・SQLについての質問はデータベース板(PCカテゴリ)の各スレで
0067nobodyさん
2008/01/28(月) 09:56:26ID:???なんでコンストラクタ使わないんだよ・・・。
function name($mono, $price)
{
$this->setMono($mono);
$this->setPrice($price);
}
って入れるだろ。
0068nobodyさん
2008/01/28(月) 09:56:34ID:bzu6tb73私の文を訂正して頂きましてありがとうございました。
$value については、構文上正しくない書き方であることが分かりましたし
皆々様よりご丁寧な説明文とともに、納得のいく説明を頂きましたお陰で、正しく理解できたと思います。
$value2 についてなのですが、どうしてもこの変数(メンバ変数?)を使いたい場合は
66様の構文で言うところのどこに$value2を使ってあげるとよろしいのでしょうか?
重ね重ね至らぬ質問をいたしまして恐縮です。
0069nobodyさん
2008/01/28(月) 10:03:03ID:bzu6tb73お礼が遅れまして申し訳ありません。
ありがとうございました。
そのような構文の書き方ならば、functionの横に(引数)という形で書き入れても良いのですね。
参考になりました。
コンストラクタというのは、PHP5できちんと実装されたものだとマニュアルか何かで拝読いたしました。
私が使っている環境は、インターネット上のサーバに合わせている事もありPHP4.4.4をインストールしております。
そのような書き方でも大丈夫なのでしょうかと質問したいところなのですが
これは、自身で調べることにいたします。お手数かけまして恐縮いたします。
0070nobodyさん
2008/01/28(月) 10:04:57ID:???>function calc($tax) {
> return $this->price * $tax + $this->price;
> }
で$value2の代わりに$taxつかってるだろ。
ちゃんと嫁。
$taxを$value2って名前にしても同じ。
#因みにcalcって変数名はどうかと思う。
0072nobodyさん
2008/01/28(月) 10:16:51ID:???このあたりに書いているのを自分なりにアレンジしようとしたのか?
0073nobodyさん
2008/01/28(月) 10:57:17ID:bzu6tb73ご指摘ありがとうございます。
お陰様で不明点がひとつ解決いたしました。
72様
実はそうなのです。
「コンピュータ」の部分や、「価格」の部分を変数から受け取る形を作りたくて
試行錯誤しておりました。
66様のように書いておけば、66様の下4行という形で「ペン」「100」「0.05」の値を
変数で渡すようにすることで実現可能なのだということがわかりました。
皆々様、ありがとうございました。
0075nobodyさん
2008/01/28(月) 12:22:18ID:bzu6tb73励ましのお言葉ありがとうございます。
よろしければ、例題としてよい事例が挙げられているお勧めのサイトなど
ご存知でしたら、ご教授願えませんでしょうか?
質問にご回答頂いた上に厚かましい次第ですが、お聞き入れくだされば幸いです。
0078nobodyさん
2008/01/28(月) 12:41:20ID:???0079nobodyさん
2008/01/28(月) 12:49:30ID:???0080nobodyさん
2008/01/28(月) 13:01:19ID:???URL出すと宣伝乙といわれるから、自分にあったのを探せとしかいえないね。
Javaのほうが説明上手いとこが多い。PHPと構文はほぼ一緒なので理解できるはず。
0081nobodyさん
2008/01/28(月) 13:02:52ID:???は???
0082nobodyさん
2008/01/28(月) 13:18:47ID:???ソースを読むという方法もある。それ以外には自分なりに課題を決めて
やってみるのも手だな。
(例)認証をしてメインメニューに入るまでの過程のプログラムで、
認証をするオブジェクトと、メインメニューのオブジェクトを作り、
コーディングしなさい。IDとパスワードの確認は別ファイルにある
リストと一致するかを確認するものとする。
0083nobodyさん
2008/01/28(月) 13:21:20ID:wIYhLBDUif ($var == 1) {
} else if ($var == 2) {
}
とするべきか、
if ($var == 1) {
} else if ($var == 2) {
} else {
// ここにエラー処理
}
とするべきかよく分かりません。
全てに後者の方法でやるとコードが冗長になるし、
「// ここにエラー処理」に何を書くべきかよく分かりません。
ご教授よろしくお願いします。
0084nobodyさん
2008/01/28(月) 13:23:25ID:???0086nobodyさん
2008/01/28(月) 13:27:12ID:???上のほうで十分。あと、phpの場合は「elseif」と書く。
場合によっては下のほうも書くが、君がそれを何処で知ったのか。
その理由は何であるのか。を理解していないのであれば、
書くだけ無駄。
0088nobodyさん
2008/01/28(月) 13:34:10ID:???0089nobodyさん
2008/01/28(月) 13:35:14ID:???0092nobodyさん
2008/01/28(月) 13:39:12ID:???ここのような初心者向けスレで聞くと、その答えは前者になる。が、普通は後者。
動けばいい、安全性より速さ、落ちたらその時に考えればいいというなら、前者の方がベスト。
0093nobodyさん
2008/01/28(月) 13:39:35ID:???1と2しか値が入っていないこないと想定されるときに1と2以外が入ってきた場合の処理は例外処理だろ。
try〜catchだけじゃ無いぞ。
0094nobodyさん
2008/01/28(月) 13:42:46ID:???0095nobodyさん
2008/01/28(月) 13:43:40ID:???$text = '0x41';
echo preg_replace( '/0x[0-9a-f]{2}/ie', 'chr($0)', $text);
のようなことは ereg_replace ではできないと考えてよいのでしょうか?
0096nobodyさん
2008/01/28(月) 13:45:29ID:???中からのものならelse{echo '$varがおかしいぞー';print_r($var);}
とかデバッグ用にやってる 本番には消す 俺たいていプリントデバッグだし
0097nobodyさん
2008/01/28(月) 13:50:04ID:???0098nobodyさん
2008/01/28(月) 13:50:24ID:???http://jp.php.net/manual/ja/reference.pcre.pattern.modifiers.php
> e (PREG_REPLACE_EVAL)
> この修飾子を設定すると、preg_replace() は、(略)…
> この修飾子を使用するのは、preg_replace()のみです。 他の PCRE 関数では無視されます。
0099nobodyさん
2008/01/28(月) 13:53:49ID:???0100nobodyさん
2008/01/28(月) 14:00:11ID:???と表示されるでしょ?それは、この場合のelseになった場合だよ。
>>90
それは知らなかった。でも、公式マニュアルはスペース無しだw
0101nobodyさん
2008/01/28(月) 14:12:20ID:???オプションのeそのものが使えないのはわかるのですが
i の代わりになる regi のような文もあるかと思ったんですがなさそうですね。
0102nobodyさん
2008/01/28(月) 14:41:06ID:???ケース無視ってことなら
http://jp.php.net/manual/ja/function.eregi-replace.php
とかあるけども。
0103nobodyさん
2008/01/28(月) 14:45:36ID:???できないならできないで納得したので問題ないです。
0104nobodyさん
2008/01/28(月) 14:47:10ID:???自由度が高いし高速らしいのでやっぱりpreg使ったほうがよさそうですね。
0105nobodyさん
2008/01/28(月) 15:09:28ID:???0106nobodyさん
2008/01/28(月) 15:10:10ID:jMMNIxRZ<Response>
<Args>
〜中略〜
</header:Header>
<Body>
<itemSearch:ItemSearch xmlns:itemSearch="〜">
<count>151517</count>
<page>3</page>
<first>11</first>
<last>15</last>
<hits>5</hits>
<carrier>0</carrier>
<pageCount>100</pageCount>
<Items>
<Item>
〜以下略〜
このXMLにある <count>から<pageCount>までの値を取得する方法を教えてください。
PHP5対応です。商品情報は取得出来たのですがここが出来ません。
ご指導お願いします。
0107nobodyさん
2008/01/28(月) 15:10:35ID:21Z67c9t<A href="a/031.php?test=1">hoge</A>
<A href="http://yahoo.co.jp">ヤフー</A>
こういうソースがあったとして、
これを、URLとテキストそれぞれを配列で取得するにはどうやったらいいのでしょうか
$url[0] = "005.htm";
$url[1] = "a/031.php?test=1";
$title[0] = "テスト";
$title[1] = "hoge";
上記のように取り出したいです
0108nobodyさん
2008/01/28(月) 15:13:59ID:???0109nobodyさん
2008/01/28(月) 15:18:46ID:???0111nobodyさん
2008/01/28(月) 15:41:06ID:???simplexml+xpathで抜き出すのがよろしかろう
>>107
preg_matchで抜き出すのがよろしかろう
0114107
2008/01/28(月) 15:44:26ID:21Z67c9tありがとうございます
調べてみます
0115106
2008/01/28(月) 15:47:44ID:???$pageCount = $xml->Body->ItemSearch->pageCount;
echo $pageCount
上記のようにやってみましたがページが表示されません。
何か抜けているのでしょうか?
ちなみに商品データの方は
foreach($xml->Body->ItemSearch->Items->Item as $item){
中略
}
このような形で取得が出来ました。
0116nobodyさん
2008/01/28(月) 15:49:23ID:???preg_match_allだったわ
マッチ結果をforeachでぐるぐるすればOk
>>113
現実のサイトのhtml/xhtmlはxmlパーザで処理できないことはままある
0117nobodyさん
2008/01/28(月) 15:53:12ID:???<html><body>
<?php
$str = '<A href="005.html" target="top">テスト</A>
<A href="a/031.php?test=1">hoge</A>
<A href="http://yahoo.co.jp">ヤフー</A>';
$a = split("\n", $str);
$a0 = split('"', $a[0]);
$url[0] = $a0[1];
$a1 = split('"', $a[1]);
$url[1] = $a1[1];
$a2 = split('"', $a[2]);
$url[2] = $a2[1];
$b0 = ereg_replace(">", "", $a0[4]);
$b0 = ereg_replace("</A", "", $b0);
$title[0] = $b0;
$b1 = ereg_replace(">", "", $a1[2]);
$b1 = ereg_replace("</A", "", $b1);
$title[1] = $b1;
$b2 = ereg_replace(">", "", $a2[2]);
$b2 = ereg_replace("</A", "", $b2);
$title[2] = $b2;
echo "$url[0] : $title[0]<br>";
echo "$url[1] : $title[1]<br>";
echo "$url[2] : $title[2]<br>";
?>
</body></html>
0118nobodyさん
2008/01/28(月) 15:59:24ID:???0119nobodyさん
2008/01/28(月) 16:02:20ID:???0120nobodyさん
2008/01/28(月) 16:04:36ID:???> $pageCount = $xml->Body->ItemSearch->pageCount;
×ItemSearch
○itemSearch
視力検査的な回答で悪いけど
0121nobodyさん
2008/01/28(月) 16:08:59ID:???ページが表示されないとは?
echoに ; が無いようだけど
$pageCountに希望のデータが入ってないということなら
var_dump($xml->Body)するなどして変数の中身をチェック
基本は大事だよ〜
0122106
2008/01/28(月) 16:10:50ID:???レスありがとうございます。
ご指摘いただいた所は承知しています。
小文字にしても表示出来ません。
ちなみに商品データのところも ItemSearch と大文字にしてありますが
これを itemSearch と小文字にするとエラーがでてしまうようです。
0123nobodyさん
2008/01/28(月) 16:16:45ID:???そういえばsimplexmlはchildren()で名前空間の子要素を引っ張り出してから
処理しないと駄目だったかもw
まあぐぐって自己解決して
0124nobodyさん
2008/01/28(月) 16:30:27ID:???$pageCount = $is->children("")->pageCount;
めんどくさいな
list($pageCount) = $xml->xpath("//pageCount");
のほうが読みやすいと思う
0126106
2008/01/28(月) 16:48:49ID:???どの方法を試してみてもやはり駄目のようです。
もう少し調べて頑張ってみます。
0128nobodyさん
2008/01/28(月) 16:52:00ID:z4N7eEQgHtml("テスト");
function Html($test){
print <<< DOC
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html401/loose.dtd">
<html lang="ja">
<head>
<title>$test</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<p>テスト</p>
</body>
</html>
DOC;
}
?>
このようなスクリプトがあるとして、ブラウザで見るとshift_jisと解釈されてしまいます。
metaとtitle要素の位置を入れ替えるとUTF-8で解釈されるようになるのですが
別のスクリプトではmeta、title要素の並びがこのままでもUTF-8と解釈されているものがあります。
スクリプトファイル自体は両方ともUTF-8で書いてありますしソースにも差異が見られないと思うのですが
(別のスクリプトからコピペしてきたものなので)
何か心当たりのある方はご教示頂けるとありがたいです。
phpのバージョンは5.2.5、ブラウザはIE系、サーバはhttpdを使ったlocalhostです。
0129質問
2008/01/28(月) 16:56:05ID:CLWaFVuiphpでIMAPをやろうとしています。今
$arybox = imap_listmailbox($stream, $server, "*");
for ($i = 0; $i < count($arybox); $i++) {
list(,$name) = explode("}", imap_utf7_decode($arybox[$i]));
$line = explode(".", $name);
print ($line[count($line)-1]); ←この辺適当ですがw
}
のような感じでメールボックスの名前を表示させようとしています。
英語は問題ないのですが日本語のボックス名では文字化けと言うか
きちんと表示されません。
どのようにエンコードしても上手くいきません。
日本語できちんと表示させるにはどうしたらいいのでしょうか?
最終的にはUTF8で表示させたいのですが
よろしくおながいします。
0130nobodyさん
2008/01/28(月) 16:57:21ID:???ファイルはUFT形式で保存してる?
ソースでUTF-8を指定してもShiftJIS形式で保存していたら意味ないし。
と言うか実際にそう言うミスをしているヤツが会社にいたから。
0132nobodyさん
2008/01/28(月) 18:00:11ID:???http://www.asahi-net.or.jp/~SD5A-UCD/rec-html401j/charset.html#h-5.2.2
> META宣言は、少なくともそのMETA要素がパースされるまでの間はASCIIの範囲内のバイト値が
> ASCIIと同じ文字を表すような文字符号化方法が使われている場合にのみ用いることができる。
> META宣言は、 HEAD要素の、可能な限り先頭の方に現れねばならない。
というかheader()でcontent-type吐いてやるのがベストだと思うけど
0133nobodyさん
2008/01/28(月) 18:01:44ID:z2UAw/twソースもUTF-8で保存しています。
>>131
あら、ちゃんと解釈されましたかorz
こちらはIE系だとダメでしたがFxだとUTF-8で解釈されていました。
もうちょっと調べてみます。
0134nobodyさん
2008/01/28(月) 18:02:58ID:z2UAw/twheader()を使うのがベストなのはわかるのですが
同じように書いたのに挙動が2通りあるのが釈然としないのです。
0135nobodyさん
2008/01/28(月) 18:04:41ID:z2UAw/tw0136nobodyさん
2008/01/28(月) 18:07:39ID:???html的には
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
のメタタグに関してはtitleより先にもってこないといけない
あとapacheとかphp側で吐いてるheaderによって文字コードが設定されてしまう事が多々ある
なので明示的にmb_http_outputで出力文字コードを設定してやれば
文字化けを起こすことはかなり低くなると思うけど
0138nobodyさん
2008/01/28(月) 18:38:13ID:z2UAw/twサーバ側とかphp側の設定にもよるかもしれないですね・・・
>>137
meta要素が解析されるまで同じASCIIコードの文字コードが使われている時に
meta宣言ができるという解釈でいいですか?
この場合いきなりhtmlソースになったから文字コードの解析がおかしくなった、ということでしょうか。
0139nobodyさん
2008/01/28(月) 19:14:11ID:???これで出来た。
mb_convert_encoding($val, "utf8", "utf7-imap")
imap_utf7_decodeは一体何のために・・・
0140nobodyさん
2008/01/28(月) 19:18:01ID:???0141nobodyさん
2008/01/28(月) 19:18:56ID:???0143nobodyさん
2008/01/28(月) 19:26:54ID:???前スレでも同様の質問があったな
788 nobodyさん [sage] Date:2008/01/24(木) 18:15:08 ID:??? Be:
>>783
http://phpspot.org/blog/archives/2005/12/pop_before_smtp.html
これ読んでpopbeforsmtpで送れば?
0144nobodyさん
2008/01/28(月) 19:33:43ID:???http://mizushima.ne.jp/MailStructure/MailStructure.php
0145nobodyさん
2008/01/28(月) 22:11:24ID:hM6vuV4g$array1 = array('男','女','その他');
$array2 = array($array1,$array1,$array1);
print_r ($array2);
if(in_array('男',$array2))
{
echo "あり";
}
else
{
echo "なし";
}
として検索すると「なし」が出ます。
実行結果
Array ( [0] => Array ( [0] => 男 [1] => 女 [2] => その他 ) [1] => Array ( [0] => 男 [1] => 女 [2] => その他 ) [2] => Array ( [0] => 男 [1] => 女 [2] => その他 ) ) なし
どうすればいいでしょうか。
0146nobodyさん
2008/01/28(月) 22:20:24ID:???if(in_array('男',$array1))
{
echo "あり";
}
else
{
echo "なし";
}
0147nobodyさん
2008/01/28(月) 22:23:15ID:???どういうことか、分かるよね。
0148nobodyさん
2008/01/28(月) 22:26:18ID:???$array2を1度分解して1次元の配列にすれば解決。
0149nobodyさん
2008/01/28(月) 22:27:49ID:???$array1 = array('男','女','その他');
$array2 = array($array1,$array1,$array1);
print_r ($array2);
foreach ($array2 as $key => $ary1) {
if(in_array('男',$ary1))
{
echo "あり index=>".$key."\n";
}
else
{
echo "なし";
}
}
0150nobodyさん
2008/01/28(月) 22:33:39ID:hM6vuV4g0151nobodyさん
2008/01/28(月) 22:36:43ID:E8VxvVW/そのURLにGETメソッドの形でパラメータつけていって、遷移先のページで
その情報をキーにしてページを生成させる場合があると思います。
そういう場合、移動先のページでユーザがブラウザのURL欄を編集して
こちらの想定外のページを表示させることがあると思うんですが、
こういう対処どうしたらいいんですか?
そんなバカなことする奴は無視?
それしきの細工で致命的な想定外動作を生むようなプログラム書くやつがアホ?
結構悩んでしまいます GETメソッドまったく使わないわけにいかないし
0152nobodyさん
2008/01/28(月) 22:39:26ID:???ユーザは何するか分ったもんじゃないってことを前提にやっていかないとダメでふ。
要するに対策しないとダメってことでふ。
0154nobodyさん
2008/01/28(月) 22:42:21ID:???なんでも、ユーザーのせいにするのは頭が悪い設計者の考え。
設計者は、あらゆるケースを想定して対策を講じなければいけないし、
そのようにしないと、一定のセキュリティーは保てない。
0155nobodyさん
2008/01/28(月) 22:46:46ID:???致命的想定外を起こさないために当然チェックはしてるんでしょ?
必要な変数が渡されてるか、渡された変数が正しいものかとか。
おかしかったらページを生成せずに警告かえしとけばいいわけで。
0157nobodyさん
2008/01/28(月) 22:56:40ID:hM6vuV4gphpからコマンド叩いて「rootユーザとしてログイン」して作業を行いたいんですが、
そもそもphpからrootユーザでのログインはできるんでしょうか。
0158nobodyさん
2008/01/28(月) 22:58:22ID:???それしきの細工で致命的な想定外動作を生むようなプログラム書くやつがアホ? →アホ
お前の書いてるとおりだよ 両方
0159nobodyさん
2008/01/28(月) 22:58:50ID:???それをphpからっていうと、ソケットで送信することになりますが、可能です。
0160152
2008/01/28(月) 23:02:52ID:???叩いてる奴同一人物だろ?頭悪いな。
0162nobodyさん
2008/01/28(月) 23:06:15ID:hM6vuV4g<?php
$output = `ls -al`;
echo "<pre>$output</pre>";
?>
0163nobodyさん
2008/01/28(月) 23:06:43ID:eFFy9q14現在ウインドウズサーバに、VNCをインストールしてリモート操作しているが、やはり、これで接続して操作しようとすると、スクロール動作など反応が遅くやりづらいので、tera termなどの通信ソフトを使ってサーバをリモート操作しようと思います。
しかしこのソフトって本来リナックスサーバ用のソフトですよね。
私のように、ウインドウズをサーバにして使っているような環境でも動作するものなのかな?
0165nobodyさん
2008/01/28(月) 23:11:51ID:???普通の人はWindowsXPあたりで開発もするし、デバッグもApacheを入れて同じPC上で行う。
0166nobodyさん
2008/01/28(月) 23:12:07ID:hM6vuV4g■ このスレッドは過去ログ倉庫に格納されています