トップページ⇒php
1001コメント342KB

【PHP】下らねぇ質問はID出して書き込みやがれ 88

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2009/09/16(水) 09:39:37ID:???
質問者はまず>>1を良く読むこと(必須!)
過去スレ、関連スレ、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等)・フレームワークは各該当スレへ
0348nobodyさん2009/09/25(金) 01:57:43ID:nHivhU16
間違えました、テーブル名のところはクォーテーションでくくらないと
だめみたいでした。
SHOW TABLE STATUS LIKE 'table_name';
0349nobodyさん2009/09/25(金) 14:37:38ID:Z7rJvuWo
<?php
require_once('Cache/Lite.php');
$params=array(
'cacheDir'=>'c:/tmp/',
'lifeTime'=>600);
$cache=new Cache_Lite($params);
$cid='query'.$_GET['category']; //この部分の'query'の意味が分かりません
if($data=$cache->get($cid)){
print($data);
} else {
$data='クエリ情報"category"の値:'.$_GET['category'].'('.date('G:i:s').')';
$cache->save($data,$cid);
print($data);
}
?>
失礼しますが質問させて下さい
上記のPEAR::Cache_Liteコードの、コメントを書いた部分の文字列'query'の意味が分かりません
実行しても別に画面上に出てくるわけでもないですし、何故この文字列を書き加えなければいけないのかが分かりません
何かキャッシュ実行時にqueryという文字がないとキャッシュと認識しないとかいう理由とかあって書き加えているのでしょうか?
0350nobodyさん2009/09/25(金) 14:47:49ID:???
>>349
よくわかんないけどプリフィックスじゃないの
0351nobodyさん2009/09/25(金) 14:57:03ID:???
>>349
キャッシュデータにつける名前みたいなもん。
だから、違うデータをキャッシュしたければそこは違う文字列にしないといけない。その後につけたしてる$_GET['category']も、名前の一部。
0352nobodyさん2009/09/25(金) 14:58:09ID:???
【その他諸注意】
・SQL・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ

って書いてるのに
PEARスレあるだろ超過疎ってるけど
もうPEARなんて使うのやめなさいよ
0353nobodyさん2009/09/25(金) 19:41:22ID:jTI+YC2w
セーフモードがかかっているレンタルサーバで、
mkdirやtouchでディレクトリおよびファイルを作成したいのですが、
作成する箇所の親ディレクトリのパーミッションが777でないと作成できません。
作成するときに親ディレクトリを一時的にchmodで777への変更を試みましたが、
chmod関数の仕様上不可能でした。
アップロード時のディレクトリのパーミッションがデフォルトで755です。
このパーミッションをアップロード時に777に変更すれば可能ですが、
変更せずに(755のままで)ファイルやさらにディレクトリをつくり出す方法はありませんか?
あるいは上述した通り自分がやった方法ではできませんでしたが、
一時的に777にして作成後755に戻す方法でもよいです。
どなたか分かる方よろしくお願いします。
0354nobodyさん2009/09/26(土) 11:20:01ID:???
PHPでメールを送りたいのですが、自分でSMTPサーバを立てていないので検索したところ
yahooで無料でやっているとか
そこで以下のようにphp.iniを書き換えてapache再起動したのですが、
Warning: mail() [function.mail]: Failed to connect to mailserver at "smtp.mail.yahoo.co.jp" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set()

と怒られ、メール送信ができませんでした。

根本的に勘違いしているのでしょうか?
よろしくお願いします

[mail function]
; For Win32 only.
SMTP = smtp.mail.yahoo.co.jp
smtp_port = 25

; For Win32 only.
sendmail_from = [email protected] (xxxxxは自分のもっているyahooアドレス)
03553542009/09/26(土) 11:52:48ID:???
yahooだと複雑そうなので、簡易的なradishというもの自分のPC内で立ち上げて使ってみます
0356nobodyさん2009/09/26(土) 11:53:34ID:???
windowsか
smtpならxmail使っとけ
0357nobodyさん2009/09/26(土) 12:04:29ID:Ka/xy5+X
PHPとMYSQLが正常に接続できなくて困っています、宜しくお願いします。

【環境】
MySQL5.1.38
WindowsXP SP3
Apache2.2.13
PHP5.2.11
phpMyAdmin3.2.2

【エラー内容】
phpMyAdminに、以下のようなメッセージが表示されます。
「お使いの PHP MySQL ライブラリのバージョン 5.0.51a が MySQL サーバのバージョン 5.1.39 と異なります。これは予期しない不具合を起こす可能性があります。」

【詳細】
以前、MySQL5.0を使っていたため、それが残っていると思われるため、
以下の手順を試みましたが、エラーが直りませんでした。

1. C:\Program Files\MySQL\MySQL Server 5.1\bin\libmySQL.dllをC:\WINDOWS以下にコピーしてApacheを起動。
2. Apacheは起動するものの、PHPからDBに接続しようとするWindowsの予期せぬエラーで接続ができない。
3. Apacheのエラーログや、MySQLのエラーログにも、この件についてログが吐かれていない。
4. {phpのインストールパス}\libmysql.dllをC:\WINDOWS以下にコピーしてApacheを起動すると、正常にDBにも接続できます。

【そのほか】
libmysql.dllが、MySQLの5.1系に対応できていないためだと思われますが、
肝心のlibmysql.dllはどこから入手できるのでしょうか?

また、MySQL5.1についてきたlibmySQL.dllのファイル名[libmySQL]のSQLが大文字であることも気になります。
0358nobodyさん2009/09/26(土) 12:06:19ID:???
>>357
まず、MySQLとPHPをアンインスコして、フォルダも消す。

できればその対象のファイルがレジストリに残ってないか調べておく。

その上で、PHPとMySQLをインスコする。
0359nobodyさん2009/09/26(土) 12:53:58ID:???
>>357
PHP5.2系に含まれるphp_mysql.dllとMysql5.1は相性が悪いので動作しない
以下のサイトで修正済みphp_mysql.dllと入れ替えればおk


ttp://friendsofed.infopop.net/4/OpenTopic?a=tpc&s=989094322&f=2963027307&m=3641072581
0360nobodyさん2009/09/26(土) 12:55:22ID:???
>>357
英語が良く分からなければ日本語の解説も書いとくから見とけ
ttp://plaza.rakuten.co.jp/gontata/diary/20090120/
0361nobodyさん2009/09/26(土) 13:30:38ID:???
>>359
どうもありがとうございました。
そんな不具合があったんですね。知りませんでした。

手順通りやってみたところ直りました。
深く感謝します!
0362361 2009/09/26(土) 13:32:04ID:Ka/xy5+X
すみません。ID出し忘れていました。
助かりました。
0363nobodyさん2009/09/26(土) 14:31:17ID:kclaUDci
xamppliteポータブル版のインストール方法がわかりません
perlとmysqlとphpが使えればいいのですが
d:\xamppにインストールした後は何の設定ファイルをいじったらいいのでしょうか?
0364nobodyさん2009/09/26(土) 14:39:05ID:???
なんもいじらなくてもそのまま使えるでしょ
あとはインストール用のbatクリックすればいいんじゃね
xamppのHPにインストール方法かいてるんだからそれ嫁
0365nobodyさん2009/09/26(土) 15:24:23ID:Tg4hzrYm
ちなみにどのフォルダがドキュメントルートでしょうか?
0366nobodyさん2009/09/26(土) 15:32:53ID:???
初心者はxampp使うなや
0367nobodyさん2009/09/26(土) 15:48:33ID:Tg4hzrYm
教えてくださいお願いします
0368nobodyさん2009/09/26(土) 15:51:21ID:???
教えてくださいじゃないだろ・・・
書いてることはちゃんとよめ
読むことすらしないやつはやる資格はない
0369nobodyさん2009/09/26(土) 16:23:26ID:Tg4hzrYm
そういわれましてもわからなくて・・・
0370nobodyさん2009/09/26(土) 16:29:53ID:???
これはひどい
0371nobodyさん2009/09/26(土) 16:51:32ID:???
スレを発見しました
http://pc11.2ch.net/test/read.cgi/mysv/1128262593/
0372nobodyさん2009/09/26(土) 17:59:43ID:???
>>358
再インストール時にレジストリなんて上書きされるんだからあんまし意味ないと思いますよ
0373nobodyさん2009/09/26(土) 20:23:14ID:???
>>372
まったく問題無いのか問題が出る可能性があるのかどっちなんだ?
0374nobodyさん2009/09/26(土) 21:56:48ID:???
>>373
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
0375nobodyさん2009/09/26(土) 22:18:12ID:???
>>374
話の対象はコンピュータとそのソフトなんだわ。
対象の性質を鑑みることが出来ない?
0376nobodyさん2009/09/26(土) 22:25:02ID:???
>>374
この場合は違うだろw
トラブルの原因となる可能性があるのであれば
しっかりとレジストリの掃除してからの方がトラブルが出た際に要因から外せる
絶対ならないのであればそれも要因から外せる

アドバイスをするのであればソースの確認なり検証なりして確実な答えが必要だと思うぞ

てっきりのレジストリの件についてソースを出してきたのかと思えば…
件に関係ないページかよ…
0377nobodyさん2009/09/26(土) 23:00:48ID:???
アンインストールすりゃレジストリからデータ消えるのに・・・
0378nobodyさん2009/09/26(土) 23:07:40ID:???
質問の解決に繋がらなかった>>358が煽られて荒らしてるんだろ
質問は解決してるんだらかまわりはスルーしてやれ
0379nobodyさん2009/09/26(土) 23:25:24ID:suqPWTbx
外部サイトにpostでデータ送信&リダイレクトさせる方法がわかりません教えてほしいです。
getであればlocation(http://example.com/?hoge=piyo)
でいけるようなのですが。
また、http_clientやcurlでも無理なようでした。
perlならできるようなのですが、phpだと無理なのでしょうか?
0380nobodyさん2009/09/26(土) 23:28:37ID:???
>>377
ソフトウェアのインストールや設定時のレジストリを完全に綺麗にしてくれるなら
巷にあるレジストリクリーナーの役目は無くなっているんだがなぁ
その部分はどう思う?
MYSQLのインストーラは確実に消してくれているのだろうか?
0381nobodyさん2009/09/26(土) 23:30:03ID:???
>>379
HTTP_Client::post()で良いんじゃないの
03823812009/09/26(土) 23:47:11ID:???
>>379
補足。
HTTP_Client::post()の結果を受け取って自サイト内で(本来は外部サイトのコンテンツを)表示するのに問題があるのであれば、
post用のページを一枚はさんで、ユーザーに送信クリックさせる(あるいはjavascriptで自動submit?)のが簡単かな。

ところで、perlでやってる実例なりがあるのであれば、phpで同じことをすれば良いのでは?
0383nobodyさん2009/09/27(日) 04:05:29ID:wLv38OPr
質問です。

http://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:???
>>384
挙動は正しいです

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:???
>>384
あれ?意味が違う気がしてきた
<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
>>385-386
ありがとうございます。

>$_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
>>388
では、

### "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
>>391
「アクション:<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:???
おまえはHTMLを勉強した方が良い
0394nobodyさん2009/09/27(日) 06:24:05ID:???
うむ
三項演算子より先にちゃんと基礎を身に付けたほうがいいかと
0395nobodyさん2009/09/27(日) 06:34:16ID:wLv38OPr
この例の変数としてactionが使われているのは無駄にややこしい

…これに同意してくださるなら、HTMLを勉強してあげてもいいですけど
0396nobodyさん2009/09/27(日) 06:48:37ID:???
HTMLのaction属性とPHPの中で適当に付けてる変数名がややこしい?
0397nobodyさん2009/09/27(日) 07:10:48ID:wLv38OPr
超ウルトラややこCでしょう

nameでも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:???
>>399
HEADでリクエスト送ってレスポンスヘッダのExpiresの値を前回のものと比較して違っていれば新しいリンクを探す
0401nobodyさん2009/09/27(日) 09:12:57ID:???
リクエストヘッダにIf-Modified-Since付けて304が返ってくるかの方が良いね
PHPなら簡単にできる
0402nobodyさん2009/09/27(日) 10:00:57ID:???
>383
PHP本体をコンパイルしたCコンパイラのintの大きさに依存する。
設定ではなく、コンパイルからやり直さないとダメ。
WindowsならPHPのサイトから64bit版を落とせばいけるはず、あるか知らんが。
04033992009/09/27(日) 11:44:01ID:1afp6/JG
>>400-401 ありがとうございます。参考になりました。
最初は、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:???
if ($line[$i] !== $oldLine[$i])
0405nobodyさん2009/09/27(日) 12:38:06ID:???
<?php
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:???
>403
そこを考える事を楽しめない奴はプログラマには向いてないな
まあ、コーディングは手段であって必ずしも生業や趣味じゃないからどうでもいい話だが

追跡するのはリンクだけだろ?なら、更新の有無とかチェックしないで、毎回片っ端から全リンクを拾い出せばいい
取得済URLのリストだけ保存しておいて、なかったら新規に追加されたリンクと見なしてデータを取得する
04074062009/09/27(日) 12:49:26ID:???
あー、それだと片手落ちか
個々のファイルが更新されたか否かは、結局ファイルを読みに行かないと分からない
正攻法なら前回クロールで作ったファイルリスト全部に対しIf-Modified-Sinceを送り、更新されていたファイルを取得するのが効率がいい
0408nobodyさん2009/09/27(日) 14:03:51ID:wLv38OPr
>>398
初心者からも文句が出ないように書くのも教える側の義務だと思います
今度彼らに会ったらキツく言っておきます
0409nobodyさん2009/09/27(日) 14:06:19ID:???
義務を求めるのなら有料でPHP教えてくれる先生に聞けばいいよ
ここは義務で回答しに来てるわけではなく、あくまでボランティアだ
0410nobodyさん2009/09/27(日) 14:07:23ID:wLv38OPr
>>402
あら、コンパイルからですか。
64bit版落とすのも面倒なので今回は諦めておきます。
次回PHPが大きくヴァージョンアップしたら、ついでに64bit版に変えてもいいですね。
ありがとうございました。
0411nobodyさん2009/09/27(日) 14:20:37ID:???
落とすのが一番楽だろw
それが面倒なら何ができるんだw
0412チラシの裏2009/09/27(日) 14:36:50ID:???
ticks、すげぇー!超便利!
これCとかJavaにもあったらいいのにな
0413チラシの裏2009/09/27(日) 15:57:19ID:???
でも、関数のオーバーロードはサポートされてない
残念っ!!!
0414nobodyさん2009/09/27(日) 21:14:19ID:???
>>408
あはは、あまりにあれ過ぎて君が頓珍漢な勘違いしたままなのだが誰も教えてくれないんだよ。
0415nobodyさん2009/09/28(月) 00:37:04ID:nPgUeQzt
超絶初心者の糞下らねえ質問なんですが
<?php

$aaa = $_GET["bbb"];

print ($aaa);

?>
をindex.phpとしたとき
http://localhost/?bbb=文字列
というURLでアクセスすると
文字列がページに表示されますが

このURLの
bbb=を省いて
http://localhost/?文字列
これで文字列がページに表示するようにしたいのですが
どうすればいいんでしょうか?
よろしくお願いします
0416nobodyさん2009/09/28(月) 00:39:39ID:???
>>415
$_SERVER['QUERY_STRING']
0417nobodyさん2009/09/28(月) 00:41:15ID:???
>>415
apache使ってるなら、mod_rewriteで置き換えるしか無いんじゃない?
0418nobodyさん2009/09/28(月) 00:54:12ID:???
localhost/index.php/文字列
とやって、PATH_INFOで受け取る手もある。拡張子隠蔽はMultiViewとかmod_rewrite
0419nobodyさん2009/09/28(月) 00:58:51ID:nPgUeQzt
>>416-418
迅速なレスありがとうございます
超絶初心者なのでわからない単語などありますが
そこらへんはググって試行錯誤やってみます

ありがとうございました
0420nobodyさん2009/09/28(月) 02:52:20ID:gXHj/gRY
0421nobodyさん2009/09/28(月) 03:11:14ID:???
>>420
�_
0422nobodyさん2009/09/28(月) 06:11:36ID:xItyGbMU
http://www.php.net/manual/ja/language.oop5.iterations.php
の「例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をコメントアウトしてやるとエラーは出なくなりますが、真っ白で何も表示されません。
どこを直せばよいか教えてください。
0423nobodyさん2009/09/28(月) 06:53:36ID:???
>>422
echo "key/value: [{$key} -> {$val}]\n\n";
0424nobodyさん2009/09/28(月) 06:59:12ID:xItyGbMU
>>423
ありがとうございます。
残念ながら、{ }を付けてもやっぱりHTTP 500 Internal Server Errorが出ます。
何か他に思い当たるところはないですか?
04254222009/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してるんだよね?

それと、エラーログ見てみようよ。
04274222009/09/28(月) 08:13:11ID:xItyGbMU
<?php
class 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文が正しく動かないか」です。
自分が出来るのはここまでです。どなたかお力を貸してください。
04284222009/09/28(月) 08:18:10ID:xItyGbMU
>>426
ありがとうございます。

>もちろんMyIteratorクラスは、そのページのサンプル通りのものを
>
>><?php
>>class MyCollection implements IteratorAggregate
>
>この二行の間に書いているか、またはincludeしてるんだよね?

いえ、MyIteratorクラスは>>422に書いた通りで、何もincludeしていません。
「何」を「どのように」includeすればいいんですか?
それと、エラーログはどうやって見るのですか?
0429nobodyさん2009/09/28(月) 10:00:32ID:A4zPaHMy
どっちかっていうとMysqlのことなんですが
mysql_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:???
>428
エラーログの出し方を知らずにコーディングとか、服を着ないで原宿に買い物に行くようなもの。

error_reportingとdisplay_errorでぐぐれ、もしくはマニュアル検索れ。
0431nobodyさん2009/09/28(月) 11:51:50ID:/RfVJ8GX
windowsでphp5.3のスレッドセーフ版を使う場合、
スレッドが作られる数だけ
タスクマネージャのプロセスがたくさん表示されるってことでしょうか?
04324222009/09/28(月) 13:50:33ID:xItyGbMU
>>430
error_reportingは知ってたんですけど、
display_errorsがOffになってて表示されなかったようです
(どっかの例でdisplay_errorsをOffにしたんですよ、確か、ちきしょー)。
それでエラーメッセージ読んでたら速攻で解決しました。
ありがとうございました!
0433nobodyさん2009/09/28(月) 13:54:09ID:???
>>432
お前みたいな責任転嫁野郎は社会のゴミ屑だな
04344222009/09/28(月) 14:13:46ID:???
>>433
いやいや、マジでそうですって。
display_errorsはデフォルトではOnですし、それ以外考えられないですよ。
右も左も分からん人間にdisplay_errorsをOffにさせるなんて
オレオレ詐欺に次ぐ悪質な手口じゃないですか。

で、実際にどこで変えたのか検索しようとしたら
Windows Vistaの糞野郎が「拡張子が".php"のファイルの内容は検索できない」とか言いやがりますし、
世の中絶対におかしいですよ。
ちょっとこれから服を着ないで原宿に買い物に行ってみます。
0435nobodyさん2009/09/28(月) 14:36:59ID:???
どこが悪くて、どう解決したのか書かない奴ばっかりだな。
0436nobodyさん2009/09/28(月) 14:50:46ID:???
>>434
公開する段階ではdisplay_errorsはOffにすべき
おまえがちゃんと読まずに設定書き換えただけ
0437nobodyさん2009/09/28(月) 16:06:56ID:+8HTDnRb
まったく予測もできなく原因もわからないエラーが起こるので
例外処理を書きたいのですが

try{

例外が起こりそうな処理

}catch(Exception $e){

例外時の処理

}

これでよろしいでしょうか?
なにか足りないものがあればお願いします
0438nobodyさん2009/09/28(月) 16:09:50ID:???
>>434
お前俺の友達に似てるな。

ネットに書いてあることをそのままコピペでやって
うまくいかなかったらそいつのせいだと?

馬鹿にするのも大概にしろよ。
0439nobodyさん2009/09/28(月) 16:21:51ID:???
>>437
それでいいよ
ただJavaのようにエラー全てを例外で処理するような言語ではないので
PHPで例外処理使う場合はPDOなんかの勝手にthrowしてくる最近のクラスだけでいいんじゃない?
PHPは後つけのオブジェクト指向なので昔からあるような関数はエラー出て止まるだけだから
そういうものに対しても例外処理をしたいとなると自分でthrowしないといけない
0440nobodyさん2009/09/28(月) 16:32:03ID:+8HTDnRb
>>439
予測不能な物は自分でthrowしなくていいんですね
ありがとうございます
0441nobodyさん2009/09/28(月) 17:09:14ID:???
サーバーサイドで実行できるjqueryのオープンソース phpquery

サーバー側で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:???
http://pc11.2ch.net/test/read.cgi/hp/1252401448/627
マルチ死ね
0443nobodyさん2009/09/28(月) 20:41:17ID:???
サーバサイドで実行できるってのがうさんくさい紹介だな
PHPなんだからサーバ側処理なのは当たり前だろ
ただのjQueryライクにかけるようにしたクラスライブラリだろ
PHP知らないJS使いが使う分にはいいがこのスレでは不要
0444nobodyさん2009/09/28(月) 21:08:56ID:???
echo@file_get_contents('http://www.yahoo.co.jp/');
これができるって事?
0445nobodyさん2009/09/28(月) 22:16:10ID:???
そんなの既存の関数2つ使うだけで出来るだろ・・

0446nobodyさん2009/09/28(月) 23:54:07ID:???
どなたか431おねがいします
0447nobodyさん2009/09/29(火) 05:28:20ID:???
プロセスとスレッドは異なるもの。
タスクマネージャにスレッドまでは表示しないだろ。
0448nobodyさん2009/09/29(火) 09:48:41ID:ZXmjIu3r
時間に関するスクリプトを組む際、
・ある瞬間をあらわす「時刻」
・時刻と時刻の間を表す「時間」
・時間の量
の三種類の別種のオブジェクトがありうると思いますが
それらを提供しているライブラリがあれば教えてください
■ このスレッドは過去ログ倉庫に格納されています