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

【PHP】下らねぇ質問はここに書き込みやがれ Part19

レス数が950を超えています。1000を超えると書き込みができなくなります。
0001nobodyさん2006/04/09(日) 01:31:18ID:???
PHPに関するくだらねぇ質問用スレです。
ここなら本スレで回答のないお前の下らない質問に回答があるかも知れません。

まず読め【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:???
>>872
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:???
Last-Modified吐いてくれたらいいのにね。
0876nobodyさん2006/04/25(火) 20:11:19ID:YuLHBMcs
→   全空白

を置換したく、

$file = str_replace(" ","", $file);

でやってみたのですがうまくいきません、
ほかに方法ありませんか?
0877nobodyさん2006/04/25(火) 20:20:02ID:???
>>876
&andheart;
0878nobodyさん2006/04/25(火) 20:27:12ID:???
&heart;
0879nobodyさん2006/04/25(火) 20:29:08ID:???
DBからデータ持ってくるときに、いちいち
tryするのか?もまえらは

ちなみにphp4のひとは無視してくだちい。
0880nobodyさん2006/04/25(火) 21:31:28ID:???
>>879
死ねゴミ
0881nobodyさん2006/04/25(火) 22:19:05ID:???
>>870
これってページにアクセスしなくてもできるの?どうやって?
0882あぼーんNGNG
あぼーん
0883ぬる2006/04/25(火) 22:37:49ID:???
http://example.com/test.php/foo.bar
とアクセスしたとき、
http://example.com/ に相当する部分の文字列を取得したいけど
どうしたらいい?

PHP_SELF や REQUEST_URI や SCRIPT_NAME だと
そこが丸々削られてて、途方にくれた
0884nobodyさん2006/04/25(火) 22:38:25ID:S1Of8zqn
http://g.pic.to/27ckf
0885nobodyさん2006/04/25(火) 22:50:19ID:1JYLmc+t
host
0886nobodyさん2006/04/25(火) 22:52:58ID:???
$_SERVER[HTTP_HOST]
ぐらいしかひとまず思いつかん
0887nobodyさん2006/04/26(水) 00:07:22ID:???
>>873-874
ありがとうございます。とりあえず更新しているかどうかのチェックと、XML_RSSの使い方はわかったんですが、
いちいちページにアクセスしないでスクリプトを開始させる方法はありませんかね?
毎回アクセスするならあまり意味が…
0888nobodyさん2006/04/26(水) 00:51:31ID:???
php cliで書くとか
前はcron で wgetするなんて事もしていたな・・
0889nobodyさん2006/04/26(水) 00:56:20ID:???
>>887
cronで一定時間ごとに実行
0890nobodyさん2006/04/26(水) 01:44:28ID:???
PHPの正規表現で
「検索: 17件中1〜10件を表示」
の「17」だけを取りたいんですが何てかけばおkなの?
0891nobodyさん2006/04/26(水) 01:50:59ID:???
>>890
正規表現スレで聞いてきなさい
0892nobodyさん2006/04/26(水) 01:58:58ID:???
cronでphpを起動ってよく聞くけど具体的な書き方が載ってるサイトがない
0893nobodyさん2006/04/26(水) 02:58:36ID:???
cronで
wget http://example.com/hoge.php
とか
php hoge.php
って事でしょ
0894nobodyさん2006/04/26(水) 03:39:46ID:???
>>892
そりゃcronって時間指定の他はコマンドラインでプログラム実行するのと
そのまま同じに書くだけだもの。
そんなのに具体的解説を求めるのは
「先生!マウスでクリックって何のことか分かりません!」
と言うのと同じくらい厨な話かと。
0895nobodyさん2006/04/26(水) 03:58:34ID:???
まさかcronの使い方教えろって言ってるわけじゃないよな・・
08966122006/04/26(水) 04:07:26ID:gSi6TGNs
前回の質問の続きなのですが、
例えば
<?php
phpinfo();
?>
というスクリプトがあるとして、このスクリプトに直接手を加えて1分ごとに1回起動させるためには
どう手を加えたら良いのでしょうか?
0897nobodyさん2006/04/26(水) 04:32:18ID:???
sleep

cron等を使ったほうがいいと思う
スクリプト動きっぱなしは負荷高そうじゃない?
0898nobodyさん2006/04/26(水) 07:26:07ID:???
>>897
sleepだとmax_execution_time で終了(デフォは30秒)
0899nobodyさん2006/04/26(水) 09:54:52ID:???
>>887
定期実行の方法くらい学べよ。
スクリプト系言語の基本だろ。
0900nobodyさん2006/04/26(水) 09:56:46ID:???
なんだcron厨ばかりか。
お前らWindows環境でタスクスケジューラでもつかったらどうだ。
0901nobodyさん2006/04/26(水) 10:03:53ID:???
>>900
タスクスケジューラが移植されてから考える。
つかWindowsでもatはあるよな。
0902nobodyさん2006/04/26(水) 10:04:48ID:???
いや確かに普段使ってるけど
0903nobodyさん2006/04/26(水) 10:24:51ID:???
>>896
つ[ */1 * * * * php phpinfo.php ]
0904nobodyさん2006/04/26(水) 11:29:30ID:???
$hogeにある文字列が入っていたら、○○を出力

っていうのがしたいのですが、IFで出来ると思うのですが、どうもうまくいきません・・。
文字の比較?かなにかだと思うのですが・・。アドバイス願います。
0905nobodyさん2006/04/26(水) 11:38:04ID:???
>>904
>>347-
0906nobodyさん2006/04/26(水) 11:39:07ID:???
ちょっとちがうか。ま、strposと組み合わせてうまいことやれ。
09079042006/04/26(水) 11:54:02ID:???
>>906
これで出来ました!ありがとうございました。
<?
if(strpos($hoge,"test")){
echo"これはテストです";
}else{
echo"これはテストではありません";
}
?>
0908nobodyさん2006/04/26(水) 11:58:28ID:???
>>904
if(strstr($hoge, 'ある文字列')) echo '○○';
0909nobodyさん2006/04/26(水) 12:22:14ID:???
>>907
それだと$hogeがtestで始まる場合に動かない
0910nobodyさん2006/04/26(水) 12:47:45ID:???
>>908
注意: もし特定の haystack に needle があるかどうかを調べるだけの場合、 より早く少ないメモリを使用する strpos() を代わりに使用してください。
>>907
if(strpos($hoge,"test") !== false)
0911nobodyさん2006/04/26(水) 13:30:05ID:???
だから>>304-を参考にしろというのに…w
0912nobodyさん2006/04/26(水) 13:30:21ID:???
>>347か orz
0913nobodyさん2006/04/26(水) 16:46:41ID:???
文字列が含まれているか確認するだけなら
if(strpos($hoge,"test") !== false)をつかったほうがよさそうだな
正規表現なくてもpreg_match使ってた
0914nobodyさん2006/04/26(水) 17:02:23ID:???
いや基本ですよ
0915nobodyさん2006/04/26(水) 17:15:00ID:???
>>914 すみません
0916nobodyさん2006/04/26(水) 18:48:39ID:???
連想配列で、

$a["nurupo"]=4;

とする場合は分かったんですが

$b="nurupo";
$a[$b]=4;

とするとエラーになるんですが、どうやったら使えますか?
ほんとにしょうもない質問ですが、連想配列でぐぐっても、答えになるサイトが見つからなかったんで
よろしくおねがいします。
0917nobodyさん2006/04/26(水) 19:00:35ID:gSi6TGNs
test.txtから先頭の1行のみを読み込むには

$handle = @fopen("test.txt", "r");
if ($handle) {
while (!feof($handle)) {
$buffer = fgets($handle);
echo $buffer;
}
fclose($handle);

をどうすれば良いですか?
0918nobodyさん2006/04/26(水) 19:07:38ID:???
あの、>>882が気になるんですけど。。
0919nobodyさん2006/04/26(水) 19:54:43ID:gSi6TGNs
それは
あぼーん
ですよ
0920nobodyさん2006/04/26(水) 19:57:49ID:???
スクリプトの一番最後の ?> がエラーになることってあるんですか。
実際にエラーになってるんですが、何ですかコレ。
0921nobodyさん2006/04/26(水) 20:00:57ID:???
構文的に見てまだ後に何かが続く筈なのに ?> で終わらされた場合には、PHPの中の人も怒るってもんだ。
0922nobodyさん2006/04/26(水) 20:13:02ID:???
>>920
サンプル
<?php
$a = "aaaa;
echo $a;
exit;
?>
0923nobodyさん2006/04/26(水) 20:14:51ID:???
>>917
$handle = @fopen("test.txt", "r");
if ($handle) {
//while (!feof($handle)) {
$buffer = fgets($handle);
echo $buffer;
//}
fclose($handle);
}
0924nobodyさん2006/04/26(水) 20:57:08ID:???
ファイルの中身を0にする(消す)には普通にwで読み込めば0バイトになりますか?
0925nobodyさん2006/04/26(水) 20:58:59ID:gSi6TGNs
>>923
ありがとうございました。やってみます!
0926nobodyさん2006/04/26(水) 21:08:58ID:???
>>924
fopenした時点で0になるので読み込めない。
0927nobodyさん2006/04/26(水) 21:33:56ID:???
/home/hoge/test.phpで、
<? include=("/home/hoge/hoge.php"); ?>
としたとき、hoge.php内で
[/home/hoge/test.php]
もしくは、test.phpのアドレスを
取得するにはどうすれば良いでしょうか。
よろしくお願いします。
0928nobodyさん2006/04/26(水) 21:58:41ID:???
何してるかしらんけど、文句言ってこないか?
0929nobodyさん2006/04/26(水) 22:21:13ID:???
>>927
前に調べたときにはわからなかったけどdebug_backtrace()に入ってた。
0930nobodyさん2006/04/26(水) 22:52:57ID:bUyltefP
fsockopenとかで送信するHTTPリクエストについて詳しく解説してるサイトご存知ですか?
0931nobodyさん2006/04/26(水) 23:30:55ID:???
ttp:www.tohoho-web.com/ex/http.htm
俺はよく見るけど参考になるかな
0932nobodyさん2006/04/26(水) 23:34:46ID:???
filemtimeって同じサーバーのものしか取得できない
0933nobodyさん2006/04/26(水) 23:44:42ID:???
Last-Modifiedとかで相手鯖のヘッダみるとか
0934nobodyさん2006/04/26(水) 23:44:56ID:???
ミスった・・・
filemtimeってローカルのファイルのものしか取得できないんですか?URLをぶち込んでもエラーになるんですが・・・
0935nobodyさん2006/04/26(水) 23:48:40ID:???
ローカルしか取得できないよ
0936nobodyさん2006/04/26(水) 23:59:40ID:???
初めて聞いた
0937nobodyさん2006/04/27(木) 00:01:33ID:???
>>931
�d!
0938nobodyさん2006/04/27(木) 01:03:12ID:???
>>927
$_SERVER['SCRIPT_NAME'] か $_SERVER['PHP_SELF'] 辺り?
0939nobodyさん2006/04/27(木) 01:06:10ID:???
>>914
そのままコピペして実行してみたがエラーにはならんかったよ。
どんなエラーが出たって言うのさ。
0940nobodyさん2006/04/27(木) 01:36:21ID:???
$aa[] = "http;//******";
$aa[] = "http;//*****";
$aa[] = "http;//****";
ってな感じで配列に組み込まれたサイトが更新したかどうかを次々確認するにはどうすればいいでしょうか?
このスレ読んでcron使って定期的に走らせる方法はわかりましたが、
配列をまだよく理解できてないせいかスクリプト自体がうまくいきません。
データベースは無しの方向で・・・
0941nobodyさん2006/04/27(木) 01:41:09ID:???
>>938
そんな知識レベルで外部アクセスするプログラムは書いちゃダメ。
十中八九、その更新をチェックされるサイトに迷惑がかかる。
(実際、あちこちでその手の素人作成ロボットが多大な迷惑をかけてる)

その種のWindowsアプリはWWWCとか色々あるんだからそれ使いなさい。
みんな、相手先に迷惑をかけないように色々考えて作ってるんだから。
素人が気軽に考えてそんなツール作っちゃダメ。
0942nobodyさん2006/04/27(木) 03:24:22ID:???
>>941
ウニ系はどうするの?
あったら教えて
0943nobodyさん2006/04/27(木) 06:07:58ID:???
>>940
まずは、何をもって「サイトが更新」されているかを判断するか
考えてる?それによってどうすべきかが変わると思うけどね。
0944nobodyさん2006/04/27(木) 08:22:25ID:???
HTTPヘッダのIf-Modified-Sinceで前回の更新日送って
304が帰ってきたら更新なし、それい以外だと更新あり
だから相手鯖のヘッダだけで更新したかしてないかわかるから
データまでは取得しなくていい

といってもPHPでheader関数使ってるとこじゃ使えなさそうだけど
0945nobodyさん2006/04/27(木) 09:35:09ID:???
940ではないけど
>>944
「前回の更新時間」は複数サイトチェックするならデータベース使うしかない?
ファイルをそれぞれ作るわけにもいかないし
0946nobodyさん2006/04/27(木) 10:23:10ID:???
>>945
cronが1時間周期なら、1時間(5分)以内に更新したサイト
というやり方もあり。信頼性はかわるが実用レベルでは
何とでもなるだろ。
0947nobodyさん2006/04/27(木) 11:20:27ID:???
>>944
画像だけ更新ってのは?
09489442006/04/27(木) 12:37:30ID:???
>>945
946がいってるように一定周期ならその間に更新があるか判定すればいいけど
不定期ならDBとかに保存しないと駄目と思う

>>947
画像だけを更新チェックってこと?
なら>>944のIf-Modified-Sinceでできるよ
09499442006/04/27(木) 12:39:46ID:???
あぁページ内の画像が更新ってことか
すべてのページ内リンクを解析してチェックしないとできないと思う
0950nobodyさん2006/04/27(木) 14:54:14ID:???
>>944
WWWCとか見てみれば分かるが、
HEADで更新日時を確認するのと、
ページのサイズ変化を確認するのと、
GETでページ全体を比較するのと、
HTMLタグを除去した状態で内容を比較するのと、
正規表現で特定の範囲だけ比較するのと、
という感じで色々サイトごとに設定できるようになってて
それだけ手を考えないとちゃんと更新をチェックできない場合があるね。

広告挿入の処理に引っかかって軒並み更新にされちゃうサイトとかあったり。
0951nobodyさん2006/04/27(木) 14:55:35ID:???
>>945
ファイルをそれぞれ作れば?
0952nobodyさん2006/04/27(木) 15:43:39ID:???
HTMLから内包する画像から何から一切合財を一括で取得して
tarで固めてMD5ハッシュ値比較保存
ってのはどうだ?
HTMLの構文解析やらアドタグの排除やら面倒な事山積みだけど。
0953nobodyさん2006/04/27(木) 15:52:56ID:???
>>952
1サイトのチェックだけで10分とかかかりそうだw
そこを短時間で一気に行くとサイト側が負荷かかりすぎで死ぬし。
こういう処理で、平気で10とか並列でアクセスかけるバカが多くて困る。
0954nobodyさん2006/04/27(木) 16:01:46ID:???
$last = getlastmod;
if(今の時間>$last>今の時間-3600)
じゃだめなの?
0955nobodyさん2006/04/27(木) 16:14:50ID:???
>>954
流れを読まない奴
0956nobodyさん2006/04/27(木) 16:43:29ID:???
$name = $_POST['name'];
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回目の名前がセットされている状態がいいのですが、
何か方法はありませんでしょうか?
09579562006/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:???
>>956
$name = $_POST['name'];
if (empty($_COOKIE['namecookie'])) {
$_COOKIE['namecookie'] = $name;
}
0959nobodyさん2006/04/27(木) 17:33:32ID:???
>>956
それで正常。
1回目を入れたい場合は、「クッキーがあればそれを表示。無ければPOSTの内容を表示」
という風に条件をつけて表示させるか、PHPで表示せずにJavaScriptで表示させる。
0960nobodyさん2006/04/27(木) 17:39:09ID:???
>>956
そりゃサーバがクッキー受け取るのは、アクセス時だし、
ブラウザーがクッキー保存するのはアクセスした後なんだから当たり前。
09619562006/04/27(木) 17:57:14ID:???
>>958-960
皆さんレスどうもありがとうございました。
自分の書きかたが悪いのかな?と思いまして。
正常ということなら一安心です。
さっそく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:???
普通にr+では?
0964nobodyさん2006/04/27(木) 19:57:43ID:???
>>962
ファイルを逆にするという手もある。
array_reverse
09659622006/04/27(木) 20:00:22ID:???
>>963
r+でやってみたんですが、なぜか90バイトぐらいしかログが残らなくて・・・
自分で関数作るのがベストなんでしょうがそんな力もなくorz
0966nobodyさん2006/04/27(木) 20:02:44ID:???
ファイルの書き込みはファイルポインタの位置からデータを書いていくだけなので、
以前のデータは破壊されますがなにか?
0967nobodyさん2006/04/27(木) 20:12:57ID:???
なんで前に書き込みたいのかが分からん。
0968nobodyさん2006/04/27(木) 20:32:05ID:???
>>962
$data = file_get_contents("ファイル名");
$data = "書き込みたい文字\n".$data;
$fp = fopen("ファイル名", 'w');
fwrite($fp, $data);
fclose($fp);

こんなんじゃだめ?
09699622006/04/27(木) 20:42:29ID:???
>>964
調べてやってみましたが、ログが全部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 = file($logfile);
$log = array_reverse($log);

これだけでファイルが逆さに表示できる。
09729622006/04/27(木) 20:58:29ID:???
>>970-971
勉強になります。どうもありがとうございます。
勉強不足なのは痛感しました。
アルゴリズムの勉強もしたいと思います。
0973nobodyさん2006/04/27(木) 21:14:29ID:???
ここ回答者も初心者しかいないな
レス数が950を超えています。1000を超えると書き込みができなくなります。