トップページ⇒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等)・フレームワークは各該当スレへ
0446nobodyさん2010/03/29(月) 15:12:34ID:???
知るかバカ
0447nobodyさん2010/03/29(月) 17:20:21ID:1Ehd5H1b
throwの挙動なんですが、returnと同じでthrowしたらその関数はそこで終了するということでよろしいですか?
0448nobodyさん2010/03/29(月) 17:27:58ID:???
せやで!
04494472010/03/29(月) 17:44:03ID:???
ありがとうー
0450nobodyさん2010/03/29(月) 18:12:06ID:???
throw new Exception();
return;

と書いてた俺に一言
0451nobodyさん2010/03/29(月) 18:16:46ID:???
(;゚Ж゚;)ブホォ
0452nobodyさん2010/03/29(月) 18:16:47ID:???
読みやすくていいと思います・・
0453nobodyさん2010/03/29(月) 19:25:19ID:???
いまどきのまともなコンパイル型の処理系なら、
こんとろーるふろーがそこまで行かないぞって警告くらい出してくれたろうけどなぁ。
0454nobodyさん2010/03/29(月) 19:25:45ID:MUiCUZA9
【OS名】linux
【PHPのバージョン】php5.26
【連携ソフトウェア】特になし
【質問内容】

ブログのコメント機能に似たものをPHPで実装しています。

これを自分のサイトの各ページに読み込ませることで擬似的にブログの様に閲覧者が各ページで
自分の意見を自由に投稿できるようになります。

そこで疑問なのですが、自動的に生成するログファイルの命名規則をどう扱うべきかで悩んでいます。
各ページ毎にログは独立させるつもりなので、ページが複数あれば必然的にログファイルも複数になります。
メンテナンスのことを考えるとログファイル一式は一カ所のフォルダに保存しておいた方がいいと思います。

たとえば次のようなページ構成の場合・・・

/public_html/FolderA/index_1.html
              index_2.html
        /FolderB/FolderC/index_1.html

3つのページにコメントスクリプトを埋め込むので合計3つのログファイルが生成されるわけですが

/public_html/log/

フォルダに3つのログファイルを保存するとき、ログファイルそれぞれのファイル名はどういう規則で
自動生成するべきでしょうか?ちなみにlogフォルダの下にはフォルダは一切作らないでおきたいと
思っています。またメンテナンス性を高めるためログファイルの名前はランダムな文字列ではなく
どのページに関するものか人目で判別できるようなものにしたいと思っています。
0455nobodyさん2010/03/29(月) 19:29:39ID:???
お前の都合に合わせろよ
0456nobodyさん2010/03/29(月) 22:39:29ID:???
PHPのランダム表示についての質問です。
ランダム表示をしてさらに表示頻度を設定したいのですが、どのようにすればいいか教えてください。

<?php
$rndtxt[0] = 'テキスト1';
$rndtxt[1] = 'テキスト2';
$rndtxt[2] = 'テキスト3';
$length = count($rndtxt) - 1;
srand( (double)microtime()*1000000 );
$num=round( rand(0,$length) );
print("$rndtxt[$num]");
?>

現在は上のPHPで広告をランダム表示しています。
これのテキスト1を60%、テキスト2を20%、テキスト3を20%の割合で表示させたいです。

どのように書けばそのように設定できるのでしょうか?
0457nobodyさん2010/03/29(月) 22:48:10ID:???
>>456
$weight = array(0, 0, 0, 0, 0, 0, 1, 1, 2, 2);
$num = $weight[round(rand(0, count($weight) - 1))];
print("$rndtxt[$num]");

それか0から9のランダムな整数出して
if ($num < 6) {
$rndtxt[0];
}
else if ($num < 8) {
$rndtxt[1];
}
..

とか
広告をランダムに出したいっていう質問かなり多いなw
0458nobodyさん2010/03/29(月) 22:55:14ID:???
>>457
えっ11%で表示したくなったらどうすんの?100個の要素作るの?w
0459nobodyさん2010/03/29(月) 23:02:25ID:???
>>458
スレタイ
0460nobodyさん2010/03/29(月) 23:03:19ID:???
>>457
ありがとうございます。
完成型は下を単純に入れ換えてこうなるのですか?

<?php
$rndtxt[0] = 'テキスト1';
$rndtxt[1] = 'テキスト2';
$rndtxt[2] = 'テキスト3';
$weight = array(0, 0, 0, 0, 0, 0, 1, 1, 2, 2);
$num = $weight[round(rand(0, count($weight) - 1))];
print("$rndtxt[$num]");
?>

<?php
$rndtxt[0] = 'テキスト1';
$rndtxt[1] = 'テキスト2';
$rndtxt[2] = 'テキスト3';
if ($num < 6) {
$rndtxt[0];
}
else if ($num < 8) {
$rndtxt[1];
}
..
?>
0461nobodyさん2010/03/29(月) 23:10:18ID:???
>>460
上のほうはたぶんそんなんでいけると思うけど、
下の方は別のやり方で

$num = rand(1, 10);//分かりやすく1から10の整数
if ($num <= 6) {//1から6の6割の確立
print $rndtxt[0];
}
else if ($num <= 8) {//7から8の2割の確立
print $rndtxt[1];
}
else {//9から10の2割の確立
print $rndtxt[2];
}
0462nobodyさん2010/03/30(火) 00:25:21ID:???
>>461
丁寧にありがとうございます。
0463nobodyさん2010/03/30(火) 01:48:09ID:vJQ1xggI
クラスオブジェクトを生成するとき、条件に合致しない場合はオブジェクトを生成せずnullを返したいと思っています。

たとえば、MyClassというクラスを作製する際初期値numberが正の値のときは

if ( $obj = new MyClass(5) )
{
・・・
}

普通にオブジェクトを生成し、負の値の時は

if ( $obj = new MyClass(-3) )
{
・・・
}

オブジェクトを生成せずnullを返すようなプログラムを組みたいです。

そういうクラスを作製することは可能でしょうか?
もし可能だとしたら(おそらく__construct($number)に)どう記述すれば実現できますか?
0464nobodyさん2010/03/30(火) 02:00:03ID:???
オブジェクト生成では返り値指定できないでしょ
0465nobodyさん2010/03/30(火) 02:21:32ID:vJQ1xggI
返り値は指定できませんか・・・

代わりに「条件を満たさないときはオブジェクトを生成しない(=newに失敗する)」ようにはできないでしょうか?
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
■ このスレッドは過去ログ倉庫に格納されています