【PHP】下らねぇ質問はここに書き込みやがれ Part19
レス数が950を超えています。1000を超えると書き込みができなくなります。
0001nobodyさん
2006/04/09(日) 01:31:18ID:???ここなら本スレで回答のないお前の下らない質問に回答があるかも知れません。
まず読め【PHP マニュアル】
http://www.php.net/manual/ja/
本スレ【PHP】質問スレッドpart33【php】
http://pc8.2ch.net/test/read.cgi/php/1140027592/
【PHP】下らねぇ質問はここに書き込みやがれpart18
http://pc8.2ch.net/test/read.cgi/php/1142417901/
過去スレは>>2-3あたり
0874nobodyさん
2006/04/25(火) 15:52:13ID:???http://pear.php.net/manual/ja/package.xml.xml-rss.php
http://pear.php.net/manual/ja/package.mail.mail.php
前回チェック時の更新時刻の保存は
DBなりファイルに保存するなり、決めうちでチェック間隔以内
にするなりすきにしれ。
0875nobodyさん
2006/04/25(火) 19:46:57ID:???0876nobodyさん
2006/04/25(火) 20:11:19ID:YuLHBMcsを置換したく、
$file = str_replace(" ","", $file);
でやってみたのですがうまくいきません、
ほかに方法ありませんか?
0878nobodyさん
2006/04/25(火) 20:27:12ID:???0879nobodyさん
2006/04/25(火) 20:29:08ID:???tryするのか?もまえらは
ちなみにphp4のひとは無視してくだちい。
0882あぼーん
NGNG0883ぬる
2006/04/25(火) 22:37:49ID:???とアクセスしたとき、
http://example.com/ に相当する部分の文字列を取得したいけど
どうしたらいい?
PHP_SELF や REQUEST_URI や SCRIPT_NAME だと
そこが丸々削られてて、途方にくれた
0884nobodyさん
2006/04/25(火) 22:38:25ID:S1Of8zqn0885nobodyさん
2006/04/25(火) 22:50:19ID:1JYLmc+t0886nobodyさん
2006/04/25(火) 22:52:58ID:???ぐらいしかひとまず思いつかん
0887nobodyさん
2006/04/26(水) 00:07:22ID:???ありがとうございます。とりあえず更新しているかどうかのチェックと、XML_RSSの使い方はわかったんですが、
いちいちページにアクセスしないでスクリプトを開始させる方法はありませんかね?
毎回アクセスするならあまり意味が…
0888nobodyさん
2006/04/26(水) 00:51:31ID:???前はcron で wgetするなんて事もしていたな・・
0890nobodyさん
2006/04/26(水) 01:44:28ID:???「検索: 17件中1〜10件を表示」
の「17」だけを取りたいんですが何てかけばおkなの?
0892nobodyさん
2006/04/26(水) 01:58:58ID:???0893nobodyさん
2006/04/26(水) 02:58:36ID:???wget http://example.com/hoge.php
とか
php hoge.php
って事でしょ
0894nobodyさん
2006/04/26(水) 03:39:46ID:???そりゃcronって時間指定の他はコマンドラインでプログラム実行するのと
そのまま同じに書くだけだもの。
そんなのに具体的解説を求めるのは
「先生!マウスでクリックって何のことか分かりません!」
と言うのと同じくらい厨な話かと。
0895nobodyさん
2006/04/26(水) 03:58:34ID:???0896612
2006/04/26(水) 04:07:26ID:gSi6TGNs例えば
<?php
phpinfo();
?>
というスクリプトがあるとして、このスクリプトに直接手を加えて1分ごとに1回起動させるためには
どう手を加えたら良いのでしょうか?
0897nobodyさん
2006/04/26(水) 04:32:18ID:???cron等を使ったほうがいいと思う
スクリプト動きっぱなしは負荷高そうじゃない?
0900nobodyさん
2006/04/26(水) 09:56:46ID:???お前らWindows環境でタスクスケジューラでもつかったらどうだ。
0902nobodyさん
2006/04/26(水) 10:04:48ID:???0904nobodyさん
2006/04/26(水) 11:29:30ID:???っていうのがしたいのですが、IFで出来ると思うのですが、どうもうまくいきません・・。
文字の比較?かなにかだと思うのですが・・。アドバイス願います。
0906nobodyさん
2006/04/26(水) 11:39:07ID:???0907904
2006/04/26(水) 11:54:02ID:???これで出来ました!ありがとうございました。
<?
if(strpos($hoge,"test")){
echo"これはテストです";
}else{
echo"これはテストではありません";
}
?>
0910nobodyさん
2006/04/26(水) 12:47:45ID:???注意: もし特定の haystack に needle があるかどうかを調べるだけの場合、 より早く少ないメモリを使用する strpos() を代わりに使用してください。
>>907
if(strpos($hoge,"test") !== false)
0911nobodyさん
2006/04/26(水) 13:30:05ID:???0913nobodyさん
2006/04/26(水) 16:46:41ID:???if(strpos($hoge,"test") !== false)をつかったほうがよさそうだな
正規表現なくてもpreg_match使ってた
0914nobodyさん
2006/04/26(水) 17:02:23ID:???0916nobodyさん
2006/04/26(水) 18:48:39ID:???$a["nurupo"]=4;
とする場合は分かったんですが
$b="nurupo";
$a[$b]=4;
とするとエラーになるんですが、どうやったら使えますか?
ほんとにしょうもない質問ですが、連想配列でぐぐっても、答えになるサイトが見つからなかったんで
よろしくおねがいします。
0917nobodyさん
2006/04/26(水) 19:00:35ID:gSi6TGNs$handle = @fopen("test.txt", "r");
if ($handle) {
while (!feof($handle)) {
$buffer = fgets($handle);
echo $buffer;
}
fclose($handle);
をどうすれば良いですか?
0919nobodyさん
2006/04/26(水) 19:54:43ID:gSi6TGNsあぼーん
ですよ
0920nobodyさん
2006/04/26(水) 19:57:49ID:???実際にエラーになってるんですが、何ですかコレ。
0921nobodyさん
2006/04/26(水) 20:00:57ID:???0923nobodyさん
2006/04/26(水) 20:14:51ID:???$handle = @fopen("test.txt", "r");
if ($handle) {
//while (!feof($handle)) {
$buffer = fgets($handle);
echo $buffer;
//}
fclose($handle);
}
0924nobodyさん
2006/04/26(水) 20:57:08ID:???0925nobodyさん
2006/04/26(水) 20:58:59ID:gSi6TGNsありがとうございました。やってみます!
0927nobodyさん
2006/04/26(水) 21:33:56ID:???<? include=("/home/hoge/hoge.php"); ?>
としたとき、hoge.php内で
[/home/hoge/test.php]
もしくは、test.phpのアドレスを
取得するにはどうすれば良いでしょうか。
よろしくお願いします。
0928nobodyさん
2006/04/26(水) 21:58:41ID:???0930nobodyさん
2006/04/26(水) 22:52:57ID:bUyltefP0931nobodyさん
2006/04/26(水) 23:30:55ID:???俺はよく見るけど参考になるかな
0932nobodyさん
2006/04/26(水) 23:34:46ID:???0933nobodyさん
2006/04/26(水) 23:44:42ID:???0934nobodyさん
2006/04/26(水) 23:44:56ID:???filemtimeってローカルのファイルのものしか取得できないんですか?URLをぶち込んでもエラーになるんですが・・・
0935nobodyさん
2006/04/26(水) 23:48:40ID:???0936nobodyさん
2006/04/26(水) 23:59:40ID:???0940nobodyさん
2006/04/27(木) 01:36:21ID:???$aa[] = "http;//*****";
$aa[] = "http;//****";
ってな感じで配列に組み込まれたサイトが更新したかどうかを次々確認するにはどうすればいいでしょうか?
このスレ読んでcron使って定期的に走らせる方法はわかりましたが、
配列をまだよく理解できてないせいかスクリプト自体がうまくいきません。
データベースは無しの方向で・・・
0941nobodyさん
2006/04/27(木) 01:41:09ID:???そんな知識レベルで外部アクセスするプログラムは書いちゃダメ。
十中八九、その更新をチェックされるサイトに迷惑がかかる。
(実際、あちこちでその手の素人作成ロボットが多大な迷惑をかけてる)
その種のWindowsアプリはWWWCとか色々あるんだからそれ使いなさい。
みんな、相手先に迷惑をかけないように色々考えて作ってるんだから。
素人が気軽に考えてそんなツール作っちゃダメ。
0943nobodyさん
2006/04/27(木) 06:07:58ID:???まずは、何をもって「サイトが更新」されているかを判断するか
考えてる?それによってどうすべきかが変わると思うけどね。
0944nobodyさん
2006/04/27(木) 08:22:25ID:???304が帰ってきたら更新なし、それい以外だと更新あり
だから相手鯖のヘッダだけで更新したかしてないかわかるから
データまでは取得しなくていい
といってもPHPでheader関数使ってるとこじゃ使えなさそうだけど
0945nobodyさん
2006/04/27(木) 09:35:09ID:???>>944
「前回の更新時間」は複数サイトチェックするならデータベース使うしかない?
ファイルをそれぞれ作るわけにもいかないし
0946nobodyさん
2006/04/27(木) 10:23:10ID:???cronが1時間周期なら、1時間(5分)以内に更新したサイト
というやり方もあり。信頼性はかわるが実用レベルでは
何とでもなるだろ。
0948944
2006/04/27(木) 12:37:30ID:???946がいってるように一定周期ならその間に更新があるか判定すればいいけど
不定期ならDBとかに保存しないと駄目と思う
>>947
画像だけを更新チェックってこと?
なら>>944のIf-Modified-Sinceでできるよ
0949944
2006/04/27(木) 12:39:46ID:???すべてのページ内リンクを解析してチェックしないとできないと思う
0950nobodyさん
2006/04/27(木) 14:54:14ID:???WWWCとか見てみれば分かるが、
HEADで更新日時を確認するのと、
ページのサイズ変化を確認するのと、
GETでページ全体を比較するのと、
HTMLタグを除去した状態で内容を比較するのと、
正規表現で特定の範囲だけ比較するのと、
という感じで色々サイトごとに設定できるようになってて
それだけ手を考えないとちゃんと更新をチェックできない場合があるね。
広告挿入の処理に引っかかって軒並み更新にされちゃうサイトとかあったり。
0952nobodyさん
2006/04/27(木) 15:43:39ID:???tarで固めてMD5ハッシュ値比較保存
ってのはどうだ?
HTMLの構文解析やらアドタグの排除やら面倒な事山積みだけど。
0953nobodyさん
2006/04/27(木) 15:52:56ID:???1サイトのチェックだけで10分とかかかりそうだw
そこを短時間で一気に行くとサイト側が負荷かかりすぎで死ぬし。
こういう処理で、平気で10とか並列でアクセスかけるバカが多くて困る。
0954nobodyさん
2006/04/27(木) 16:01:46ID:???if(今の時間>$last>今の時間-3600)
じゃだめなの?
0956nobodyさん
2006/04/27(木) 16:43:29ID:???setcookie("namecookie", $name, time()+3600*24*30);
とし、
html側は<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<input type="text" size="10" value="<?php echo $_COOKIE["namecookie"]; ?>">
<input type="submit" value="test">
</form>
といった感じにして、cookieの挙動を見てみたのですが、
1.名前を入れて送信→名前はセットされない→2.別の名前を入れて送信→
1回目の名前がセットされる→3.そのまま(1回目の名前がセットされているので)送信→
2回目の名前がセットされる→4.そのまま(2回目の名前がセットされているので)送信→
1回目の名前がセットされる・・・以後ループ。
といった感じになります。
cookieを使うのははじめてなのですが、これは正常な動作なのでしょうか?
1回目を送信した時点で、1回目の名前がセットされている状態がいいのですが、
何か方法はありませんでしょうか?
0957956
2006/04/27(木) 16:44:38ID:???<input type="text" size="10" value="<?php echo $_COOKIE["namecookie"]; ?>">
↓
<input type="text" size="10" name="name" value="<?php echo $_COOKIE["namecookie"]; ?>">
0958nobodyさん
2006/04/27(木) 17:17:56ID:???$name = $_POST['name'];
if (empty($_COOKIE['namecookie'])) {
$_COOKIE['namecookie'] = $name;
}
0959nobodyさん
2006/04/27(木) 17:33:32ID:???それで正常。
1回目を入れたい場合は、「クッキーがあればそれを表示。無ければPOSTの内容を表示」
という風に条件をつけて表示させるか、PHPで表示せずにJavaScriptで表示させる。
0960nobodyさん
2006/04/27(木) 17:39:09ID:???そりゃサーバがクッキー受け取るのは、アクセス時だし、
ブラウザーがクッキー保存するのはアクセスした後なんだから当たり前。
0961956
2006/04/27(木) 17:57:14ID:???皆さんレスどうもありがとうございました。
自分の書きかたが悪いのかな?と思いまして。
正常ということなら一安心です。
さっそく958さんのコードを使用させていただきます。
0962nobodyさん
2006/04/27(木) 19:42:55ID:???fopen("log", "a");だと最新ログが下にきてしまいます。
PHPマニュアルのfopen()で使用可能な modeのリストを見ましたが、
a以外にログに簡単に書き込めそうなのはありませんでした。
aとwを足して2でわったような、
書き出し用のみでオープン。ファイルポインタをファイルの先頭に置く。
ファイルサイズは0にしない。
といったことはできませんか?
rsortを使えば、表示の時には最新のが上にきましたが、
ログに書き込む時点で、最新のをファイルの先頭に書き込むようなことがしたいです。
どうかアドバイスお願いします。
0963nobodyさん
2006/04/27(木) 19:50:13ID:???0965962
2006/04/27(木) 20:00:22ID:???r+でやってみたんですが、なぜか90バイトぐらいしかログが残らなくて・・・
自分で関数作るのがベストなんでしょうがそんな力もなくorz
0966nobodyさん
2006/04/27(木) 20:02:44ID:???以前のデータは破壊されますがなにか?
0967nobodyさん
2006/04/27(木) 20:12:57ID:???0968nobodyさん
2006/04/27(木) 20:32:05ID:???$data = file_get_contents("ファイル名");
$data = "書き込みたい文字\n".$data;
$fp = fopen("ファイル名", 'w');
fwrite($fp, $data);
fclose($fp);
こんなんじゃだめ?
0969962
2006/04/27(木) 20:42:29ID:???調べてやってみましたが、ログが全部Arrayに…
やり方が悪かったんでしょうか。
>>966
そうですよね…
>>967
チャットのサンプルをいじってまして、
表示部分がJavaScriptで行われているようで、
JavaScript側でソートすればいいのでしょうが、
触ったことがなく、PHP側でどうにかしようと思った次第です。
>>968
試してみたところ、見事最新ログが上にきました。
どうもありがとうございます。
しかし仕組みがわからない…もっと勉強してまいります。
0970nobodyさん
2006/04/27(木) 20:46:07ID:???ファイルの先頭に追記(挿入)する事は不可能
それを踏まえてアルゴリズムを考えるべし
>>964に1票
>>968
一応flockも考慮していただけると・・・
0971nobodyさん
2006/04/27(木) 20:47:17ID:???$log = array_reverse($log);
これだけでファイルが逆さに表示できる。
0972962
2006/04/27(木) 20:58:29ID:???勉強になります。どうもありがとうございます。
勉強不足なのは痛感しました。
アルゴリズムの勉強もしたいと思います。
0973nobodyさん
2006/04/27(木) 21:14:29ID:???レス数が950を超えています。1000を超えると書き込みができなくなります。