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

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

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2008/03/16(日) 17:23:27ID:???
まず読め→【PHP マニュアル】http://www.php.net/manual/ja/
PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。
過去スレ、関連スレ、FAQなどは>>2-10辺り

◆前スレ
【PHP】下らねぇ質問はここに書き込みやがれ 65
http://pc11.2ch.net/test/read.cgi/php/1203854597/

◆質問する時の注意
・ サーバーのOS(Linux、Windows他)、WebサーバーとPHPの種類やバージョン等を必ず明記すること。
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
・偽者防止に必ずIDを表示(メール欄に何も記述しない)、若しくはトリップをつける事。

◆質問後の注意
・偽者防止に必ずIDを表示(メール欄に何も記述しない)、若しくは質問時のトリップをつける事。
・2回目以降は最初に質問した際のレス番号を名前欄に入れること。
・解決しなくても回答をもらった場合はお礼を言うこと。
 (荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)

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

【その他諸注意】
・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
・SQLについての質問はデータベース板(PCカテゴリ)の各スレで
0619nobodyさん2008/04/02(水) 21:17:01ID:???
>>611
何が言いたいのか未だによく分からんがとりあえず配列をくずして1行にして抜き出せば?
0620nobodyさん2008/04/02(水) 21:36:11ID:???
>>618
それがPHPクォリティ
0621nobodyさん2008/04/02(水) 22:13:20ID:XY6vuSiH
>>619
実は一行にした場合、スマートにA点B点間を切り取る書き方がわかりません
またA点B点になるものが20個くらいつながっていますので
0622nobodyさん2008/04/02(水) 22:20:18ID:???
>>621
とりあえずコード出してみろ
0623nobodyさん2008/04/02(水) 22:51:28ID:njUPskxT
>>621

$txt = implode("", $array);

$j = 0;
$str = "";
for ($i = 0; $i < strlen($txt); $i++) {
$string = substr($txt, $i, 1);
if ($str == $string) {
$data[$j] .= $string;
} else {
$j++;
$data[$j] = $string;
}

$str = $string;
}

$data に文字列が固まって入っている。 これでいいんじゃない?
0624nobodyさん2008/04/02(水) 23:09:23ID:???
>>621
そもそも何を取り出したいのか分からない
0625nobodyさん2008/04/03(木) 04:39:25ID:NUyg6E0X
質問です。

大まかに5つぐらいにカテゴリわけできるデータがあります。
すべて一つのファイルにまとめてそれを読み書きするのと
カテゴリごとに5ファイルにわけて読み書きするのではどちらが早いでしょうか?

例えば1カテゴリあたり1MBだしたらどうなんでしょう
マイクロ秒単位ぐらいしかかわらないとかいうかんじなんでしょうか


0626nobodyさん2008/04/03(木) 04:47:03ID:???
関数呼び出しのオーバヘッドを考慮すれば
1つのファイルのほうが早いに決まってる
ベンチとらないと正確な数値はわからないが気にする必要はないと思うけど
ただ管理するファイル数が多くなると凡ミスで1つのファイルが狂うと
他のファイルにも影響が出る可能性があるからデータは1つにまとめたほうがいい
DBを利用できるならDBを使ったほうが早いし管理も楽
0627nobodyさん2008/04/03(木) 05:27:31ID:???
>>626
>関数呼び出しのオーバヘッドを考慮すれば
>1つのファイルのほうが早いに決まってる

今だに、requireやincludeを使っているのだろうかw
0628nobodyさん2008/04/03(木) 06:45:56ID:cpVDKaLE
ユーザ一人一人にページが持てて
ミクシィのコミュニティのようなのを作りたいのですが
なにを勉強すればいいのでしょうか?
0629nobodyさん2008/04/03(木) 07:01:00ID:???
>>626
ありがとうございます
1つのファイルでやってみます

>>627
includeで呼び出しますが何かまずいのでしょうか?
06306252008/04/03(木) 07:02:00ID:NUyg6E0X

625です
0631nobodyさん2008/04/03(木) 08:29:48ID:???
>>625
気にしなくていい
>>627がアホなだけ
関数を含め何かをを呼び出すということはなんかしらオーバヘッドが発生している
requireやincludeに限ったことではない
0632nobodyさん2008/04/03(木) 09:07:40ID:???
>今だに、requireやincludeを使っているのだろうかw

使わない方法があるなら俺にもぜひ教えてもらいたい。
たまに他人のソース見て疑問に思うんだが、
includeやrequireの形跡はないのに、ソース中に見当たらない変数を使用してたりする。
(echo $hoge;とだけ書いてるのにちゃんと$hoge;が表示されてる。$hogeがどこで定義されてるかは不明。)
これってどういう方法使ってやっているの?
importでもないし、namespaceなんかもないし・・・
06336212008/04/03(木) 09:40:11ID:2nubDXXG
>>623
ニュアンスはだいたいわかるのですが
欲しい形としては、ループする文字列だけ格納ではなく(AAAとか)
-----
<h2>ああああ</h2><p>ああああああああ</p><br /><hr /><h2>そそそ</h2><p>ととと</p><br /><hr />
<h2>ててて</h2><p>いいい</p><br /><hr />....
-----

となっているものを いらないところをスルーして
$data[ 1 ] => "<p>ああああああああ</p>"
$data[ 2 ] => "<p>ととと</p>"
$data[ 3 ] => "<p>いいい</p>"
と格納できれば・・・。
(この例だと <p> </p>という二つの文字列の間、および文字列そのものを含んだ部分の切り取り)
0634nobodyさん2008/04/03(木) 09:47:21ID:???
$string = "<h2>ああああ</h2><p>ああああああああ</p><br /><hr /><h2>そそそ</h2><p>ととと</p><br /><hr />
<h2>ててて</h2><p>いいい</p><br /><hr />";
preg_match_all("|<p>(.*?)</p>|si", $string, $matchs);
print_r($matchs);
0635nobodyさん2008/04/03(木) 09:57:16ID:???
性器表現 db insert into (*)
0636nobodyさん2008/04/03(木) 12:01:29ID:???
性器表現はこうだろw ((i))
0637nobodyさん2008/04/03(木) 12:50:10ID:???
>>631
自分が無知なのを棚に挙げて、人をアホ扱いですかw
どんだけスイート脳なんだよ。

>>632
__autoloadでぐぐれ
0638nobodyさん2008/04/03(木) 13:00:44ID:2nubDXXG
>>634
ばっちりでした。マーベラスです。ありがとうございました。
0639nobodyさん2008/04/03(木) 13:26:53ID:???
>>627

なんで、オーバーヘッドの話から、
requireやincludeの話になってんの?w

わずかな差しかないが、__autoloadを使ったほうが、
クラスの存在のチェックなどをするぶん、
requireやincludeよりも遅いが。
0640nobodyさん2008/04/03(木) 13:53:40ID:???
そもそも>>625の質問はデータファイルのことだろ?
クラスファイルは無関係だろが
0641nobodyさん2008/04/03(木) 14:11:22ID:???
で結局どうなの
ファイルの容量は気にしなくていいってことなのか

でもファイルがでかいならオーバーヘッドうんぬんより分割した方がいいと思うが
06426262008/04/03(木) 14:13:06ID:???
読みがfileなりfreadなりで書きがfwriteなりfile_put_contentsの話でしょ?
1つのファイルに書き込むより5つのファイルにに書き込む方がオーバヘッドが大きい
書き込みの際にはDBのようなトランザクション処理ができないので
1つのファイルに書き込み失敗するとデータの整合性が狂うしロールバックもできない
(どれか失敗したら全てのファイルのデータ数を数えて少ないとこにあわせて末尾から削除とかもできるが面倒)
よって1つのファイルにデータをまとめて1度だけ書き込みを行ったほうがよい
ということを言ったつもりだったんだけど
0643nobodyさん2008/04/03(木) 14:20:07ID:???
で、結局管理データが大きければDB使えってことでFAだな。
0644nobodyさん2008/04/03(木) 15:21:07ID:BSwpnKE2
サーバーで自動巡回するクローラーのような
PHPまたはCGIみたいなのありませんか?

自分のホームページがあまりにもアクセス数が少ないので、
自動でカウンターだけでも上げて気休めしてみよーかなと。
0645nobodyさん2008/04/03(木) 15:24:34ID:???
そんなもんブラウザのオートリロードじゃダメなのか?
0646nobodyさん2008/04/03(木) 15:35:09ID:???
>>644
cronで呼び出せば?
06476442008/04/03(木) 15:37:18ID:???
レスありがとうございます。
パソコンを立ち上げなくても、サーバー側で自動でアクセスしてみたいのです。
cronというのは どんな感じですか?
0648nobodyさん2008/04/03(木) 15:41:38ID:???
$count = time(); // 1207200000 ほど引いたほうがいいかも
1日に86400ほど増える。
0649nobodyさん2008/04/03(木) 15:44:02ID:???
カウンターなんて自分で設定したらいいだろ
レンタルカウンターだとしたら無駄に負荷かかって迷惑だからやめとけ
0650nobodyさん2008/04/03(木) 15:49:06ID:???
まさにスレタイにピッタリの質問。
0651nobodyさん2008/04/03(木) 16:13:39ID:???
>>647
まずググレ。
0652nobodyさん2008/04/03(木) 16:14:02ID:???
ファイル管理だったら複数ファイルに分けるべきだろ
0653nobodyさん2008/04/03(木) 17:11:38ID:2KfD0E2x
質問させてください
$test="テスト";
print<<<EOF
{$test}
EOF;
以上を実行したら、「テスト」が出力されると思いますが、
$testの中身をfunction関数を実行した結果にしたいと思います

サンプルとして以下のようなfunctionをつくり、
function testFunc($i){
if($i==1){return "結果1";}else{return "結果2";}
}
print<<<EOF
{$testFunc(1)}
EOF;

などとしてみたのですが、うまくいきません(「結果1」と表示させたい)
どうしたらいいんでしょう? ご回答よろしくお願いします
0654nobodyさん2008/04/03(木) 17:25:55ID:???
>>653
$test=testFunc(1);
print<<<EOF
{$test}
EOF;
0655nobodyさん2008/04/03(木) 17:42:20ID:???
>>653
$ が { のすぐ後に続く場合にのみ認識されます
ってとこ見ると可変関数しかないんでないかなー。
0656nobodyさん2008/04/03(木) 17:48:38ID:2KfD0E2x
>>653-654
ありがとうございます
{$test(1)}みたいに、引数を持たせることは出来ないんでしょうか? 最終的には
for($i=0;$i<10;$i++){
print <<<EOF
 {$test($i)}
EOF;
}
みたいな感じで動的に変化する処理を考えてたので…… 弱ったなぁ
根本的にやり直ししかないのかな、、
0657nobodyさん2008/04/03(木) 17:58:22ID:???
>>656
そこだけヒアドキュメントやめるなりすればいいだけだと思うが
0658nobodyさん2008/04/03(木) 17:59:30ID:???
ここ見てると、やたらヒアドキュメントが好きな人が多いけど、なんで??
0659nobodyさん2008/04/03(木) 18:12:19ID:???
>>655
というか可変関数で出力できないでしょ
ヒアドキュメント内は
0660nobodyさん2008/04/03(木) 18:15:15ID:???
>>659
ところがどっこい{$hoge(1)}で出来る。
0661nobodyさん2008/04/03(木) 18:17:54ID:???
ヒアドキュメントなんだし他に何行もあるんだろ

>>656
for($i=0;$i<10;$i++){
if($i==1){$test = "結果1";}else{$test = "結果2";}
print testFunc($test);
}

function testFunc($test){
return <<<EOF
{$test}
EOF;
}

よく分からんがこんな感じでどうよ?
06626562008/04/03(木) 18:27:04ID:2KfD0E2x
みなさんすみません
>>661さんのと可変関数ていうのを調べて、トライしてみます
確かに最悪ヒアドキュメントやめればいいんですよね
ソースが汚くなりそうで気が引けるんですが…

ともかくありがとう またよろしくお願いします
0663nobodyさん2008/04/03(木) 18:28:29ID:???
まずマニュアルを読め
0664nobodyさん2008/04/03(木) 18:45:05ID:???
汚くなるのは作り方が悪いだけだろ
0665nobodyさん2008/04/03(木) 18:45:32ID:???
>>660
ひとまずphp4では出来ないな
php5限定か
0666nobodyさん2008/04/03(木) 18:49:15ID:???
>>660
{$hoge(1)}って
どういう意味になるの?
変数とユーザー関数混じっているんだけど
0667nobodyさん2008/04/03(木) 18:52:34ID:???
>>666
それはググレばあっという間に解決するぞ
0668nobodyさん2008/04/03(木) 19:31:29ID:???
可変関数はis_function_exists()してからcall_user_func()で呼んでるなぁ。
0669nobodyさん2008/04/03(木) 20:12:51ID:???
個人的にヒアドキュメントを使ったソースの方が汚い気がする。
   <<<AAA
AAA; ←こいつインデントできねーし
06706472008/04/03(木) 20:19:44ID:BSwpnKE2
ありがとうございます。
cronというのは、UNIX(?)で設定するということですよね!?

たとえばPHPファイルを一つ置いて、勝手に巡回するとかできないでしょうか?
0671nobodyさん2008/04/03(木) 20:28:41ID:???
>>670
WebCronでぐぐるといい。
勝手に指定したページにアクセスしてくれる。
0672nobodyさん2008/04/03(木) 20:49:27ID:4LgtZJ5T
Authってなんて読むの?
0673nobodyさん2008/04/03(木) 20:52:04ID:???
スレと関係ある質問をしろ
0674nobodyさん2008/04/03(木) 20:55:10ID:4LgtZJ5T
>>673
PEARとかでもAuthってあるから聞いてみた。
ぐぐったり辞書見ても書いてないんだもの。

サポートセンターに電話する時はずかちい
0675nobodyさん2008/04/03(木) 20:58:13ID:???
単語でわからんかったら
Authとは
とかそんな感じで検索すればだいたい出る
0676nobodyさん2008/04/03(木) 21:00:59ID:???
またかよ
0677nobodyさん2008/04/03(木) 21:33:03ID:4LgtZJ5T
>>675
出ませんねぇ…
0678nobodyさん2008/04/03(木) 21:35:44ID:???
>>674
お前は何を言ってるんだ
0679nobodyさん2008/04/03(木) 21:36:38ID:???
おめーはinformationがinfoとかになってても「わかりません」とか言うのか
0680nobodyさん2008/04/03(木) 21:40:59ID:???
「Authとは」でググっても
goo辞書で「Auth」で英和辞書引いても
そのものずばりが出てくるじゃねーか。嘘吐いて他人の手間増やして楽しい?
0681nobodyさん2008/04/03(木) 22:58:11ID:YxD7y5X8
for($i=0;$i<5;$i++){

}
0682nobodyさん2008/04/03(木) 22:59:43ID:YxD7y5X8
すみません、間違って途中で押してしまいました・・・。

for($i=0;$i<5;$i++){
echo $i;
}
こういうforで出力する時、表示は「01234」となりますが、
カウントダウンのように、0の次は1、1の次は2など、
順番に表示させることは出来ないのでしょうか?
0683nobodyさん2008/04/03(木) 23:10:10ID:???
できまsn
0684nobodyさん2008/04/03(木) 23:43:08ID:???
じゃばすくりぷとって知ってる?
0685nobodyさん2008/04/03(木) 23:43:16ID:???
>>682
そういうのがやりたいならJavaScriptかなー
06866822008/04/03(木) 23:54:43ID:???
>>683-685
Javascriptはすでにやっているので、他の方法を探してみました。
無理だと言うことですね。他の方法を探してみます。
0687nobodyさん2008/04/04(金) 00:00:01ID:???
>>682
43210って出したいって意味なら出来る
0688nobodyさん2008/04/04(金) 00:05:08ID:???
JavaScriptを使わないってことはページを手動で更新するってことだ。
それでいいならクッキーを利用して5の次4,3,2,1,0なんて表示は出来るがな。
0689nobodyさん2008/04/04(金) 00:09:15ID:???
>>686

>Javascriptはすでにやっているので、他の方法を探してみました。

サーバサイドとクライアントサイドがごっちゃになってないかな?
て思った。
06906822008/04/04(金) 00:14:46ID:???
>>689
サーバサイドでやりたいので、PHPを試しました。

ですが、やっぱりJavascriptしか無理っぽいですね・・。
タイマーみたいなのが作りたいので、ストップ処理も入るし、
そうなると、forとsleepを使っても出来ないみたいです。
0691nobodyさん2008/04/04(金) 00:28:43ID:???
>>669
かなり目立つように書いてカタマリに見える工夫するかなあ。
エスケープするときなんかはイチイチ考えなくていいしキレイ(な気がする)


-----
echo "<h1 id=\"header\">{$a}</h1>" ;

-----
echo '<h1 id="header">'.$a.'</h1>' ;

-----
echo <<<__________D_O_C__________

<h1 id="header">{$a}</h1>

__________D_O_C__________;

0692nobodyさん2008/04/04(金) 00:45:45ID:???
>>690
違いは分かってるよ!!!と主張してるみたいなので方法論。

header()でrefreshすれば近いことはできるんじゃ?

0693nobodyさん2008/04/04(金) 00:51:41ID:f6Xk8xc+
文字列である'$name'を、ローカルにある変数$nameの値で置き換えたいのですが
どのような方法があるでしょうか。

↓例えばこんな風になってて
$string = '$name';
$name = 'MyName';

$stringを使って"MyName"と表示させたいのです。
すぐ思いつくのはevalですが、文のみということみたいなので(?)
無理やりあてはめて書いてみたのが

echo eval("return $string;"); //MyNameと表示される

でもこれだとなんか変というか・・・(コードの見た目が)
他により一般的な書き方があったらおしえてください。
0694nobodyさん2008/04/04(金) 01:04:03ID:???
>>690
>forとsleepを使っても出来ない
これは目的のものがJavaScriptでは出来なくて諦めたってことだよな?

断言してもいいが、やり方が間違ってるだけで出来ないことは絶対ない。
コードの一部を載せるんじゃなく、最終目的を明確にした上でweb制作板のJavaScriptスレに質問してみな。
06956932008/04/04(金) 01:34:35ID:f6Xk8xc+
自己レスです。

$string = '$name';
$name = 'MyName';
eval("\$string = \"$string\";");
echo $string; //MyNameと表示される

マニュアルに載っていた例ですが、実際のコードの前後の兼ね合いから
案外すっきりいけるようでしたので、これでいってみますm(_ _)m
0696nobodyさん2008/04/04(金) 11:09:35ID:???
WebCronってタイムアウトしそうな重いページだと、リトライしてくれるのかしら・・・

>690
サーバーサイドの時点で、ページ遷移は絶対必要だから
タイマーの部分だけiframeとrefreshで回転させて・・・
0697nobodyさん2008/04/04(金) 11:22:02ID:???
無理にサーバサイドでやる理由がわからんな・・。
0698nobodyさん2008/04/04(金) 13:23:02ID:???
>>76
安易にパーミッションを777にするよりも、
まずディレクトリーのオーナをかえて、必要最低限度のパーミッションにした方がいいよ。
0699nobodyさん2008/04/04(金) 14:09:44ID:???
2週間以上前のレスにレス返すなよw
0700nobodyさん2008/04/04(金) 14:25:36ID:???
ごめん、10日近く京都に納品で環境構築していたから、
その間レスできなかった。やめた方がいい?まだ、気になるレスがあるんだが・・・
0701nobodyさん2008/04/04(金) 14:27:06ID:???
好きにしろよ
本人は見てるか分からんが、参考になる人はいるだろうし
0702nobodyさん2008/04/04(金) 14:27:16ID:???
>>700
(屮゚0゚)屮 カモーン
0703nobodyさん2008/04/04(金) 14:34:51ID:???
http://bananavi.jp/shizuoka/mobile/bbs/bbs.php?area_id=3

こんなPHP探してるんですが何処で配布されてますか?
0704nobodyさん2008/04/04(金) 14:52:44ID:???
Shift_JISで書いているファイルにShift_JISで書いたファイルをincludeしてechoすると
文字化けしてしまいます。
エンコードが違うならわかりますがなんででしょうか?
0705nobodyさん2008/04/04(金) 14:53:14ID:???
エンコードが違います
07065392008/04/04(金) 14:56:39ID:???
恵まれない子に愛のレスを。。。
0707nobodyさん2008/04/04(金) 14:58:19ID:???
>>704
スクリプトの内部エンコードが違う。
残念だけど、PHP を Shift-JIS で書くのはおススメしない。UTF8 か EUC-JP を使うべし。
http://manual.xwd.jp/ref.mbstring.html
07087042008/04/04(金) 15:05:46ID:???
>>707
なるほど
ありがとうございます
0709nobodyさん2008/04/04(金) 15:10:15ID:mEsRuTBT
プロジェクトに必要なライブラリってどこにどんな感じに定義してますか?
必要としているPEARのパッケージのリストとか
0710nobodyさん2008/04/04(金) 15:59:03ID:???
シフトJISだからだ
0711nobodyさん2008/04/04(金) 18:21:35ID:???
所詮、このスレの住人はこの程度か
どうもありがとうございました
0712nobodyさん2008/04/04(金) 18:38:04ID:???
中二乙
0713nobodyさん2008/04/04(金) 19:42:09ID:???
すまん。俺中一だwww
0714nobodyさん2008/04/04(金) 19:44:20ID:YqX/EKLM
phpからmysqlにDELETEのsql文を投げて、実行された行数を知りたいです
それが一発でわかる関数などあるでしょうか?
理想としては、以下の処理が出来るようにしたいです。
1)1回目の削除実行→3行削除されたとわかる(「3件削除しました」とメッセージ)
2)2回目の削除実行→すでに削除済みなので0(行)が返ってくる
3)「(0だから)対応するデータはありません」などとアラート表示
よろしくお願いします
0715nobodyさん2008/04/04(金) 20:12:09ID:???
>>714
http://jp2.php.net/manual/ja/function.mysql-affected-rows.php でどう?

あと、delete で where条件を指定しない(全削除)の場合は、1=1みたいなダミーの
条件文が必要だけど、PDOを使うと自動的に付けてくれるとか、聞いたことがある。

0716nobodyさん2008/04/04(金) 20:14:10ID:???
>>715 補足
ダミーの条件が必要らしいのは、行数を知りたい場合だけ。
消すだけなら要らない。
0717nobodyさん2008/04/04(金) 20:56:03ID:???
>>682
それは毎回文字が消えて次の文字が表示されなきゃだめなわけ?

ただ順番に文字を表示するだけなら

ob_flush();
flush();

使えばいくない?
0718nobodyさん2008/04/04(金) 21:49:14ID:???
任意のウェブサイトのphpファイルのソースを見る方法って存在しますか?
■ このスレッドは過去ログ倉庫に格納されています