【PHP】下らねぇ質問はID出して書き込みやがれ 88
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2009/09/16(水) 09:39:37ID:???過去スレ、関連スレ、FAQなどは>>2-10辺り
次スレは>>980が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。
◆前スレ
【PHP】下らねぇ質問はID出して書き込みやがれ 87
http://pc11.2ch.net/test/read.cgi/php/1251447028/
◆質問用テンプレ
【OS名】vine linux
【PHPのバージョン】php5.26
【連携ソフトウェア】mysql
【質問内容】
◆質問する時の注意
・ スレを上げて自分のIDを表示させること。(メール欄に何も記述しない。専ブラのsageチェックを外す)
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に関連リンクの公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
(PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。)
◆質問後の注意
・2回目以降は最初に質問した際のレス番号を入れて、偽者防止に必ずIDを表示させること。
・解決しなくても回答をもらった場合はお礼を言うこと。
(荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)
◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
【その他諸注意】
・SQL・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
0360nobodyさん
2009/09/26(土) 12:55:22ID:???英語が良く分からなければ日本語の解説も書いとくから見とけ
ttp://plaza.rakuten.co.jp/gontata/diary/20090120/
0361nobodyさん
2009/09/26(土) 13:30:38ID:???どうもありがとうございました。
そんな不具合があったんですね。知りませんでした。
手順通りやってみたところ直りました。
深く感謝します!
0362361
2009/09/26(土) 13:32:04ID:Ka/xy5+X助かりました。
0363nobodyさん
2009/09/26(土) 14:31:17ID:kclaUDciperlとmysqlとphpが使えればいいのですが
d:\xamppにインストールした後は何の設定ファイルをいじったらいいのでしょうか?
0364nobodyさん
2009/09/26(土) 14:39:05ID:???あとはインストール用のbatクリックすればいいんじゃね
xamppのHPにインストール方法かいてるんだからそれ嫁
0365nobodyさん
2009/09/26(土) 15:24:23ID:Tg4hzrYm0366nobodyさん
2009/09/26(土) 15:32:53ID:???0367nobodyさん
2009/09/26(土) 15:48:33ID:Tg4hzrYm0368nobodyさん
2009/09/26(土) 15:51:21ID:???書いてることはちゃんとよめ
読むことすらしないやつはやる資格はない
0369nobodyさん
2009/09/26(土) 16:23:26ID:Tg4hzrYm0370nobodyさん
2009/09/26(土) 16:29:53ID:???0371nobodyさん
2009/09/26(土) 16:51:32ID:???http://pc11.2ch.net/test/read.cgi/mysv/1128262593/
0374nobodyさん
2009/09/26(土) 21:56:48ID:???ttp://blogs.yahoo.co.jp/sutarbarjunkie/44164177.html
ttp://ja.wikipedia.org/wiki/%E5%A2%83%E7%95%8C%E6%80%A7%E4%BA%BA%E6%A0%BC%E9%9A%9C%E5%AE%B3>>373
0376nobodyさん
2009/09/26(土) 22:25:02ID:???この場合は違うだろw
トラブルの原因となる可能性があるのであれば
しっかりとレジストリの掃除してからの方がトラブルが出た際に要因から外せる
絶対ならないのであればそれも要因から外せる
アドバイスをするのであればソースの確認なり検証なりして確実な答えが必要だと思うぞ
てっきりのレジストリの件についてソースを出してきたのかと思えば…
件に関係ないページかよ…
0377nobodyさん
2009/09/26(土) 23:00:48ID:???0379nobodyさん
2009/09/26(土) 23:25:24ID:suqPWTbxgetであればlocation(http://example.com/?hoge=piyo)
でいけるようなのですが。
また、http_clientやcurlでも無理なようでした。
perlならできるようなのですが、phpだと無理なのでしょうか?
0380nobodyさん
2009/09/26(土) 23:28:37ID:???ソフトウェアのインストールや設定時のレジストリを完全に綺麗にしてくれるなら
巷にあるレジストリクリーナーの役目は無くなっているんだがなぁ
その部分はどう思う?
MYSQLのインストーラは確実に消してくれているのだろうか?
0382381
2009/09/26(土) 23:47:11ID:???補足。
HTTP_Client::post()の結果を受け取って自サイト内で(本来は外部サイトのコンテンツを)表示するのに問題があるのであれば、
post用のページを一枚はさんで、ユーザーに送信クリックさせる(あるいはjavascriptで自動submit?)のが簡単かな。
ところで、perlでやってる実例なりがあるのであれば、phpで同じことをすれば良いのでは?
0383nobodyさん
2009/09/27(日) 04:05:29ID:wLv38OPrhttp://www.php.net/manual/ja/language.operators.bitwise.php
の「例3 整数値のビットシフト」で
32ビットと64ビットの出力例が紹介されていて
自分のパソコンは64ビットなんですけど
32ビットで出力されているようです:
--- BIT SHIFT RIGHT ON POSITIVE INTEGERS ---
Expression: 2 = 4 >> 1
Decimal:
val=4
res=2
Binary:
val=00000000000000000000000000000100
res=00000000000000000000000000000010
NOTE: copy of sign bit shifted into left side
なぜだか教えてください。
どこかPHPの設定で64ビットに切り替えるところがあるんですか?
0384nobodyさん
2009/09/27(日) 05:30:09ID:wLv38OPr### "form_comparison_operators.html" ###
<form action="comparison_operators03.php" method="post">
名前:<input type="text" name="name" />
<input type="submit" />
</form>
### "comparison_operators03.php" ###
<?php
var_dump($_POST['action']);
// 三項演算子の使用例
$action = (empty($_POST['action'])) ? 'default' : $_POST['action'];
if ('default' == $action)
echo "デフォルト";
else
echo "デフォルトじゃない";
?>
…この出力が
NULL
デフォルト
になってしまいます。
ちゃんと"comparison_operators03.php"が呼ばれているんですから
$_POST['action']は"comparison_operators03.php"になるんじゃないんですか?
なぜ、NULLになってしまうんでしょうか?
0385nobodyさん
2009/09/27(日) 05:37:01ID:???挙動は正しいです
var_dump($_POST['action']); でNULLと出力されていますので$_POST['action']の中身はNULLです
よって(empty($_POST['action'])) はtrueとなり、$actionには'default'が入ります
最後にif ('default' == $action) がtrueとなり'デフォルト'と出力されます
0386nobodyさん
2009/09/27(日) 05:40:42ID:???あれ?意味が違う気がしてきた
<form action="comparison_operators03.php" method="post">
のactionがPOSTされると思い込んでいるようですが、全く意味が違います
また、form_comparison_operators.htmlのフォームからは$_POST['name'](NULL)のみPOSTされます
HTMLの勉強をお勧めします
0387nobodyさん
2009/09/27(日) 05:48:05ID:wLv38OPrありがとうございます。
>$_POST['name'](NULL)のみPOSTされます
では、actionをempty「ではない」ように設定するには
form_comparison_operators.htmlをどう書けばよいのでしょうか?
0388nobodyさん
2009/09/27(日) 05:53:16ID:???0389nobodyさん
2009/09/27(日) 06:04:19ID:wLv38OPrでは、
### "form_comparison_operators.html" ###
<form action="comparison_operators03.php" method="post">
名前:<input type="text" name="name" />
アクション:<input type="text" name="action" />
<input type="submit" />
</form>
…ですか?確かに
string(3) "foo"
デフォルトじゃない
という出力になりましたけど、
http://www.php.net/manual/ja/language.operators.comparison.php
の「例2 デフォルト値を設定する」は本当にそういう意図で書かれてるんですかね?
変数に$nameではなく、$actionを使ってるところがすごく気になるんですけど…。
第三者の意見も聞きたいです。
0390nobodyさん
2009/09/27(日) 06:05:13ID:???0391nobodyさん
2009/09/27(日) 06:06:30ID:???そういう意図じゃないってどういうこと?
どうなるべきだと思ってるの?
0392nobodyさん
2009/09/27(日) 06:19:41ID:wLv38OPr「アクション:<input type="text" name="action" /> 」の行が無くても
$_POST['action']に"comparison_operators03.php"が入って
常に"デフォルトじゃない"と表示されるべきだと思っていました。
まぁ、
<form action="" method="post">
のようにactionが空だったら、
"comparison_operators03.php"すらも呼ばれないわけですから
三項演算子を使う意味がないですね。
結論として、
<form action="comparison_operators03.php" method="post">
のactionと
empty($_POST['action']
のactionは「別物」ということでいいですか?
…でも、actionが使われているのは腑に落ちないですねぇ…無駄にややこしいです…。
0393nobodyさん
2009/09/27(日) 06:22:11ID:???0394nobodyさん
2009/09/27(日) 06:24:05ID:???三項演算子より先にちゃんと基礎を身に付けたほうがいいかと
0395nobodyさん
2009/09/27(日) 06:34:16ID:wLv38OPr…これに同意してくださるなら、HTMLを勉強してあげてもいいですけど
0396nobodyさん
2009/09/27(日) 06:48:37ID:???0397nobodyさん
2009/09/27(日) 07:10:48ID:wLv38OPrnameでもfooでもbarでもunkoでもいいから
本当に「適当な」変数名を付けてくれていれば
こんな大惨事になることもなかったのに
わざわざピンポイントでactionを使うなんて
この例を書いた人の品性を疑いますね
昔から「李下に冠を正さず」「瓜田の靴を納れず」と言うでしょう?
疑わしい行動は慎むべきです
下記の者たちには次回からは気を付けていただきたいですね
著者:
Mehdi Achour
Friedhelm Betz
Antony Dovgal
Nuno Lopes
Hannes Magnusson
Georg Richter
Damien Seguy
Jakub Vrana
0398nobodyさん
2009/09/27(日) 08:16:55ID:???0399nobodyさん
2009/09/27(日) 08:38:48ID:1afp6/JG用途は、特定10サイト程度を定期的に巡回して、新しいリンクが在ればリンク先を保存(2階層まで)する。
と、単純なものなのですが、PHPでの作成は適していますか?
何かアドバイスを頂ければ幸いです。
0400nobodyさん
2009/09/27(日) 08:54:03ID:???HEADでリクエスト送ってレスポンスヘッダのExpiresの値を前回のものと比較して違っていれば新しいリンクを探す
0401nobodyさん
2009/09/27(日) 09:12:57ID:???PHPなら簡単にできる
0402nobodyさん
2009/09/27(日) 10:00:57ID:???PHP本体をコンパイルしたCコンパイラのintの大きさに依存する。
設定ではなく、コンパイルからやり直さないとダメ。
WindowsならPHPのサイトから64bit版を落とせばいけるはず、あるか知らんが。
0403399
2009/09/27(日) 11:44:01ID:1afp6/JG最初は、file_get_contents関数で取得しようと思ってたのですが、
HTTP_Requestの方が細かい設定ができて良いですね。
PHPでのHTTPアクセスを超簡単に行える「PEAR::HTTP_Request」
ttp://phpspot.org/blog/archives/2007/03/phphttppearhttp.html
HTTP_RequestでIf-Modified-Sinceを設定する
ttp://blog.elkc.net/?p=45
ファイルを取得できたので次に、スクレイピング処理?について、
タグの値などを取得するには、TIDY関数やhtmlSQLが便利だと分りました。
で、次の問題が…
前回と今回の変更箇所(更新された部分)は、どのように見つけたらよいのでしょうか?
0404nobodyさん
2009/09/27(日) 12:15:33ID:???0405nobodyさん
2009/09/27(日) 12:38:06ID:???function test($a, $b){
if ($a!==$b) {
$r = "wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww";
}else{
$r = "lol";
}
return $r;
}
$test_hensu = array_map("test", $line[$i], $oldLine[$i]);
print_r($test_hensu);
?>
0406nobodyさん
2009/09/27(日) 12:46:37ID:???そこを考える事を楽しめない奴はプログラマには向いてないな
まあ、コーディングは手段であって必ずしも生業や趣味じゃないからどうでもいい話だが
追跡するのはリンクだけだろ?なら、更新の有無とかチェックしないで、毎回片っ端から全リンクを拾い出せばいい
取得済URLのリストだけ保存しておいて、なかったら新規に追加されたリンクと見なしてデータを取得する
0407406
2009/09/27(日) 12:49:26ID:???個々のファイルが更新されたか否かは、結局ファイルを読みに行かないと分からない
正攻法なら前回クロールで作ったファイルリスト全部に対しIf-Modified-Sinceを送り、更新されていたファイルを取得するのが効率がいい
0408nobodyさん
2009/09/27(日) 14:03:51ID:wLv38OPr初心者からも文句が出ないように書くのも教える側の義務だと思います
今度彼らに会ったらキツく言っておきます
0409nobodyさん
2009/09/27(日) 14:06:19ID:???ここは義務で回答しに来てるわけではなく、あくまでボランティアだ
0410nobodyさん
2009/09/27(日) 14:07:23ID:wLv38OPrあら、コンパイルからですか。
64bit版落とすのも面倒なので今回は諦めておきます。
次回PHPが大きくヴァージョンアップしたら、ついでに64bit版に変えてもいいですね。
ありがとうございました。
0411nobodyさん
2009/09/27(日) 14:20:37ID:???それが面倒なら何ができるんだw
0412チラシの裏
2009/09/27(日) 14:36:50ID:???これCとかJavaにもあったらいいのにな
0413チラシの裏
2009/09/27(日) 15:57:19ID:???残念っ!!!
0415nobodyさん
2009/09/28(月) 00:37:04ID:nPgUeQzt<?php
$aaa = $_GET["bbb"];
print ($aaa);
?>
をindex.phpとしたとき
http://localhost/?bbb=文字列
というURLでアクセスすると
文字列がページに表示されますが
このURLの
bbb=を省いて
http://localhost/?文字列
これで文字列がページに表示するようにしたいのですが
どうすればいいんでしょうか?
よろしくお願いします
0418nobodyさん
2009/09/28(月) 00:54:12ID:???とやって、PATH_INFOで受け取る手もある。拡張子隠蔽はMultiViewとかmod_rewrite
0419nobodyさん
2009/09/28(月) 00:58:51ID:nPgUeQzt迅速なレスありがとうございます
超絶初心者なのでわからない単語などありますが
そこらへんはググって試行錯誤やってみます
ありがとうございました
0420nobodyさん
2009/09/28(月) 02:52:20ID:gXHj/gRY0422nobodyさん
2009/09/28(月) 06:11:36ID:xItyGbMUの「例3 IteratorAggregateを実装するオブジェクトの反復処理」ですが:
<?php
class MyCollection implements IteratorAggregate
{
private $items = array();
private $count = 0;
// Required definition of interface IteratorAggregate
public function getIterator() {
return new MyIterator($this->items);
}
public function add($value) {
$this->items[$this->count++] = $value;
}
}
$coll = new MyCollection();
$coll->add('value 1');
$coll->add('value 2');
$coll->add('value 3');
foreach ($coll as $key => $val) {
echo "key/value: [$key -> $val]\n\n";
}
?>
…を実行するとHTTP 500 Internal Server Errorが出ます。
最後のforeachをコメントアウトしてやるとエラーは出なくなりますが、真っ白で何も表示されません。
どこを直せばよいか教えてください。
0424nobodyさん
2009/09/28(月) 06:59:12ID:xItyGbMUありがとうございます。
残念ながら、{ }を付けてもやっぱりHTTP 500 Internal Server Errorが出ます。
何か他に思い当たるところはないですか?
0425422
2009/09/28(月) 07:16:07ID:xItyGbMU// echo "key/value: [{$key} -> {$val}]\n\n";
と、その行だけコメントアウトしてもHTTP 500 Internal Server Errorが出ます。
php.netによると、正しい出力は
rewinding
current: value 1
valid: 1
current: value 1
key: 0
key/value: [0 -> value 1]
next: value 2
current: value 2
valid: 1
current: value 2
key: 1
key/value: [1 -> value 2]
next: value 3
current: value 3
valid: 1
current: value 3
key: 2
key/value: [2 -> value 3]
next:
current:
valid:
…となるそうです。
何かのヒントになりますか?
0426nobodyさん
2009/09/28(月) 08:11:32ID:???もちろんMyIteratorクラスは、そのページのサンプル通りのものを
><?php
>class MyCollection implements IteratorAggregate
この二行の間に書いているか、またはincludeしてるんだよね?
それと、エラーログ見てみようよ。
0427422
2009/09/28(月) 08:13:11ID:xItyGbMUclass MyCollection implements IteratorAggregate
{
private $items = array();
private $count = 0;
public function getIterator() {
return new MyIterator($this->items);
}
public function add($value) {
$this->items[$this->count++] = $value;
print_r($this->items); // 追加した行; 配列の内容を表示するため
}
}
$coll = new MyCollection();
$coll->add('value 1');
$coll->add('value 2');
$coll->add('value 3');
//foreach ($coll as $key => $val) {
//echo "key/value: [{$key} -> {$val}]\n\n";
//}
?>
一行追加してみました。その結果、
Array ( [0] => value 1 [1] => value 2 [2] => value 3 )
…と、配列に正しくkeyとvalが入っているのが分かります。
後は問題は「なぜforeach文が正しく動かないか」です。
自分が出来るのはここまでです。どなたかお力を貸してください。
0428422
2009/09/28(月) 08:18:10ID:xItyGbMUありがとうございます。
>もちろんMyIteratorクラスは、そのページのサンプル通りのものを
>
>><?php
>>class MyCollection implements IteratorAggregate
>
>この二行の間に書いているか、またはincludeしてるんだよね?
いえ、MyIteratorクラスは>>422に書いた通りで、何もincludeしていません。
「何」を「どのように」includeすればいいんですか?
それと、エラーログはどうやって見るのですか?
0429nobodyさん
2009/09/28(月) 10:00:32ID:A4zPaHMymysql_eofは廃止になったとことですけど
mysql_errorやmysqlerrnoでどうやって終端チェックできるんでしょうか?
if(mysql_errno($db)!=0){echo "End of Record";}
とか
if(mysql_errno($db)){echo "End of Record";}
やってるんだけど0が帰ってきて、終端とそうでない場合に違いがでないんだけど...
0430nobodyさん
2009/09/28(月) 10:14:57ID:???エラーログの出し方を知らずにコーディングとか、服を着ないで原宿に買い物に行くようなもの。
error_reportingとdisplay_errorでぐぐれ、もしくはマニュアル検索れ。
0431nobodyさん
2009/09/28(月) 11:51:50ID:/RfVJ8GXスレッドが作られる数だけ
タスクマネージャのプロセスがたくさん表示されるってことでしょうか?
0432422
2009/09/28(月) 13:50:33ID:xItyGbMUerror_reportingは知ってたんですけど、
display_errorsがOffになってて表示されなかったようです
(どっかの例でdisplay_errorsをOffにしたんですよ、確か、ちきしょー)。
それでエラーメッセージ読んでたら速攻で解決しました。
ありがとうございました!
0434422
2009/09/28(月) 14:13:46ID:???いやいや、マジでそうですって。
display_errorsはデフォルトではOnですし、それ以外考えられないですよ。
右も左も分からん人間にdisplay_errorsをOffにさせるなんて
オレオレ詐欺に次ぐ悪質な手口じゃないですか。
で、実際にどこで変えたのか検索しようとしたら
Windows Vistaの糞野郎が「拡張子が".php"のファイルの内容は検索できない」とか言いやがりますし、
世の中絶対におかしいですよ。
ちょっとこれから服を着ないで原宿に買い物に行ってみます。
0435nobodyさん
2009/09/28(月) 14:36:59ID:???0437nobodyさん
2009/09/28(月) 16:06:56ID:+8HTDnRb例外処理を書きたいのですが
try{
例外が起こりそうな処理
}catch(Exception $e){
例外時の処理
}
これでよろしいでしょうか?
なにか足りないものがあればお願いします
0438nobodyさん
2009/09/28(月) 16:09:50ID:???お前俺の友達に似てるな。
ネットに書いてあることをそのままコピペでやって
うまくいかなかったらそいつのせいだと?
馬鹿にするのも大概にしろよ。
0439nobodyさん
2009/09/28(月) 16:21:51ID:???それでいいよ
ただJavaのようにエラー全てを例外で処理するような言語ではないので
PHPで例外処理使う場合はPDOなんかの勝手にthrowしてくる最近のクラスだけでいいんじゃない?
PHPは後つけのオブジェクト指向なので昔からあるような関数はエラー出て止まるだけだから
そういうものに対しても例外処理をしたいとなると自分でthrowしないといけない
0440nobodyさん
2009/09/28(月) 16:32:03ID:+8HTDnRb予測不能な物は自分でthrowしなくていいんですね
ありがとうございます
0441nobodyさん
2009/09/28(月) 17:09:14ID:???サーバー側でHTMLをjqueryで整形できるよ。
http://code.google.com/p/phpquery/
$doc = phpQuery::newDocumentHTML("http://www.yahoo.co.jp/");
$html = $doc['div'] -> html();
サーバーサイド側でこんな簡単にHTMLが抜け出せる。
正規表現も使わないで済む。jqueryライクな書き方でOK
0442nobodyさん
2009/09/28(月) 19:09:33ID:???マルチ死ね
0443nobodyさん
2009/09/28(月) 20:41:17ID:???PHPなんだからサーバ側処理なのは当たり前だろ
ただのjQueryライクにかけるようにしたクラスライブラリだろ
PHP知らないJS使いが使う分にはいいがこのスレでは不要
0444nobodyさん
2009/09/28(月) 21:08:56ID:???これができるって事?
0445nobodyさん
2009/09/28(月) 22:16:10ID:???0446nobodyさん
2009/09/28(月) 23:54:07ID:???0447nobodyさん
2009/09/29(火) 05:28:20ID:???タスクマネージャにスレッドまでは表示しないだろ。
0448nobodyさん
2009/09/29(火) 09:48:41ID:ZXmjIu3r・ある瞬間をあらわす「時刻」
・時刻と時刻の間を表す「時間」
・時間の量
の三種類の別種のオブジェクトがありうると思いますが
それらを提供しているライブラリがあれば教えてください
0449nobodyさん
2009/09/29(火) 09:51:04ID:???1
time(); or microtime();
2
意味がわからない
3
意味がわからない
具体的に書いていただかないと回答もつきませんよ
0450nobodyさん
2009/09/29(火) 10:55:40ID:???disk_total_spaceで取得すると、-844980224の様にマイナスになってしまいます。
正しく取得するにはどうしたらいいですか?
0451nobodyさん
2009/09/29(火) 10:56:45ID:???0452nobodyさん
2009/09/29(火) 11:00:21ID:rvLghs2tdisk_total_spaceで取得すると、-844980224の様にマイナスになってしまいます。
正しく取得するにはどうしたらいいですか?
追記:マイナスは消えたのですが、実際のサイズとは違う値が返ってきました。
0453nobodyさん
2009/09/29(火) 11:02:02ID:???0456nobodyさん
2009/09/29(火) 11:18:30ID:???挙動は同じ
マルチスレッドを想定しているかそうでないかの違い
>>448
>・ある瞬間をあらわす「時刻」
http://www.php.net/manual/ja/class.datetime.php
>・時刻と時刻の間を表す「時間」
http://www.php.net/manual/ja/class.dateinterval.php
>・時間の量
上の二つの表現だけでは表わせられないもの?
0457nobodyさん
2009/09/29(火) 12:00:55ID:CnNpVgYIお前ってほんと冷たいよな。
0458nobodyさん
2009/09/29(火) 13:52:05ID:???duコマンドでとったほうがいいんじゃない?
自分も昔PHPの関数でどうにかとろうとしてうまくいかなかったから
duコマンドで取得することにしたよ
Windowsの場合でも似たようなものがぐぐればVectorで配布されてるので
それ通してやればいいんでないかな
0459nobodyさん
2009/09/29(火) 13:54:45ID:lVskSDkS他の言語もやってたから、なんかメインルーチン書くと落ち着くし。
<?php $var=main(); ?>
<html><body>
<?php echo $var; ?>
</body></html>
<?php function main(){return $var;} ?>
■ このスレッドは過去ログ倉庫に格納されています