【PHP】下らねぇ質問はここに書き込みやがれ 34
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2006/12/08(金) 04:22:54ID:???まず読め→【PHP マニュアル】http://www.php.net/manual/ja/
PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。
過去スレ、関連スレ、FAQなどは>>2-10辺り
◆前スレ
【PHP】下らねぇ質問はここに書き込みやがれ 33
http://pc8.2ch.net/test/read.cgi/php/1164209222/
◆質問する時の注意
・ 自分のIDを表示させること。(メール欄に何も記述しないこと。空白も入力しちゃダメ)
・ サーバーのOS(Linux、Windows他)、WebサーバーとPHPの種類やバージョン等を明記すること。
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
◆質問後の注意
・偽者防止に必ずIDを表示させること。(メール欄に何も記述しない)
・2回目以降は最初に質問した際のレス番号を名前欄に入れること。
・解決しなくても回答をもらった場合はお礼を言うこと。
(荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)
◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
【その他諸注意】
・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ http://pc8.2ch.net/php/subback.html
・SQLについての質問はデータベース板(PCカテゴリ)の各スレで http://pc8.2ch.net/db/subback.html
・速さについては自分でベンチをとってここに書け(違う環境の人も調べてくれるかも)
しかし初心者が目的も定めずに速度を気にしたところでほとんど意味は無いぞ
0491nobodyさん
2006/12/13(水) 09:59:21ID:???0492nobodyさん
2006/12/13(水) 10:10:40ID:???煽りにいちいち反応するなよ。餓鬼じゃあるまいし。
0493nobodyさん
2006/12/13(水) 11:33:34ID:teIa09dB$a = array("あ",0,"い","う","え","お");
$b = array("か",7,"き","く","け","こ");
$c = array("さ",9,"し","す","せ","そ");
$d = array("た",1,"ち","つ","て","と");
$e = array("な",5,"に","ぬ","ね","の");
$f = array("は",6,"ひ","ふ","へ","ほ");
という$a〜$fの配列を、数字順に$a,$d,$e,$f,$b,$cという風に
並び替えたいのですが、スマートに書けません。
どんな書き方が負荷のかからないスマートな書き方なんでしょうか?
0494493
2006/12/13(水) 11:35:08ID:teIa09dB$New_list = array();
$n = 0;
while(count($list) > $n){
if($n){
$f = 1;
$m = 0;
while($f){
$x = $list[$n][1];
$y = $New_list[$n - $m - 1][1];
if($x < $y){
$New_list[$n - $m] = $New_list[$n - $m -1];
$New_list[$n - $m - 1] = $list[$n];
if($n == $m){ $f = 0; }
}else{
$f = 0;
$New_list[$n - $m] = $list[$n];
}
$m++;
}
}else{
$New_list[$n] = $list[$n];
}
$n++;
}
0495nobodyさん
2006/12/13(水) 11:44:20ID:???sortすればいいだけでは?
0496nobodyさん
2006/12/13(水) 11:53:06ID:???使い古された論法だが、おまいもいちいち反応してるやんけ。
>>493
usort($list, cmp_arr);
function cmp_arr($a, $b) {
return $a[1] < $b[1] ? -1 : $a[1] > $b[1];
}
0498nobodyさん
2006/12/13(水) 12:06:53ID:BBaxillB英数字の文字列を取り出したいのですが、うまくいきません。(処理されない)
$file_array=file("$filename.txt");
for($i=0; $i < 10; $i++)
{
$str = mb_ereg("[a-zA-Z][a-zA-Z0-9]*",$file_array[$i]);
if($str)
{
$gakuseki = $str;
echo "$gakuseki"<br>\n;
}
//その他の項目
}
このような感じで、Eから始まる文字列を抜き出す処理を加えると、
何も処理されなくなってしまいまして。。。
よろしければ、お教え願いたく。
0499nobodyさん
2006/12/13(水) 12:19:07ID:bSWpJk+Qプロットに適当な文字列を表示することってできるんでしょうか?
プロットの値を表示することしかできないんでしょうか?
返答、お願いします。
0500nobodyさん
2006/12/13(水) 12:30:37ID:???$lines = new ArrayIterator(file('file.txt'));
for ($lines->rewind(); $lines->valid(); $lines->next()) {
mb_ereg("[a-zA-Z][a-zA-Z0-9]*", $lines->current(), $matches);
list($str) = $matches;
echo ($str ? $str."<br />\n" : '');
}
0501493
2006/12/13(水) 12:38:04ID:teIa09dB$x = 1;
usort($list, cmp_arr);
function cmp_arr($a, $b) {
return $a[$x] < $b[$x] ? -1 : $a[$x] > $b[$x];
}
と書き換えましたが正しく動作しませんでした。
return $a[1] < $b[1] ? -1 : $a[1] > $b[1]; の数字部分は変数ではなく
数字を入れないとダメなんでしょうか?
0502nobodyさん
2006/12/13(水) 12:42:54ID:???0503493
2006/12/13(水) 12:43:48ID:teIa09dB$x = 1 を書く位置が悪いんですね・・・ すみません
0504nobodyさん
2006/12/13(水) 12:52:18ID:???0505nobodyさん
2006/12/13(水) 12:53:37ID:???Iterator使うならforeachしようよ。そしてforeach使うなら、最初からただのarrayでおk。
0506nobodyさん
2006/12/13(水) 14:09:34ID:???で、構成は分かったけど、それでユーザー数とかPVとかはどれくらい?
あと1日のトラフィック量とか、そういうのが分からないと
サイトの規模が分からないでしょう。
0507nobodyさん
2006/12/13(水) 14:11:45ID:???使いたい人は使えばいい。
0508nobodyさん
2006/12/13(水) 14:16:06ID:???0509nobodyさん
2006/12/13(水) 14:44:06ID:???0510nobodyさん
2006/12/13(水) 14:46:56ID:???0511nobodyさん
2006/12/13(水) 14:55:56ID:???なにこいつら?たかが三項演算子くらい使いたいところで使えばいいじゃん。
三項演算子くらいで文句言うのはキモイ。
>>505
まぁ確かにOOPも理解できないお前にはIteratorは一生無縁だろうな。
0512nobodyさん
2006/12/13(水) 15:04:53ID:???php 5.1
mysql 5.0
apache 2.0
zend framework 2.0
AJAX系の非同期通信で、エラーが出たときに、画面を遷移させたいのです。
ただリクエストの戻り値の行き先を<div>タグ内にしていて、
実行すると、エラー画面が、その<div>に全部入ってしまいます
現状、 header("Location: error/index"); みたいなことしています
(zend controller無しだと、headers already sent みたいなエラーで怒られますが…)
PHP内で完結して、画面を遷移or移動させる方法って、他にありませんでしたっけ?
(JavaScript込みなら方法はあるのですが、安全性を求められている所なので使えません…)
0513nobodyさん
2006/12/13(水) 15:05:26ID:???PHPは言語自体がOOP向きじゃないから>>505みたいなカスが出てきても仕方ないと思うが。
自分が使えないからって
>ただのarrayでおk
とか言いだすのはひどすぎるけどな。
0514nobodyさん
2006/12/13(水) 15:10:53ID:???もうちょっと冷静にいこうよ。
0515nobodyさん
2006/12/13(水) 15:12:01ID:???>・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ http://pc8.2ch.net/php/subback.html
オレはsymfony派だからZFは使ったことないが
http://framework.zend.com/manual/ja/zend.controller.rewriterouter.html
が参考になるんじゃないの?
0516515
2006/12/13(水) 15:18:54ID:???http://framework.zend.com/apidoc/core/Zend_Controller/Zend_Controller_Action.html#_forward
0517nobodyさん
2006/12/13(水) 15:30:00ID:???のですが。(文字列を取り出した段階では文字化けしていません)
$get_id = substr($array_id,0,16); ・・・・ex A0103360
$convert_id = mb_convert_kana($get_id,"a");
このようにして取り出した全角英数字の文字列を半角に変換したいのですが
文字化けしてしまいまして。どうすれば正常に変換されるでしょうか?
0519nobodyさん
2006/12/13(水) 15:35:05ID:???ありがとう〜〜〜 516のメソッドのページは見たことありませんでした〜〜 熟読してみます〜〜
……………やっぱPHPで、ページ遷移させる方法ってのありませんでしたっけ?
0520517
2006/12/13(水) 15:40:10ID:???回答どうもです。
mb_substr()にしてみましたが、文字化けがなおりませんでした。
ほかに手はないものでしょうか?
0521nobodyさん
2006/12/13(水) 15:41:12ID:???エラーが発生したときにエラー処理用のActionに処理を移せば
いいかと。
class IndexController extends Zend_Controller_Action
{
public function indexAction()
{
//エラーがあったら他のActionに処理を移す
if ($error) $this->_forward('IndexController', 'errorAction');
}
public function errorAction()
{
//エラー処理
}
}
0522517
2006/12/13(水) 15:47:48ID:???0524nobodyさん
2006/12/13(水) 15:59:17ID:???らこれで変換してから書き込んでください。
<?php
$string = <<<END
//code
END;
$string = preg_replace('{ }', ' ', $string);
$string = preg_replace('{\t}', ' ', $string);
echo $string;
できれば誰かJavaScript版を作ってくれると使いやすくていいと
思うんだけど。
0526nobodyさん
2006/12/13(水) 16:31:47ID:???preg_replace("/pattern/", "replacement", "strings");
0527nobodyさん
2006/12/13(水) 16:32:05ID:???BCC送信のように、複数宛先を一括送信する場合は、配列にメールアドレス
を入れて、mail関数の処理をforで回すという考えでいいでしょうか?
また、特別なソフトを使わない場合、PHPでメール送信するには
mail関数やsendmailを使う以外無いのでしょうか?処理速度が心配です。
0528nobodyさん
2006/12/13(水) 16:34:25ID:???0529nobodyさん
2006/12/13(水) 16:36:04ID:???返信ありがとうございます〜 勉強させて頂きました感謝です。
結論から言うと、
$this->_forward('IndexController', 'errorAction');
で、確かにページは出ました。 「<div>タグ」の中に;;
クライアント XMLHttpRequestを送信
↓
鯖 forwardで違うアクションのページを出力
↓
クライアント あ、戻り値?何? XMLHttpRequestでしょ? タグの中にinnerHTMLねw
戻り値が何であろうと、根こそぎjs上で指定された場所っぽいです
アクションは、途中で変わったので、正規アクションが動く前に処理できる所まで着ました。
もう少しの所まで来た気がします。
0530nobodyさん
2006/12/13(水) 16:36:09ID:+OBhpWUXどうするのが簡単でしょうか?
0532nobodyさん
2006/12/13(水) 17:04:00ID:???$str = preg_replace('/年|月/', '/', $str);
$str = preg_replace('/日/', '', $str);
echo $str;
0533nobodyさん
2006/12/13(水) 17:05:22ID:???したいんですけど、何か方法はないでしょうか?
0534nobodyさん
2006/12/13(水) 17:25:49ID:+OBhpWUXありがとうございました。
0535nobodyさん
2006/12/13(水) 17:28:41ID:???感覚的にこんなことがしたいのですがどうすればいいでしょうか?
$numには英数字が入っています
0536nobodyさん
2006/12/13(水) 17:35:20ID:???${"hoge".$num}
>>533
ディレクトリなめて
拡張子がそれらか比較
該当したらファイル削除
0537nobodyさん
2006/12/13(水) 17:37:15ID:dNCg3wG00538nobodyさん
2006/12/13(水) 17:41:09ID:F8GTcB6wを参考にwebサーバ上にあるtxtファイルをダウンロードさせたいのですが、
ダウンロードダイアログが開かず、普通にブラウザ上で中身が表示されてしまいます。
原因は何でしょうか?
0539nobodyさん
2006/12/13(水) 17:42:48ID:???0540nobodyさん
2006/12/13(水) 17:49:49ID:???0541nobodyさん
2006/12/13(水) 18:32:58ID:???やりたいことはアップロードされた.aiデータをswfをリアルタイム変換したいんですけど。
0542nobodyさん
2006/12/13(水) 18:51:42ID:???$url = "http://2ch.se/";
$fp = @fsockopen($url,80,$errno,$errstr,5) or die("ゴメン無理");
print $fp;
?>
なぜか表示されません原因は何でしょうか?
0543542
2006/12/13(水) 19:01:39ID:???目的のURLが表示されません
0544nobodyさん
2006/12/13(水) 19:02:52ID:???http://jp2.php.net/fsockopen
0545nobodyさん
2006/12/13(水) 19:11:59ID:???0546542
2006/12/13(水) 19:21:00ID:???$url = "http://2ch.se/";
$fp = @fsockopen("$url", 80, $errno, $errstr, 30) or die("ゴメン無理");
if (!$fp) {
echo "$errstr ($errno)<br />\n";
} else {
$out = "GET / HTTP/1.1\r\n";
$out .= "Host: $url\r\n";
$out .= "Connection: Close\r\n\r\n";
fwrite($fp, $out);
while (!feof($fp)) {
echo fgets($fp, 128);
}
fclose($fp);
}
?>
これでも無理でした
0547nobodyさん
2006/12/13(水) 19:32:53ID:???0548542
2006/12/13(水) 19:58:14ID:???0549505
2006/12/13(水) 21:54:09ID:???本気で言ってるのか、ただ煽りたいだけなのか・・・
まず500のforの部分をforeach ($lines as $line)とでも書いたらどうよ。
しかもそのケースだったら、Iterator使っても意味なさすぎ。
0550542
2006/12/13(水) 22:06:51ID:???>>546でページを表示したときに出る
HTTP/1.0 200 OK content-type:text/html
という表示を消したいのですが
>>546のどこをどう変えればいいのでしょうか?
0552538
2006/12/13(水) 22:24:45ID:sfCDWF8Rkwsk
0553nobodyさん
2006/12/13(水) 22:24:59ID:???三項演算子が不便!?なにこのド素人。
お前一回くらいオープンソースで開発されてるアプリケーションの
ソース見てみろよ。自分がいかに恥ずかしいことを言ってるか気づ
くよ。
0555nobodyさん
2006/12/13(水) 22:31:28ID:???なるほど。それは知らなかった。
>どこのコーディング規約でもたいてい禁止されてる。
では早速、禁止されてる有名なプロジェクトあげてみてくれる?
0557nobodyさん
2006/12/13(水) 22:39:02ID:???なんて大したことないだろ。
大口をたたいたやつは、早く三項演算子禁止のプロジェクトをあげろよ。たいていは禁止らしいか
ら山ほどあるはずだろ。
0558nobodyさん
2006/12/13(水) 22:45:55ID:???三項演算子なんて一般的じゃないし、可読性が大事だからね。
0559nobodyさん
2006/12/13(水) 22:48:33ID:???>そもそも三項演算子も理解できない、読みにくいとか言うレベルの人間が参加してるプロジェクト
>なんて大したことないだろ。
何言ってるんだ・・・
個人的に理解できてても、読みなれてても、
複数人がらみのプロジェクトなら
読みやすいほうを採用するに決まってるだろう・・・
0560nobodyさん
2006/12/13(水) 22:48:42ID:???return $a[1] < $b[1] ? -1 : $a[1] > $b[1];
〜〜〜〜〜〜
これ何か意味あるの?
0561nobodyさん
2006/12/13(水) 22:51:28ID:???お前の言うこともわかる。たしかにforeachのほうが若干すっきりするしな。
でも、pythonとかjavaをやった人間には>>500のほうがしっくりくる気がする。
PHPにはPHPの流儀があるだろうから、それぞれ好きにやればいいんじゃないの?
0563nobodyさん
2006/12/13(水) 22:55:56ID:???順番を後ろから出力する載ってどうやったらいいでしょうか?
1〜10行までデータがあった場合、10行目から出力したいのです。
0564nobodyさん
2006/12/13(水) 23:00:14ID:???自分で調べろよ。
PGになればわかるからそういう会社入れ。
禁止っていうのは言い過ぎたかもしれんが、
よほどの事情がない限り使うなとは言われるだろう。
0565nobodyさん
2006/12/13(水) 23:02:56ID:???そのままコピペしたらいけたよ。
IEでもだめかい?
header出力するまえに何も出力ないよね?
>>550
それらの文字列なら出力しないようにすればどう?
もしくはfile_get_contents使えば?
0566nobodyさん
2006/12/13(水) 23:04:43ID:2BlCBXrB送信→Now loadingの画面→送信完了ページ
のようなプログラムがありますが、これはどうやっているのでしょうか?
構造のヒントだけでもいいので、アドバイスいただければと思います。
0567556
2006/12/13(水) 23:06:35ID:???>禁止っていうのは言い過ぎたかもしれん
潔いじゃん。負け惜しみを言うよりよっぽどカコイイな。
完全に見直した>>564=>>554=>>559。きつく言って悪かったな。
0574nobodyさん
2006/12/13(水) 23:56:39ID:???0575nobodyさん
2006/12/13(水) 23:57:08ID:???0577nobodyさん
2006/12/14(木) 00:07:49ID:???0578nobodyさん
2006/12/14(木) 00:18:53ID:???ん?PHPのIteratorはforeachでまわせるってことだよ。
Iteratorの5つのメソッドを明示的に呼び出す必要はないの。
明示的に呼び出すのは、イテレーションの途中で中断してもう一回再開したり、細かいことをするために使う面もあるが、Webサイトの構築でそんなシチュエーションには残念ながら出会ったことはない。
通常はforeachを用いておけば、rewindやcurrentなど、>>500と全く同じ順序で自動的に呼び出される。
pythonやjavaをやっていると>>500がしっくり来るってのは、よーわからんな。
C++のSTLと比較するなら、しっくりくるってのもまだわかるけど。
0580nobodyさん
2006/12/14(木) 00:35:34ID:???PHPは似たような関数を各種取り揃えてる辺りからも
そういったニーズに応えようとしてるわけだから、
「PHPの構文にある限りは好きなの使えばよろしい」
でFAなんでないの?
PHPならこの書き方!みたいのはそんなに無いと思う。
(大抵は制約くらいでしかそんな場面にならない)
0581nobodyさん
2006/12/14(木) 00:43:01ID:???それ俺が知らないと思って言ってるの?何を主張したいのか全然わからないんだけど・・・。
javaの拡張for文もやっていることはイテレーション(リスト状の構造を順番に走査)なわけで。
むしろ拡張for文(=構文糖)を使うってのは、PHPでいうとfor ($lines->rewind();・・・のかわりにforeach ($lines・・・を構文糖として使うことと方向が同じじゃないか。
>>580
いや、言いたいことはわかるけど、そもそも>>500で無意味にIteratorを持ち出している点、foreachで書けるものを無意味&煩雑なfor文に展開している点などは、俺的につっこみどころなんだが。
そもそも俺の経験上、PHPのIterator自体お勧めしないものの一つだしな。
0582nobodyさん
2006/12/14(木) 00:51:48ID:6QjdxOSQ変数に文字列を格納していて、その中から特定の文字を2箇所見つけて
その間にある文字列を取り出したいのですが、どのように記述したらよいのでしょうか?
nfai_usdgvga_jgmandfak_flahogek_glangol_ialgkka
のアンダーバーから次のアンダーバーの間を取り出し、その中にhogeが含まれる時に、
別の変数に取り出すということをしたいです。
突然の質問で、大変申し訳ありませんが何卒よろしくお願い致します。
0583nobodyさん
2006/12/14(木) 00:56:35ID:???0585nobodyさん
2006/12/14(木) 01:06:07ID:6QjdxOSQ0586nobodyさん
2006/12/14(木) 02:09:24ID:???大体、explode, implode, array_search, array_shift, foreach, eregとかで、答えが出る感じに思う。
と、徹夜中のリーマンより。
0587nobodyさん
2006/12/14(木) 04:08:49ID:???0588nobodyさん
2006/12/14(木) 10:09:59ID:???一度、全部読んでおくだけで十分
0589nobodyさん
2006/12/14(木) 10:22:37ID:???あとはリファレンスを見ればいいし。
0590500
2006/12/14(木) 10:38:40ID:???オレが変な書き方をしたせいで迷惑をかけてるようで申し訳ないです。
あとから拡張とか変更が楽かな?と思って、ついくせでIteratorを使ってし
まいました。でも、みなさんの書き込みを読んでるとその必要も無さそうな
のでこれからはforeachでまわすことにしようと思います。
煽りの原因をつくってしまってすいません。
0591nobodyさん
2006/12/14(木) 10:41:27ID:???たとえばループ処理系の構文(for等)は、
breakでループを抜けさせることができるようですが、
if構文内で、処理を途中でも抜けさせるような関数はありますか?
■ このスレッドは過去ログ倉庫に格納されています