【PHP】下らねぇ質問はここに書き込みやがれ 66
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2008/03/16(日) 17:23:27ID:???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カテゴリ)の各スレで
0621nobodyさん
2008/04/02(水) 22:13:20ID:XY6vuSiH実は一行にした場合、スマートにA点B点間を切り取る書き方がわかりません
またA点B点になるものが20個くらいつながっていますので
0623nobodyさん
2008/04/02(水) 22:51:28ID:njUPskxT$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 に文字列が固まって入っている。 これでいいんじゃない?
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:???>関数呼び出しのオーバヘッドを考慮すれば
>1つのファイルのほうが早いに決まってる
今だに、requireやincludeを使っているのだろうかw
0628nobodyさん
2008/04/03(木) 06:45:56ID:cpVDKaLEミクシィのコミュニティのようなのを作りたいのですが
なにを勉強すればいいのでしょうか?
0629nobodyさん
2008/04/03(木) 07:01:00ID:???ありがとうございます
1つのファイルでやってみます
>>627
includeで呼び出しますが何かまずいのでしょうか?
0630625
2008/04/03(木) 07:02:00ID:NUyg6E0X625です
0631nobodyさん
2008/04/03(木) 08:29:48ID:???気にしなくていい
>>627がアホなだけ
関数を含め何かをを呼び出すということはなんかしらオーバヘッドが発生している
requireやincludeに限ったことではない
0632nobodyさん
2008/04/03(木) 09:07:40ID:???使わない方法があるなら俺にもぜひ教えてもらいたい。
たまに他人のソース見て疑問に思うんだが、
includeやrequireの形跡はないのに、ソース中に見当たらない変数を使用してたりする。
(echo $hoge;とだけ書いてるのにちゃんと$hoge;が表示されてる。$hogeがどこで定義されてるかは不明。)
これってどういう方法使ってやっているの?
importでもないし、namespaceなんかもないし・・・
0633621
2008/04/03(木) 09:40:11ID:2nubDXXGニュアンスはだいたいわかるのですが
欲しい形としては、ループする文字列だけ格納ではなく(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:???<h2>ててて</h2><p>いいい</p><br /><hr />";
preg_match_all("|<p>(.*?)</p>|si", $string, $matchs);
print_r($matchs);
0635nobodyさん
2008/04/03(木) 09:57:16ID:???0636nobodyさん
2008/04/03(木) 12:01:29ID:???0637nobodyさん
2008/04/03(木) 12:50:10ID:???自分が無知なのを棚に挙げて、人をアホ扱いですかw
どんだけスイート脳なんだよ。
>>632
__autoloadでぐぐれ
0638nobodyさん
2008/04/03(木) 13:00:44ID:2nubDXXGばっちりでした。マーベラスです。ありがとうございました。
0639nobodyさん
2008/04/03(木) 13:26:53ID:???なんで、オーバーヘッドの話から、
requireやincludeの話になってんの?w
わずかな差しかないが、__autoloadを使ったほうが、
クラスの存在のチェックなどをするぶん、
requireやincludeよりも遅いが。
0641nobodyさん
2008/04/03(木) 14:11:22ID:???ファイルの容量は気にしなくていいってことなのか
でもファイルがでかいならオーバーヘッドうんぬんより分割した方がいいと思うが
0642626
2008/04/03(木) 14:13:06ID:???1つのファイルに書き込むより5つのファイルにに書き込む方がオーバヘッドが大きい
書き込みの際にはDBのようなトランザクション処理ができないので
1つのファイルに書き込み失敗するとデータの整合性が狂うしロールバックもできない
(どれか失敗したら全てのファイルのデータ数を数えて少ないとこにあわせて末尾から削除とかもできるが面倒)
よって1つのファイルにデータをまとめて1度だけ書き込みを行ったほうがよい
ということを言ったつもりだったんだけど
0643nobodyさん
2008/04/03(木) 14:20:07ID:???0644nobodyさん
2008/04/03(木) 15:21:07ID:BSwpnKE2PHPまたはCGIみたいなのありませんか?
自分のホームページがあまりにもアクセス数が少ないので、
自動でカウンターだけでも上げて気休めしてみよーかなと。
0645nobodyさん
2008/04/03(木) 15:24:34ID:???0647644
2008/04/03(木) 15:37:18ID:???パソコンを立ち上げなくても、サーバー側で自動でアクセスしてみたいのです。
cronというのは どんな感じですか?
0648nobodyさん
2008/04/03(木) 15:41:38ID:???1日に86400ほど増える。
0649nobodyさん
2008/04/03(木) 15:44:02ID:???レンタルカウンターだとしたら無駄に負荷かかって迷惑だからやめとけ
0650nobodyさん
2008/04/03(木) 15:49:06ID:???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」と表示させたい)
どうしたらいいんでしょう? ご回答よろしくお願いします
0656nobodyさん
2008/04/03(木) 17:48:38ID:2KfD0E2xありがとうございます
{$test(1)}みたいに、引数を持たせることは出来ないんでしょうか? 最終的には
for($i=0;$i<10;$i++){
print <<<EOF
{$test($i)}
EOF;
}
みたいな感じで動的に変化する処理を考えてたので…… 弱ったなぁ
根本的にやり直ししかないのかな、、
0658nobodyさん
2008/04/03(木) 17:59:30ID:???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;
}
よく分からんがこんな感じでどうよ?
0662656
2008/04/03(木) 18:27:04ID:2KfD0E2x>>661さんのと可変関数ていうのを調べて、トライしてみます
確かに最悪ヒアドキュメントやめればいいんですよね
ソースが汚くなりそうで気が引けるんですが…
ともかくありがとう またよろしくお願いします
0663nobodyさん
2008/04/03(木) 18:28:29ID:???0664nobodyさん
2008/04/03(木) 18:45:05ID:???0668nobodyさん
2008/04/03(木) 19:31:29ID:???0669nobodyさん
2008/04/03(木) 20:12:51ID:???<<<AAA
AAA; ←こいつインデントできねーし
0670647
2008/04/03(木) 20:19:44ID:BSwpnKE2cronというのは、UNIX(?)で設定するということですよね!?
たとえばPHPファイルを一つ置いて、勝手に巡回するとかできないでしょうか?
0672nobodyさん
2008/04/03(木) 20:49:27ID:4LgtZJ5T0673nobodyさん
2008/04/03(木) 20:52:04ID:???0674nobodyさん
2008/04/03(木) 20:55:10ID:4LgtZJ5TPEARとかでもAuthってあるから聞いてみた。
ぐぐったり辞書見ても書いてないんだもの。
サポートセンターに電話する時はずかちい
0675nobodyさん
2008/04/03(木) 20:58:13ID:???Authとは
とかそんな感じで検索すればだいたい出る
0676nobodyさん
2008/04/03(木) 21:00:59ID:???0677nobodyさん
2008/04/03(木) 21:33:03ID:4LgtZJ5T出ませんねぇ…
0679nobodyさん
2008/04/03(木) 21:36:38ID:???0680nobodyさん
2008/04/03(木) 21:40:59ID:???goo辞書で「Auth」で英和辞書引いても
そのものずばりが出てくるじゃねーか。嘘吐いて他人の手間増やして楽しい?
0681nobodyさん
2008/04/03(木) 22:58:11ID:YxD7y5X8}
0682nobodyさん
2008/04/03(木) 22:59:43ID:YxD7y5X8for($i=0;$i<5;$i++){
echo $i;
}
こういうforで出力する時、表示は「01234」となりますが、
カウントダウンのように、0の次は1、1の次は2など、
順番に表示させることは出来ないのでしょうか?
0683nobodyさん
2008/04/03(木) 23:10:10ID:???0684nobodyさん
2008/04/03(木) 23:43:08ID:???0686682
2008/04/03(木) 23:54:43ID:???Javascriptはすでにやっているので、他の方法を探してみました。
無理だと言うことですね。他の方法を探してみます。
0688nobodyさん
2008/04/04(金) 00:05:08ID:???それでいいならクッキーを利用して5の次4,3,2,1,0なんて表示は出来るがな。
0689nobodyさん
2008/04/04(金) 00:09:15ID:???>Javascriptはすでにやっているので、他の方法を探してみました。
サーバサイドとクライアントサイドがごっちゃになってないかな?
て思った。
0690682
2008/04/04(金) 00:14:46ID:???サーバサイドでやりたいので、PHPを試しました。
ですが、やっぱりJavascriptしか無理っぽいですね・・。
タイマーみたいなのが作りたいので、ストップ処理も入るし、
そうなると、forとsleepを使っても出来ないみたいです。
0691nobodyさん
2008/04/04(金) 00:28:43ID:???かなり目立つように書いてカタマリに見える工夫するかなあ。
エスケープするときなんかはイチイチ考えなくていいしキレイ(な気がする)
-----
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:???違いは分かってるよ!!!と主張してるみたいなので方法論。
header()でrefreshすれば近いことはできるんじゃ?
0693nobodyさん
2008/04/04(金) 00:51:41ID:f6Xk8xc+どのような方法があるでしょうか。
↓例えばこんな風になってて
$string = '$name';
$name = 'MyName';
$stringを使って"MyName"と表示させたいのです。
すぐ思いつくのはevalですが、文のみということみたいなので(?)
無理やりあてはめて書いてみたのが
echo eval("return $string;"); //MyNameと表示される
でもこれだとなんか変というか・・・(コードの見た目が)
他により一般的な書き方があったらおしえてください。
0694nobodyさん
2008/04/04(金) 01:04:03ID:???>forとsleepを使っても出来ない
これは目的のものがJavaScriptでは出来なくて諦めたってことだよな?
断言してもいいが、やり方が間違ってるだけで出来ないことは絶対ない。
コードの一部を載せるんじゃなく、最終目的を明確にした上でweb制作板のJavaScriptスレに質問してみな。
0695693
2008/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:???>690
サーバーサイドの時点で、ページ遷移は絶対必要だから
タイマーの部分だけiframeとrefreshで回転させて・・・
0697nobodyさん
2008/04/04(金) 11:22:02ID:???0698nobodyさん
2008/04/04(金) 13:23:02ID:???安易にパーミッションを777にするよりも、
まずディレクトリーのオーナをかえて、必要最低限度のパーミッションにした方がいいよ。
0699nobodyさん
2008/04/04(金) 14:09:44ID:???0700nobodyさん
2008/04/04(金) 14:25:36ID:???その間レスできなかった。やめた方がいい?まだ、気になるレスがあるんだが・・・
0701nobodyさん
2008/04/04(金) 14:27:06ID:???本人は見てるか分からんが、参考になる人はいるだろうし
0703nobodyさん
2008/04/04(金) 14:34:51ID:???こんなPHP探してるんですが何処で配布されてますか?
0704nobodyさん
2008/04/04(金) 14:52:44ID:???文字化けしてしまいます。
エンコードが違うならわかりますがなんででしょうか?
0705nobodyさん
2008/04/04(金) 14:53:14ID:???0706539
2008/04/04(金) 14:56:39ID:???0707nobodyさん
2008/04/04(金) 14:58:19ID:???スクリプトの内部エンコードが違う。
残念だけど、PHP を Shift-JIS で書くのはおススメしない。UTF8 か EUC-JP を使うべし。
http://manual.xwd.jp/ref.mbstring.html
0709nobodyさん
2008/04/04(金) 15:10:15ID:mEsRuTBT必要としているPEARのパッケージのリストとか
0710nobodyさん
2008/04/04(金) 15:59:03ID:???0711nobodyさん
2008/04/04(金) 18:21:35ID:???どうもありがとうございました
0712nobodyさん
2008/04/04(金) 18:38:04ID:???0713nobodyさん
2008/04/04(金) 19:42:09ID:???0714nobodyさん
2008/04/04(金) 19:44:20ID:YqX/EKLMそれが一発でわかる関数などあるでしょうか?
理想としては、以下の処理が出来るようにしたいです。
1)1回目の削除実行→3行削除されたとわかる(「3件削除しました」とメッセージ)
2)2回目の削除実行→すでに削除済みなので0(行)が返ってくる
3)「(0だから)対応するデータはありません」などとアラート表示
よろしくお願いします
0715nobodyさん
2008/04/04(金) 20:12:09ID:???http://jp2.php.net/manual/ja/function.mysql-affected-rows.php でどう?
あと、delete で where条件を指定しない(全削除)の場合は、1=1みたいなダミーの
条件文が必要だけど、PDOを使うと自動的に付けてくれるとか、聞いたことがある。
0717nobodyさん
2008/04/04(金) 20:56:03ID:???それは毎回文字が消えて次の文字が表示されなきゃだめなわけ?
ただ順番に文字を表示するだけなら
ob_flush();
flush();
使えばいくない?
0718nobodyさん
2008/04/04(金) 21:49:14ID:???■ このスレッドは過去ログ倉庫に格納されています