【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カテゴリ)の各スレで
0412nobodyさん
2008/01/31(木) 03:38:32ID:???セキュリティが向上するとも思えんが
0413399
2008/01/31(木) 03:52:32ID:4JBYr2L1解除してみてテストしてもらいます。
>>411
XSS対策です。詳しくは【PHP サイバーテロの技法 防御と攻撃の実戦】という本に書いてあります。
この本もここの人に推奨されたので勉強のために買いました。
0414nobodyさん
2008/01/31(木) 03:55:42ID:???0415nobodyさん
2008/01/31(木) 07:30:54ID:???もしくは、1つの項目をログファイルに追記で書き込むだけの簡潔なプログラムを
書いてみるとか。
0416nobodyさん
2008/01/31(木) 09:55:14ID:no07dFZMconnect()とpconnect()の違いはなんでしょう?
p-が継続的だとはマニュアルに書いてあるんですが、これはclose()しないと
サーバに付加がかかり続けるということでしょうか?
closeしないで次のページに移動してまたpconnectしたらまた付加がかかって、
それもcloseしないで次のぺーじでpconnectしたらまた… みたいになるのですか?
どうもよくわかりません
そうならないとしても、「継続的」であることでの具体的なメリットって
どんな場合ですか?
0417nobodyさん
2008/01/31(木) 09:56:56ID:???イメージが逆だな。
0418nobodyさん
2008/01/31(木) 10:14:03ID:no07dFZMイメージが逆ってのは、再利用するから接続しなおす負荷(?)がかからないって
ことですね? じゃ、いいことみたいですね
あと、続けて質問ですみませんが、マニュアルを読んでるとclose()してるサンプルって
見たことありません。しなくていいものなんですか?
ブラウザを閉じたら勝手にクローズ。だけど、ページ移動なら接続は
キープされるってことでしょうか?(pconnectの場合)
同一ページで何度も同じ接続処理を書くことってあまりないと思うので、
ページ遷移で持ち越せる位の機能じゃないとpconnectって意味薄そうな気がするのですが…
0419nobodyさん
2008/01/31(木) 10:34:31ID:???ttp://www.php.net/manual/ja/features.persistent-connections.php
0420nobodyさん
2008/01/31(木) 11:00:34ID:???最終的には特定のxmlやらiteratorから別のxmlを作るのが目的。
modelの作成にSimpleXMLElementが使えないかなーと。
生成元からxpathで抽出して生成ノードがコンテナなら抽出元のノードの生成ノードの下にぶら下げる。
次に先程生成したノードをxpathで抽出してぶら下がったノードに相対パスを突っ込んでさらにノード作成、みたいな。
ちとややこしいけど・・・
0421nobodyさん
2008/01/31(木) 11:04:56ID:???pconnect()の対になるclose()は意味が無い。
connect()の対になるclose()はスクリプトの終了の際に
自動的に行われるので大抵の場合はしなくても構わない。
HTTPリクエストで実行されるスクリプトの場合、
接続時間が短く、リソースを掴んだままでも影響が少ないからね。
因みにリソースにはそこでSELECT等して取得したデータも含まれる。
(MySQLの場合)
あとpconnect()によるリソースの再利用だけど
接続文字列が同じだから必ずしも再利用されるとは限らない。
再利用のためのプールが1つではなく、プロセスで1つで
プロセス間でそれを共有しないため。
だから接続をタイムアウトまで最悪上限まで保持してしまう
pconnect()はかえって効率が悪くなる(不具合)場合もあるよ。
httpdの設定とか絡んで要調整。
0422nobodyさん
2008/01/31(木) 11:17:14ID:???SimpleXMLObjectのプロパティ≠子要素だから上のコードには無理がある
addNode()とか定義して自分でXMLオブジェクトを展開して追加するしかないと思うが
SimpleXMLを投げ捨てる、という手も
0423nobodyさん
2008/01/31(木) 11:24:17ID:???0424nobodyさん
2008/01/31(木) 12:00:56ID:???__set使ってればオーバーライドすれば誤魔化せるかなーとか思ったけど見てのとおりの惨敗。
投げ捨てるか、xpathを取得して保管するか、xpathをキーにしてarrayでも作るか、どうするか思考中。
>>723
なんと。情報ありがとうございます。
調べてみて試してみます。
0425nobodyさん
2008/01/31(木) 12:06:11ID:VNDK0Dvo最新バージョンの0.72を使っています
phpはバージョン5系です。
$date = date("Y/n/j G:i", $item['date_timestamp']);
このようにしてRSSの時間を取得するようにしてるのですが、
echo "<li>$date<a href=\"$url\">$title</a> ($p_title)</li>\n";
このように書いて実行してるのですが、なぜか時間表示が全部1970/1/1 9:00になってしまいます。
アドバイスお願いします。
公式サイトではdate_timestampで取得することを進めているのですがどうもうまくできません。
0426nobodyさん
2008/01/31(木) 12:11:55ID:???1970/1/1てことは$item['date_timestamp']が空だね
変数をダンプしてデバグしましょう
0429nobodyさん
2008/01/31(木) 12:36:27ID:???$c1 =100;
}
xxx();
素朴な疑問なんだけどPHP5では
上の例のように参照渡しでかつその変数を省略できるけど
その省略した変数に関数内で値を変更しても大丈夫なのだろうか?
今はパラメータ数を判定して
省略されてない場合にだけ値を変更してるんだけど
そんなの必要ないのかな?
いろいろ探したけど確証が得られなくて・・・
0431416
2008/01/31(木) 13:12:48ID:???詳しい説明ありがとうございます
かなり深いですね、、適当やってると痛い目見そうだし
もっと参考書でこういうの説明して欲しいんですが、してないですよねー
プロセスとかの基本用語から理解なきゃダメですね ありがとう
0433nobodyさん
2008/01/31(木) 14:06:44ID:???> PHP使ってるヤツらって
> htmlspecialchars($_GET['text']);
> こんなコード書いてる!
> m9(^Д^)プギャー
とありますが、上のコードの何が問題なんでしょうか?
教えて下さい。
0435nobodyさん
2008/01/31(木) 14:48:21ID:???・test1.php
・test2.php
・entry.php
http://test.com/test1.php?a=1
このtest1.phpの中に以下のimgタグを
埋め込んでtest2.phpを呼び出しているとします。
<img src='http://test.com/test2.php?a=<?php echo $a; ?>' width='0' height='0'>
で、このtest2.phpの中にさらに
下記のようなimgタグを埋め込んでいるのですが、
<img src='http://test.com/entry.php?a=<?php echo $a; ?>' width='0' height='0'>
当然動作しません。
このtest2.phpの中でなんらかの方法でentry.phpを
呼び出して、aの値を登録したいのですが
どのようにすればよいのでしょうか・・・
そのやり方を教えて欲しいです。
よろしくお願いいたします。
0437nobodyさん
2008/01/31(木) 14:53:10ID:89mDm5mU失礼しました。
で、質問させてください。
・test1.php
・test2.php
・entry.php
http://test.com/test1.php?a=1
このtest1.phpの中に以下のimgタグを
埋め込んでtest2.phpを呼び出しているとします。
<img src='http://test.com/test2.php?a=<?php echo $a; ?>' width='0' height='0'>
で、このtest2.phpの中にさらに
下記のようなimgタグを埋め込んでいるのですが、
<img src='http://test.com/entry.php?a=<?php echo $a; ?>' width='0' height='0'>
当然動作しません。
このtest2.phpの中でなんらかの方法でentry.phpを
呼び出して、aの値を登録したいのですが
どのようにすればよいのでしょうか・・・
そのやり方を教えて欲しいです。
よろしくお願いいたします。
0438nobodyさん
2008/01/31(木) 15:08:35ID:???何がしたいのかわからん
entryにtest2の画像のimgタグ、test2にtest1の画像のimgタグを入れてるってこと?
0440429
2008/01/31(木) 15:22:24ID:qO0TdOQJfunction xxx(&$c1=null) {
$c1 =100;
}
xxx();
素朴な疑問なんだけどPHP5では
上の例のように参照渡しでかつその変数を省略できるけど
その省略した変数に関数内で値を変更しても大丈夫なのだろうか?
今はパラメータ数を判定して
省略されてない場合にだけ値を変更してるんだけど
そんなの必要ないのかな?
いろいろ探したけど確証が得られなくて・・・
0442nobodyさん
2008/01/31(木) 15:30:35ID:xq4Ruxkp1:$_SESSION変数で、それぞれのデータを全て持ち回す方法
(例)
$_SESSION['name'] = 'name';
$_SESSION['email'] = '[email protected]';
2:セッションキーを生成して、$_SESSION['session_key']にキーのみ持ち回して
データはオブジェクトをシリアル化して、キーをファイル名とする一時ファイルに保存する方法
(例)
$_SESSION['session_key'] = '4hak2ajh8adjkeubz'; //実際はユーザごとにユニークな値を生成
$file = file("/tmp/" . $_SESSION['session_key']);
$data = unserialize(base64_decode($file['0']));
3:$_SESSION['data']にオブジェクトをシリアル化して、1つの$_SESSION変数だけ持ち回す方法
(例)
$_SESSION['data'] = base64_encode(serialize($data));
$data = unserialize(base64_decode($_SESSION['data']));
どれが一般的なのでしょうか?
0445nobodyさん
2008/01/31(木) 16:28:44ID:???変数の不変性から言って多いに問題があるのだけど、
そんなの関係ねーと小島よしおを信仰しているなら、
それも一興といわざるを得ない。
0446nobodyさん
2008/01/31(木) 16:43:09ID:???0447nobodyさん
2008/01/31(木) 16:49:35ID:???0448nobodyさん
2008/01/31(木) 17:20:24ID:Zzvt9fFUtestesc の $char に\に続く一文字だけ該当するように想定していますが
何故か \"のときだけ " ではなく \" 2文字が引数に渡されてしまいます。
これはどこに問題があるのか教えてください。
<?php
$in = '\\\\abc\tdef\\"';
$out = preg_replace('/\\\\(.)/e', "testesc('$1')", $in);
echo 'input [' . $in ."]\n";
echo 'output [' . $out ."]\n";
function testesc($char){
if($char=='"'){
return '"';
}elseif($char=='\\"'){
return '?';
}elseif($char=='\\'){
return '\\';
}elseif($char=='t'){
return "\t";
}else{
return '';
}
}
?>
実行結果
input [\\abc\tdef\"]
output [\abc def?]
0449445
2008/01/31(木) 17:22:23ID:???私が言いたいのは、返すことが予定されている変数を呼び先で勝手に変えてはいけないという意味で不変性と言っている。
OOP志向から自明の理であるが、使用貸借契約と消費貸借契約における客体を想像すれば分かりやすい。
0450nobodyさん
2008/01/31(木) 17:25:32ID:???0451nobodyさん
2008/01/31(木) 17:31:15ID:B+pFj7HJプログラム練習として自分なりのクローラーを作ろうとしています
現在はネットワークを縦横無尽に走るものではなく、
自分で用意した一つのサイトのトップページを指定し、
そこから同サイト内の全ページをDBに登録するプログラムを作っています
流れ的にはこうです
1. file ()でトップページを取得
2. 1.で取得したページからurlを抽出しリスト化
3. 2.で取得したurlからリンク先のページ内容を取得
4. DB(MySQL)にurlと対応するページ内容を追加、または更新
(レコードが追加か更新かは、DBにそのurlがあるかないかで判断する)
5. 3と4をループ
ここまではうまくいっていますが、質問があります
もしurlから取得したページがたまたま503だった場合、追加も更新も行わないようにしたいのです
その場合、分岐させていけばいいのだと思い、下のようなものを考えました
if(ページ内容が空じゃない){
ページ内容をデータベースに登録する
}
しかし、自分のページが503になったことがないので試せないのです
これで合っているのでしょうか?
0452445
2008/01/31(木) 17:33:33ID:???OOPは、現実の世界で考えれば分かりやすい。それが本質だし。
居酒屋で下駄箱の鍵を店員に預かってもらったら、
店員に勝手に開けられて「靴を磨いておきました」って言われたら、
それが正常な行為であっても、予想に反した動作だと思うだろ。
要はそういうこと。
0453429
2008/01/31(木) 17:48:14ID:???なんか勘違いしてるみたいだけど
値を渡したつもりなのに参照渡しなってしまうという
PHP5の仕様のことを問題にしてるのではなく、
参照渡しである変数を呼び元が省略した場合に
関数内ではその変数の参照先はどこになるんだろうということです。
ローカル変数になるならいいのだけど
どこかにそのへんの詳しい情報がないだろうか。
0455nobodyさん
2008/01/31(木) 17:56:07ID:???を参考にテストしてみたんですが、再現出来ません。
php4です。
このサイトに書いてある、この正規表現では二行目は無視するっていうのは本当なのでしょうか?
/*----------------------------------
<?php
$_GET['id'] = "6666". PHP_EOL . "aaa";
var_dump($_GET['id']);
if (preg_match('/^[0-9]+$/', $_GET['id'])) {
var_dump($_GET['id']);
}
?>
----------------------------------*/
0456nobodyさん
2008/01/31(木) 18:01:43ID:???0457nobodyさん
2008/01/31(木) 18:03:54ID:B+pFj7HJすると404とかも判断できるということですね!
レスポンスヘッダとかわからないので調べてきます
ありがとうございました
0458455
2008/01/31(木) 18:04:48ID:5Z05+qC0>>456
だとすると>>455のコードでは再現出来ていないという事でしょうか・・。
このコードでTRUEが得られるつもりで書いたのですが、駄目なようです。
0460nobodyさん
2008/01/31(木) 18:17:40ID:5Z05+qC0smartyも興味あるのですが。
何故再現できないか知りたいんです・・。
0461nobodyさん
2008/01/31(木) 18:20:59ID:???参照で渡してるんだろ?
お前の好きな現実の世界に例えると
クリーニング屋にシャツ出したのに
汚れが落ちてるとブツブツ言ってるようなもの。
0462nobodyさん
2008/01/31(木) 18:34:36ID:???PCRE_DOLLAR_ENDONLYがどーとか書いてあったからその辺かもね
0463nobodyさん
2008/01/31(木) 18:37:12ID:5Z05+qC0なるほど、昔の仕様ということですね。
ありがとうございます。
こういう細かい仕様変更はちょっと怖いですね・・。
0464nobodyさん
2008/01/31(木) 19:13:51ID:???0465448
2008/01/31(木) 19:51:16ID:Zzvt9fFUに変えたり、関数名を全てシングルクオートの 'testesc(\'$1\')' 囲んだりもしましたが
やはり文字の \" が分割されず $1 に \" が2文字渡されてしまいます。
\ に続くASCIIコードの半角記号も一通り試してみましたが \" のときだけ2文字になります。
原因どなたか分かる方おられないでしょうか。
0466nobodyさん
2008/01/31(木) 20:50:27ID:VNDK0Dvophp4で動作するスクリプトをphp5でも動かせるようにソースを書き換えてくれるソフトなどないでしょうか?
ソースが長いので書き換えるのが。
0467nobodyさん
2008/01/31(木) 20:54:16ID:???ブラウザをリロードさせる関数ってありますか?
よろしくです。
0471nobodyさん
2008/01/31(木) 21:06:27ID:VNDK0Dvoレスありがとうございます。
関数の問題で動いてないみたいです。
$rssurl = array() ;
$rssurl[] = "○○";
$rssurl[] = "○○";
arrayと[]はphp5では読みこまないと記事にありました。
この関数をどのように変えてあげればいいのでしょうか?
○○はrssのURLになります。
0472nobodyさん
2008/01/31(木) 21:07:48ID:???0474nobodyさん
2008/01/31(木) 21:21:29ID:???0475nobodyさん
2008/01/31(木) 21:23:39ID:VNDK0Dvoここですよ 記事は
0477nobodyさん
2008/01/31(木) 21:42:44ID:???0478nobodyさん
2008/01/31(木) 21:50:45ID:???+ 人 人 人 +
(__) (__) (__)
+ (__) (__) (__) +
. + ( __ ) ( __ ) ( __ ) +
( ´∀`∩ (´∀`∩) ( ´∀`)
+ (( (つ ノ (つ 丿 (つ つ )) +
ヽ ( ノ ( ヽノ ) ) )
(_)し' し(_) (_)_)
0479nobodyさん
2008/01/31(木) 21:52:14ID:MssSyn6Ahttp://○○○○○.jp/php?a=1&b=2
とあったとしてお気に入りからアクセスするのとhtmlページからアクセスするので
サーベーへの負荷が変わったりするんですか?
前に「負荷がかかるから直でくるな」みたいなことを書いてあるのを見たのですが。
0480nobodyさん
2008/01/31(木) 21:56:55ID:???0481nobodyさん
2008/01/31(木) 22:04:18ID:???0482nobodyさん
2008/01/31(木) 22:08:12ID:???一般論としては、直でアクセスしても、htmlからアクセスしても同じ。
だけど、そのプログラム自体がリファラの取得をし、何らかの処理を
している場合は、負荷は違うだろう。
0483479
2008/01/31(木) 22:15:38ID:MssSyn6A>>482
うちに置いてあるものでは
a=1ならコンテンツのXXでb=2ならページの2を読む(XXの2ページ目を表示)
のようにしています。
0484nobodyさん
2008/01/31(木) 22:20:01ID:???0485nobodyさん
2008/01/31(木) 22:31:57ID:???いっているやつがバカ。
2ちゃんねるでもhttpをttpとか書くやつがいるが、
あれもばか。
2ちゃんねるブラウザ使うと直リンクになっている。
0486nobodyさん
2008/01/31(木) 22:37:37ID:???0487nobodyさん
2008/01/31(木) 22:38:06ID:???> PHP使ってるヤツらって
> htmlspecialchars($_GET['text']);
> こんなコード書いてる!
> m9(^Д^)プギャー
とありますが、上のコードの何が問題なんでしょうか?
教えて下さい。
0489nobodyさん
2008/01/31(木) 22:42:19ID:???0491nobodyさん
2008/01/31(木) 22:49:30ID:???0492nobodyさん
2008/01/31(木) 22:51:06ID:???0493nobodyさん
2008/01/31(木) 22:52:19ID:???0494nobodyさん
2008/01/31(木) 22:53:36ID:VNDK0Dvoなんでだろう
真白だよ;;
arrayがおかしいと思ったんだけど、arrayで外部記事をひっぱってきてるだけなので;;
0495nobodyさん
2008/01/31(木) 22:55:57ID:???0499nobodyさん
2008/01/31(木) 22:58:51ID:???CakePHPで
htmlspecialchars($_GET['text']);
って書いたけど脆弱性ありまくりでした
0502498
2008/01/31(木) 23:02:52ID:???あいつは何もわからずに適当に言っているだけです。
0503nobodyさん
2008/01/31(木) 23:07:17ID:???やっとENT_QUOTESが出た。
けど、文字コードの問題とか、
そもそも$_GET['text']にhtmlspecialcharsって
違和感を感じないのか?
0505nobodyさん
2008/01/31(木) 23:10:15ID:???0507nobodyさん
2008/01/31(木) 23:11:31ID:???0508nobodyさん
2008/01/31(木) 23:12:39ID:VNDK0Dvoどなたかphp5の環境で私のソースが動くかチェックしてもらえる方いないでしょうか?
YAHOOニュースのRSSをMagpieRSSを使って取得しているだけです。
どうかお願いします。
0510nobodyさん
2008/01/31(木) 23:20:42ID:VNDK0Dvoサーバーが原因だったようです。
なんだよcore鯖
■ このスレッドは過去ログ倉庫に格納されています