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

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

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2010/03/17(水) 23:17:41ID:???
質問者はまず>>1を良く読むこと(必須!)
過去スレ、関連スレ、FAQなどは>>2-10辺り
次スレは>>980が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。

◆前スレ
【PHP】下らねぇ質問はID出して書き込みやがれ 93
http://pc11.2ch.net/test/read.cgi/php/1266229386/

◆質問用テンプレ
【OS名】vine linux
【PHPのバージョン】php5.26
【連携ソフトウェア】mysql
【質問内容】

◆質問する時の注意
・ スレを上げて自分のIDを表示させること。(メール欄に何も記述しない。専ブラのsageチェックを外す)
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に関連リンクの公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
(PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。)

◆質問後の注意
・2回目以降は最初に質問した際のレス番号を入れて、偽者防止に必ずIDを表示させること。
・解決しなくても回答をもらった場合はお礼を言うこと。
 (荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)

◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。

【その他諸注意】
・SQL・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
0466nobodyさん2010/03/30(火) 02:26:05ID:wKtmg6ou
ですのでで来ません
0467nobodyさん2010/03/30(火) 02:51:17ID:???
>>465
正の値しか受け付けないコンストラクタに何かのミスで負の値を渡された時には
コンストラクタ内で例外を投げて止めるが、
正負どちらの値も有り得るのならstaticなメソッドを用意した方が行儀がいい

class Klass { public static function create($c) { return $c ? new self() : null; }}
0468nobodyさん2010/03/30(火) 03:02:58ID:vJQ1xggI
>>467
ありがとうございました。
メソッドのほうでnullを返すようにさせますm(_ _)m
0469nobodyさん2010/03/30(火) 05:50:51ID:g1YqBDS1
<?php
$foo = 'Bob'; // 値'Bob'を$fooに代入する。
$bar = &$foo; // $fooを$barにより参照
$bar = "My name is $bar"; // $barを変更...
echo $bar;
echo $foo; // $fooも変更される。
?>

これで'My name is Bob'が2回出力されるのがわからない。
$fooが書き換えられたら、元の 'Bob' という文字列は "My name is $bar" に上書きされて消えちゃうんだよね?
そしたら$barと$fooをechoで出力するときに 'Bob' という文字列はどこから来てるの?
0470nobodyさん2010/03/30(火) 07:22:34ID:???
非国民端末iPhoneだけを観覧禁止にすることは可能ですか?
0471nobodyさん2010/03/30(火) 07:28:31ID:???
pandaなんちゃらを弾けばいいんじゃね?ワイファイは知らんが
0472nobodyさん2010/03/30(火) 10:36:09ID:???
>>469
右から評価される

$bar = "My name is $bar"; // $barを変更...
ここは

$bar = "My name is Bob";
という動作になる。
0473nobodyさん2010/03/30(火) 17:36:46ID:dG8PavZ2
$arrayには以下が入ってます。
[0] => 1-text [1] => 2-text [2] => 21-text [3] => 27-text [4] => 3-text
rsortで配列を並べ変えてるんですが
[0] => 3-text [1] => 27-text [2] => 21-text [3] => 2-text [4] => 1-text
このようになります。
下記のように数が多い順に並べ替えたいのですがどの関数を使えばいいのでしょうか?
[0] => 27-text [1] => 21-text [2] => 3-text [3] => 2-text [4] => 1-text
0474nobodyさん2010/03/30(火) 17:40:39ID:???
>>473
http://jp.php.net/manual/ja/function.natsort.php
04754732010/03/30(火) 18:00:50ID:dG8PavZ2
>>474
こんな関数あるの知りませんでした。
ありがとうございます。
0476nobodyさん2010/03/30(火) 18:19:22ID:???
新アルゴリズム 納豆ソート
0477nobodyさん2010/03/30(火) 18:41:47ID:jgFCVhFf
アクセスカウンタの作り方を下記ページで勉強してるのですが、
http://www.phpbook.jp/appli/accesscounter/index3.html
<?php
$counter_file = 'counter.txt';
$counter_lenght = 8;
$fp = fopen($counter_file, 'r+');
★if ($fp){
★if (flock($fp, LOCK_EX)){
$counter = fgets($fp, $counter_lenght);
$counter++;
rewind($fp);
if (fwrite($fp, $counter) === FALSE){
print('ファイル書き込みに失敗しました');
}
★flock($fp, LOCK_UN);
}
}
fclose($fp);

★のつけたところがよくわかりません・・・。if文の == TRUEが省略されてるんだと思うんですが、
全体の意味が理解できません・・。1つ目のifがtrueで処理がされて、その次のif (flock($fp, LOCK_EX))
ここはどういうことなのでしょうか?読み書き禁止 == TRUEの場合?
0478nobodyさん2010/03/30(火) 18:47:09ID:???
>>477
★1つ目:fopenに成功した時
★2つ目:flockでの書き込み禁止ロックが成功した時
★3つ目:flockでのロックを開放する
0479nobodyさん2010/03/30(火) 18:50:45ID:???
>>477

$fp = fopen();
でファイルを正常に開くと$fpはファイルへのポインタになって、失敗するとfalseになる
if ($fp) は if ($fp != false) と同じ

flock($fp, LOCK_EX)は戻り値で成功したらtrue、失敗したらfalseを返す

if (flock($fp, LOCK_EX)){
は
$succeed = flock($fp, LOCK_EX);
if ($succeed){
と同じ
0480nobodyさん2010/03/30(火) 18:53:51ID:???
リソース型は特殊だけどリソースが返ってくるということはbooleanでtrueであることだと思えばよい。
そのほかの型については、
http://php.net/manual/ja/types.comparisons.php
例えば、$x = 0;のboolean項目はFALSEとなっているので、
if ($x)は通らないがif(!$x)は通る。
04814772010/03/30(火) 19:03:25ID:???
うおーみなさん素早いレスありがとうございます!
ひとつづつ噛み砕いてみます!
04824772010/03/30(火) 19:14:26ID:???
大変すみませんまたよろしいでしょうか・・・・
$fp = fopen($counter_file, 'r+');
★if ($fp){
ここでr+にして、まず読み書き許可しますよね?

★2つ目 flockでの書き込み禁止ロック
ここで、どうしてすぐに書き込み禁止にしてしまうのでしょうか・・?
イメージとして、読み込んだテキストから数字8を取り出して、1つ足して数字9にして
ファイルを閉じる、というのがあるのですが、書き込み可能にしてすぐ書き込み禁止にする
行為がイメージつきません・・・だもんで、★2つ目から下の文の内容もよくわからんのです・・・

04834772010/03/30(火) 19:16:55ID:???
あれ?禁止ロックは条件指定で、実際はしてないのかな?混乱してきた・・・・
0484nobodyさん2010/03/30(火) 19:20:00ID:???
>>483
排他処理でぐぐれ
0485nobodyさん2010/03/30(火) 19:22:29ID:???
>>477のリンクが開けない
0486nobodyさん2010/03/30(火) 19:43:54ID:???
//カウンター数が書かれてるファイル
$counter_file = 'counter.txt';
//カウンターの最大桁数
$counter_lenght = 8;
//ファイルオープン成功時リソースを$fpにセット失敗時は$fp = false;
$fp = fopen($counter_file, 'r+');
//オープン成功してたら
if ($fp){
 //他の訪問者と処理かぶった時にデータが狂わないようにロック
 if (flock($fp, LOCK_EX)){
  //カウンター数を桁数分読み込む
  $counter = fgets($fp, $counter_lenght);
  //読み込んだカウンター数に1足す
  $counter++;
  //ファイルを上書きするためにファイルポインタを先頭にもっていく
  rewind($fp);
  //新しい数値(足した数値)を上書きする
  if (fwrite($fp, $counter) === FALSE){
   //失敗時
   print('ファイル書き込みに失敗しました');
  }
  //ロックを解放し他の人が処理できるようにする
  flock($fp, LOCK_UN);
 }
}
fclose($fp);
0487nobodyさん2010/03/30(火) 19:47:02ID:???
どうでもいいがlenghtじゃなくてlengthな
0488nobodyさん2010/03/30(火) 21:24:19ID:???
恥ずかしいけど間違いじゃないからどーでもいい
0489nobodyさん2010/03/30(火) 21:53:56ID:???
>>488
間違いは間違いだろwww
0490nobodyさん2010/03/30(火) 23:11:49ID:PJO3T1x9
最近wordpressを使いだしてPHPに興味が出てきたんですが、
wordpressテーマみたいに、PHPでソースを吐き出させるPHPと
アプリを作ったりするPHPは別物なんでしょうか?

まずはブログのテーマを作って、その後は検索システムとか掲示板とか作りたいなって
思ってるんですが、書籍を見てても、ブログ系はブログ。アプリはアプリみたいにわかれてるんで、
同じものなのか自信がなくなってしまいました。
0491nobodyさん2010/03/30(火) 23:21:21ID:???
PHPで作れるアプリケーションは大きく分けて3つ

Webアプリケーション
デスクトップアプリケーション(ただし向いてはいない)
コンソールアプリケーション(コマンドラインから使うやつ)

んでブログやらブラウザでサーバにアクセスして動かすものはみなWebアプリケーションだ
0492nobodyさん2010/03/30(火) 23:43:46ID:PJO3T1x9
なるほど、つまり僕が言う物は2つとも同じ種類なわけですね。
ありがとうございます。

これですっきりしたんでwordpressのテーマ作成の本でも探してみます。
0493nobodyさん2010/03/30(火) 23:53:27ID:???
「めんどくさい、使いにくい」と思いながらもWindows使うよりLinux使う比率が圧倒的に高い俺はもはや変態なんだろうな・・・
0494nobodyさん2010/03/31(水) 00:09:51ID:???
if や while が複数の判別式をもっているとき、左から順番に判別されていって false が一つでも返ってきた
段階でそれより右側の判別式の判別は中止されるとおもってよろしいですか?

たとえば

if ( 5 < 0 && 2 < 5)

という判別式の場合、最初の 5 < 0 でfalseが返ってきた時点で残りの 2 < 5 の評価は放棄されると
思ってよろしいですか?
0495nobodyさん2010/03/31(水) 02:01:29ID:???
ホントくだらない質問で申し訳ないのですが
WEB上にあるPHPはダウンロードすることは可能ですか?
とあるスレで外人が親切にfixedしてくれて、ほれこれで動くぞ持ってけ
いわれてるけど名前をつけてリンク先を保存にしてもドキメントしか落とせなくて困ってます。

http://www.arrastheme.com/forums/post5050.html#p5050

wordpressのプラグインget-the-image.phpです
0496nobodyさん2010/03/31(水) 02:16:32ID:???
鯖側のエラーっぽいけど
0497nobodyさん2010/03/31(水) 05:34:24ID:1040mT1O
テスト環境のfedora7では問題なかったのですが
本番サーバのCentOS5/64bitで、escapeshellcmdを通すと日本語(たとえば「てすと」)が
消失する現象が出ています
文字コードはUTF-8です
どうしたものでしょうか
0498nobodyさん2010/03/31(水) 05:44:45ID:???
文字コードをもう一度確認
0499nobodyさん2010/03/31(水) 08:26:19ID:???
文字コード確認してもUTF-8だし
cliだと問題ないなど謎ですが
strtrで自前エスケープするようにしました・・
ちなみに5.2.13です
64bitだからかなぁ・・
0500nobodyさん2010/03/31(水) 09:09:20ID:???
setlocale(LC_ALL, ja_JP.UTF-8); でどうでしょうか。
0501nobodyさん2010/03/31(水) 09:19:16ID:???
いけました!
こんな関数はじめてみました
ありがとうございました
05024772010/03/31(水) 15:20:08ID:???
バイト行ってました・・・
みなさん遅れてすみませんありがとうございました!
テクニックがあるんですね知りませんでした。
理解できました!
0503nobodyさん2010/03/31(水) 16:03:31ID:qgSssQGe
全変数を初期化してもPHP Notice: Undefined offsetが出ることがあるので
error_reporting(1)を最初に追記しました。
PHP Notice: Undefined offsetはでなくなりましたが、error_reporting(1)は
追記したファイルにのみ有効という解釈でいいんでしょうか?
test1.phpとtest2.phpでエラーで発生していて、test1.phpにだけerror_reporting(1)を追記した場合
test1.phpはエラーは出なくなりtest2.phpではエラーは出るという事で大丈夫でしょうか。
0504nobodyさん2010/03/31(水) 16:20:45ID:???
test1.php内で以下のように書けば当然test2.phpでも有効さ
<?php
error_reporting(1);
include './test2.php';
0505nobodyさん2010/03/31(水) 16:49:51ID:???
記号のフォントをGDで使用する方法はありますか?
そもそも、どうやって指示すれば良いのかもわかりません。
hoge.ttfと0×0050とかで指示できたりしますか?
0506nobodyさん2010/03/31(水) 19:21:18ID:???
>>505
記号のフォントってのがいまいちだけど、文字コードと出力される字形は別モンなので単純に
chr(0x50)
でいいんじゃ?
0507nobodyさん2010/03/31(水) 22:34:38ID:5rD6sntL
SimpleXMLElement::xpath->SimpleXMLElement:: addChild($name.$value)みたいには書けないの?
0508nobodyさん2010/03/31(水) 22:42:26ID:F5ZddSdm
PHPで、特定のオブジェクトに対する処理(メソッド実行やプロパティへの代入など)を
一括して行う方法というのは無いでしょうか(オブジェクトの表記を省略したい)。
(VBScriptのWithステートメントのようなモノを考えています)

$object->method1();
$object->method2();
$object->method3();
   これを
With($object){
 ->method1();
 ->method2();
 ->method3();
}
こういう風に省略できたら見た目にもすっきりしていいなーと思うのですが。
また、無いとしたら何か他に何か、良い短縮方法というのはありますか?

因みに間違えてプログラム板でこの質問をしてしまったんですが
「短縮は可読性を下げる」と言われてしまいました。
やはり短縮しないで書いた方がいいんでしょうか。
0509nobodyさん2010/03/31(水) 22:49:36ID:???
残念ながら!
0510nobodyさん2010/03/31(水) 23:07:36ID:???
>>508
return $this;
05114972010/04/01(木) 02:38:01ID:H0tjueQL
調べたところ、ロケールLC_ALLが"C"=7ビット文字列になっていることが原因のようでした
動作は教えていただいた方法で解決できたのですが、
「PHPで使われるロケール設定」はどこで設定したものが使われているのでしょうか?
テスト・本番の両環境で、
/etc/sysconfig/i18n
にてja_JP.UTF-8をロケールに設定しており、
シェル上のlocaleコマンドでも確認できますが、
それはPHP内では使われていないようです。
まともに動いていたテスト環境でも、
LC_CTYPE=en_US.UTF-8;等と設定されており、
これもどこに由来するのか分かりません。
「偶然うまく動いていた」に過ぎないようです・・
0512nobodyさん2010/04/01(木) 02:53:56ID:???
>>511
php.iniのマルチバイト関連と
Webサーバの実行ユーザの環境変数かな
0513nobodyさん2010/04/01(木) 03:12:48ID:???
php.iniは同じものを使っているので
apacheユーザの環境変数っぽいですね
デーモンの環境変数なんて考えたことなかったなぁ・・
0514nobodyさん2010/04/01(木) 10:33:51ID:???
foo: bar
baz
bna
test: hoge
hage: new
hoge

これらの文字を
foo: barbazbna
test: hoge
hage: newhoge
に置換したいのですが何か良い方法はないでしょうか?
0515nobodyさん2010/04/01(木) 10:34:49ID:???
もとの文字列はこうです

foo: bar
 baz
 bna
test: hoge
hage: new
 hoge
0516nobodyさん2010/04/01(木) 10:58:43ID:???
>>514
質問はIDを出しましょう
それとその問題が解けないなら、そもそもプログラミングをする意味が無いと思うよ
まず日本語で処理内容を書き出してみてからPHPに変換してみたら?
0517nobodyさん2010/04/01(木) 20:31:38ID:8+z5A+wF
require_onceで呼び出す際にget形式でパラメーターを渡すことは出来ますか?
0518nobodyさん2010/04/01(木) 20:37:49ID:???
http使って読み込むんなら出来る
でもなんかパラメータ渡したいだけなら、requireの前に変数を定義すればそのまま使えるよ
0519nobodyさん2010/04/01(木) 20:52:22ID:8+z5A+wF
でけた
ありがおう!
0520nobodyさん2010/04/01(木) 22:05:34ID:X1UHe/PE
XML/RSSを使ってRSS受信してサイトに表示するPHPを作ったのですが
ものすごく重いです。自作だとそんなものですか?

無料サービスのはサクサク動くのに、すごく微妙です。
0521nobodyさん2010/04/01(木) 22:18:00ID:???
>>520
自作したの?それとも有り物を設置しただけ?
自作ならソースみないとなんとも言えん
http://ideone.com/
0522nobodyさん2010/04/01(木) 22:28:41ID:X1UHe/PE
>>521
拾ってきたソースを加工したものです。
http://ideone.com/GyBDpmCC
0523nobodyさん2010/04/01(木) 22:46:20ID:???
>>516
うるせーよクズ
解決したわ
0524nobodyさん2010/04/01(木) 22:46:44ID:???
>>520
13個もURLを読み込んでるの?
だとするとページを13個開くのと一緒だから重くなるで

対策としては、一度ダウンロードしたRSSをキャッシュすればいいんだけど、
XML_RSSにキャッシュ機能はなさそうだから

$r =& new XML_RSS($rssurl);
の前に、自前でRSSのキャッシュチェックして、キャッシュがなければダウンロード、あればそのままキャッシュをfopen

まとめると

//URLに対して固有のキャッシュパスを設定
$cache_path = 'cache/' + md5($rssurl);
if (!file_exists($cache_path) || filemtime($cache_path) < time() - (60 * 60 * 6)) {
//キャッシュファイルが存在しない、もしくは6時間以上経過
$f = $fopen($rssurl);
}
else {
//キャッシュを使う
$f = fopen($cache_path);
}

$r =& new XML_RSS($f);

つかれた
0525nobodyさん2010/04/01(木) 22:50:18ID:???
これは一個ずつリクエストと取得を繰り返してるから重いんじゃねーの
マルチスレッド化した方が早くなる
0526nobodyさん2010/04/01(木) 23:00:45ID:???
DBのカラム名について聞きたいのですが、
cakephpに習って管理用カラムをidのauto_incrementとし、
英字のカテゴリ名と日本語のカテゴリ名を設定したいです。
以下のような感じにしようと思いましたが、keyが予約語なので、嫌な感じがします。
一般的に英字と日本語をひとつのテーブルに設定する場合、このようなカラム名にするといいよ
というのが、ありましたら教えて欲しいです。

create table category(
id int not null auto_increment primary key,
key varchar(10),
name varchar(20)
)
0527nobodyさん2010/04/01(木) 23:12:48ID:???
>>526
決まりはないし、PHPの質問でもないし、IDも出してないし
0528nobodyさん2010/04/01(木) 23:23:50ID:???
eng と jp
で
0529nobodyさん2010/04/01(木) 23:24:15ID:X1UHe/PE
>>524
(´;ω;`)$fopenのところだけ@にしましたが、動きません。

>>525
マルチスレッドですか。ぐぐって見ましたが、概要だけしかわかりませんでした。
ソースが置いてある所があればありがたいです。
0530nobodyさん2010/04/01(木) 23:34:18ID:???
>>529
泣きたいのはこっちだわw
0531nobodyさん2010/04/01(木) 23:38:44ID:X1UHe/PE
>>530
ありがとうございます。以下に変更しましたが、
$cache_path = 'cache/' + md5($rssurl);
の部分のキャッシュを作れていないようで、動作はしますが重いままです。

foreach ($rdf as $k=>$rssurl) {
//URLに対して固有のキャッシュパスを設定
$cache_path = 'cache/' + md5($rssurl);
if (!file_exists($cache_path) || filemtime($cache_path) < time() - (60 * 60 * 6)) {
//キャッシュファイルが存在しない、もしくは6時間以上経過
$r =& new XML_RSS($rssurl);
}
else {
//キャッシュを使う
$r =& new XML_RSS($cache_path);
}
if (PEAR::isError($r)) continue;
$r->parse();
if ($r->getChannelInfo()) $ch[$k] = $r->getChannelInfo();
$ch[$k]['items'] = $r->getItems();
}
usort($ch, "cmp");
0532nobodyさん2010/04/01(木) 23:45:14ID:???
そもそも設計が腐ってる

・キャッシュ表示とキャッシュ作成を別にする
・・キャッシュ作成は定時処理にする

・個々を取得するphpを作成する
・・ajaxで読み込むurlをリクエストし、表示する。
0533nobodyさん2010/04/01(木) 23:45:55ID:???
存在すればそのまま読み書きモードでファイルオープン、
存在しなければ新規作成したうえで読み書きモードでファイルオープンさせたいと思っています。

出来る限りスマートに記述するとしたらどういう方法をとるべきですか?
0534nobodyさん2010/04/01(木) 23:48:57ID:???
fopen($path,"w+")
0535nobodyさん2010/04/02(金) 00:09:05ID:cOHYaj0g
>>532
はい、初めて作るのでその通りです。
1から書くのは不可能なので、なんとか今の技術で作りたいです。
0536nobodyさん2010/04/02(金) 00:11:59ID:???
>>531
大丈夫かよ
cacheフォルダ作って、書き込み権限与えるだけだから
0537nobodyさん2010/04/02(金) 00:50:45ID:cOHYaj0g
>>536
はい、cacheフォルダ作りました。ローカルapacheでエラーになります。
Warning: fopen() expects at least 2 parameters, 1 given in
05385262010/04/02(金) 00:53:20ID:dljz4vKA
すいません。スレ間違えました
0539nobodyさん2010/04/02(金) 01:35:29ID:???
>>537
>>534
0540nobodyさん2010/04/02(金) 01:59:28ID:???
>>523
おめでとう。やればできるじゃない
0541nobodyさん2010/04/02(金) 02:10:49ID:cOHYaj0g
>>539
はい、w+モードにしました。
$f = fopen($cache_path,"w+"); を
$f = fopen($rssurl); の上に持ってきたりとか、いろいろしてみましたが
キャッシュを読み込まないです。

なぜかキャッシュフォルダじゃなく同じフォルダにキャシュらしきものが出来たので
無理矢理それをフォルダに詰めても動かないままです。
0542nobodyさん2010/04/02(金) 02:14:57ID:???
>>541
それキャッシュ読み込むところだから
w+の意味調べた?
>>524をそのまま使わないで参考程度にしなよ
0543nobodyさん2010/04/02(金) 03:08:21ID:???
エラーの意味すら知ろうとしないで答えを知りたがる
ダメだろこいつ
0544nobodyさん2010/04/02(金) 03:42:47ID:???
レンタルサーバーでPHPを使ってログファイルを作成してるんだが
そうやって生成したファイルは所有者が"99"とか"nobody"となっていて
パーミションが rw-r--r-- となっている。

まあこの状態でPHPから追記なり上書きなり自由に書き込めるわけだが
レンタルサーバーのコントロールパネル上から
「全ファイルの所有者をユーザーに変更する」
を実行すると所有者は確かに俺のアカウントになるんだがパーミションが
rw-r--r-- のままだから今度はPHPからそのファイルに書き込みができなく
なるんだよ。再度書き込みがしたければログファイルのパーミションを片っ端から
rw-r--rw- に変更していかなければならない。それも手動で(´・ω・`)

手動だから当然変更し忘れてしまうログファイルだって出てくるしそうなると
PHPスクリプトの動作に支障を来してしまう。

PHPでファイル生成時に最初から rw-r--rw- というパーミションのファイルを
生成できれば悩まずに済むんだけどそういう方法って無い?
みんなはこの問題に対してどう折り合いを付けている?
0545nobodyさん2010/04/02(金) 03:48:26ID:???
ログファイルの所有者変更なんてやらなきゃいいだろw
0546nobodyさん2010/04/02(金) 03:52:43ID:???
>>545
確かにログファイルの所有者変更なんてやる必要もないが、他のファイルの所有者変更をしたくなったとき
ログファイルも含めた全てのファイルが道連れに所有者変更されてしまうんだよ。
特定のファイルだけ選んで所有者変更できればこんな質問してない。
0547nobodyさん2010/04/02(金) 04:02:30ID:???
>>544
ttp://jp2.php.net/chmod
0548nobodyさん2010/04/02(金) 04:08:48ID:???
所有者の変更はchownな
05495412010/04/02(金) 06:21:13ID:cOHYaj0g
キャッシュファイルを作成できるようになりました!が、ファイルの中身が空になってしまいます。
そこで以下に変更したらエラーが出てしまいました。syntax error, unexpected T_ELSE
$rはRSSの中身だと思って、それを書き込むために$rをfopenの前に持ってこないと
ダメだと思ってif文の中に2つ$rを定義する文を入れたのですが・・・考え方として間違っていますか?

foreach ($rdf as $k=>$rssurl) {
//URLに対して固有のキャッシュパスを設定
$cache_path = 'cache/'.md5($rssurl);
if (!file_exists($cache_path) || filemtime($cache_path) < time() - (60 * 60 * 6)) {
//キャッシュファイルが存在しない、もしくは6時間以上経過
$f = fopen($rssurl);
$r =& new XML_RSS($f);
if (PEAR::isError($r)) continue;
$r->parse();
if ($r->getChannelInfo()) $ch[$k] = $r->getChannelInfo();
$ch[$k]['items'] = $r->getItems();
}
$f2 = fopen($cache_path,"w+");
fputs($f, $r);
fclose($f);
}
else {
//キャッシュを使う
$f = fopen($cache_path);
$r =& new XML_RSS($f);
if (PEAR::isError($r)) continue;
$r->parse();
if ($r->getChannelInfo()) $ch[$k] = $r->getChannelInfo();
$ch[$k]['items'] = $r->getItems();
}
usort($ch, "cmp");
}
0550nobodyさん2010/04/02(金) 09:18:47ID:BmqWcFAu
学校の休講情報メール通知プログラムを作っています。

1時間ごとにcronで休講情報発表サイトを巡回し、条件にマッチした場合指定のアドレスに休講お知らせメールを送ります。
この時、一度お知らせメールを送った後は、24時間たたないと同じ条件がマッチしてもメールを送らないようにしたいのです。

このような場合、PHP,mySQL,Cronの設定、どの部分でどのように制御すればよいのでしょうか?
ヒントだけでも教えてもらえればありがたいです。

キーワードをサイト情報とマッチさせてメールを送るスクリプトは下記です。
http://www.imagecheese.com/gallery/jpg.jpg

環境:
さくらレンタルサーバ:スタンダード PHP 5.2.12
Cronの設定期間は1時間ごと:
サーバはmySQL
CakePHPで開発です。
0551nobodyさん2010/04/02(金) 10:09:56ID:???
cakeはこっちで
http://pc11.2ch.net/test/read.cgi/php/1268874059/

メールを送った相手と、送る条件と、送信時刻
この3つが鍵なわけだからそれを管理すればいいのでは?
0552nobodyさん2010/04/02(金) 10:16:53ID:???
>>550
メール送付した時にDBに送付日時を入れておいて
次のメール送付時に前回メールの送付日時を確認して24時間たってなければ送付しなければいい

余談だは24時間という計算はDBにやらせたほうが楽
(now() - INTERVAL 1 DAY とか)
05535502010/04/02(金) 10:41:15ID:BmqWcFAu
>>551

Cakeのスレの話題かちょっと悩みました。。

>>552

ありがとうございます。 
現在は

【usersテーブル】 id, address, hash
【keywordsテーブル】 id,name,user_id

といったデータベース構成なので、keywordsテーブルに mail_sent_date というフィールドを
追加するといった形で試してみようかと思います。
0554nobodyさん2010/04/02(金) 12:46:44ID:???
>>547-548
ダメだorz・・・
chownもchmodも効かない・・・

最初にchownでファイル所有者を自分に変更して、そのあとにchmodで0646に変えてやろうと思ったんだが・・・

たぶんレンタルサーバーの管理人以外はchownできないような仕組みになってるんじゃないかな?
そしてchownできない限りchmodも無力化されてしまうと・・・
0555nobodyさん2010/04/02(金) 12:51:24ID:???
レンタルサーバー屋に聞くべき。
超能力者なら分かるかもしれないけど。
0556nobodyさん2010/04/02(金) 12:57:28ID:???
いい加減ID出せやクズが
0557nobodyさん2010/04/02(金) 13:01:17ID:???
こないだもこのネタあったな
0558nobodyさん2010/04/02(金) 13:18:04ID:H+Jv7Iis
【OS名】win
【PHPのバージョン】php5.26

全文の中から、最初の一致分「あいうえお」だけ削除したいのです。

$hoge = "あいうえお、かきくけこ、さしすせそ、たちつてと、あいうえお、かきくけこ";
$aiueo = "あいうえお";
$date = str_replace($aiueo,"",$hoge);

これだと、全ての「あいうえお」が消えてしまいますので、

$aiueo = "あいうえお";
$sakujo = "^.*?$aiueo";

このような最短マッチみたいなのを使って削除したらいんだと思いますが、
どうやればいいのか分かりません。教えて下さい。お願い致します。
0559nobodyさん2010/04/02(金) 13:24:43ID:???
preg_replaceを使うか、preg_matchでマッチした場合のみ文字数分を先頭から切ればよろし
0560nobodyさん2010/04/02(金) 13:27:11ID:???
preg_replace("/$aiueo/","",$hoge,1);
0561nobodyさん2010/04/02(金) 13:51:33ID:???
>>558
【PHPのバージョン】php5.26
【PHPのバージョン】php5.26
【PHPのバージョン】php5.26
【PHPのバージョン】php5.26
【PHPのバージョン】php5.26
【PHPのバージョン】php5.26
0562nobodyさん2010/04/02(金) 15:39:52ID:H+Jv7Iis
すみません。上の例だとうまくいくのですが、
僕がやりたいパターンの場合だとうまくいきません。

$hoge = "あいうえお---かきくけこ---さしすせそ---あいうえお---かきくけこ---さしすせそ"

みたいなランダムな文章になってて、

$pattern = "^.*?---";
mb_ereg($pattern,$hoge,$honbun);

を使って、最初の「---」までを抽出しています。
この抜き出した文章を使って

$hoge = preg_replace("/$honbun[0]/","",$hoge,1);

というプロセスを経ると、全く抜けなくなります。
forの中で実行してるので、無限ループに陥って困ってます(汗)
原因を教えて頂けませんでしょうか。
0563nobodyさん2010/04/02(金) 15:43:09ID:???
for文が終了してないからじゃないの?
0564nobodyさん2010/04/02(金) 15:48:48ID:H+Jv7Iis
すみません。forじゃなくて、whileでした。
吐き出すものがずっと同じものなので、抜けないのです。

例を上げますと

hoge ="あえ@えれ---れれあえ@れ---あえ@えれ---あえい@れえれ---えあら@れえ"

のようになってて、@マークがなくなるとwhileを抜けるようにしてるのですが、
最初の「---」までが抜けていないので、@マークが減らずに無限ループに陥るのです。

上の例の$honbun[0]は確実に、抜き出したい文章を抜き出しているのですが、
教えて頂いた構文に入れると、その該当する文章が抜けないのです。
0565nobodyさん2010/04/02(金) 16:07:46ID:???
whileの条件はなんなの?
テストしてるソース張り付けられない?
■ このスレッドは過去ログ倉庫に格納されています