【PHP】下らねぇ質問はここに書き込みやがれ 55
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2007/09/29(土) 18:35:56ID:YlkpEUW6PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。
過去スレ、関連スレ、FAQなどは>>2-10辺り
◆前スレ
【PHP】下らねぇ質問はここに書き込みやがれ 54
http://pc11.2ch.net/test/read.cgi/php/1189309377/
◆質問する時の注意
・ 自分のIDを表示させること。(メール欄に何も記述しないこと。空白も入力しちゃダメ)
・ サーバーのOS(Linux、Windows他)、WebサーバーとPHPの種類やバージョン等を明記すること。
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
◆質問後の注意
・偽者防止に必ずIDを表示させること。(メール欄に何も記述しない)
・2回目以降は最初に質問した際のレス番号を名前欄に入れること。
・解決しなくても回答をもらった場合はお礼を言うこと。
(荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)
◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
【その他諸注意】
・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
・SQLについての質問はデータベース板(PCカテゴリ)の各スレで
0320309
2007/10/04(木) 17:19:41ID:???config.status
はないんだわ
ソースパッケージからみつけた
COMMON_CONFIG=--build=$(PHP5_BUILD_GNU_TYPE)-gnu --host=$(PHP5_HOST_GNU_TYPE)-gnu
--mandir=/usr/share/man --enable-memory-limit --disable-debug --with-regex=php
--disable-rpath --disable-static --with-pic --with-layout=GNU --with-pear=/usr/share/php
--enable-calendar --enable-sysvsem --enable-sysvshm --enable-sysvmsg --enable-track-vars
--enable-trans-sid --enable-bcmath --with-bz2 --enable-ctype --with-db4 --without-gdbm
--with-iconv --enable-exif --enable-filepro --enable-ftp --with-gettext --enable-mbstring
--with-pcre-regex=/usr --enable-shmop --enable-sockets --enable-wddx
--with-libxml-dir=/usr --with-zlib --with-kerberos=/usr --with-openssl=/usr
--enable-dbx --enable-soap --enable-zip --with-mime-magic=$(MAGIC_MIME)
--with-exec-dir=/usr/lib/php5/libexec
0322nobodyさん
2007/10/04(木) 19:17:47ID:???ますます何をしたいのかわからない。
そのソースは転載用に改造したものと思うけど処理の真意が伝わらない。
(>>319氏も書いてるが$tekunoも$poshも$saza*も変数名から推測できないし)
貴方の文章力だと処理をどうこうしたいじゃ理解できないから、こうしたいという具体的な目的とうまく動作しないソースを改変せずそのまま貼った方がいい。
言葉で表せないって事は当然プログラムに落とせないよ。
置換タグとはテンプレートを読み込んで置換したいのか?
「ああ」「いい」「うう」を併記しておいてその内1つだけを出力したいの?
if文かswitch文の分岐出力とも思えたりするのだが。
0323nobodyさん
2007/10/04(木) 19:30:58ID:???ようするにデータをXMLファイルで持っておいて、
任意のカラムのデータを取り出したい、ってことの気が…
それ、全然独自じゃないよ。
あと、あくまで独自のが作りたいんなら「自分で処理しやすい形式」にしましょう。
0324323
2007/10/04(木) 19:36:01ID:???> 実際
> $saza = 1;
> <?php if ($saza){echo 'ああああ';} ?>
> <?php if ($saza1){echo 'いいいい';} ?>
> <?php if ($saza2){echo 'うううう';} ?>
> echo >>いいいい
> で今は動作していますが、ページ内で記述が
> ごちゃごちゃになるので
ちなみにこれ、普通は
$data = array(
'ああああ',
'いいいい',
'うううう',
);
echo $data[$saza];
みたいに処理します。
0325nobodyさん
2007/10/04(木) 19:37:16ID:???ありがとうございました 一度そのやり方でやってみます。
>>316-318
済みませんでした、以後気をつけます
0326nobodyさん
2007/10/04(木) 19:41:20ID:???凡人の俺には理解不能だし・・
0327nobodyさん
2007/10/04(木) 19:52:47ID:???論理演算の結果(true/false)を$saza*に入れてるから配列はダメじゃね?
and、or、!=、の3つなら最低2つの変数は同じ値だし。
$saza = 1とか書いてるから難解になるんだよ。なぜ$saza = trueにしない
0328324
2007/10/04(木) 20:09:01ID:???データを配列化した上で、$sazaとかの変数も処理しやすいよう
正規化してやるのが常道だと思いますよ。
>>306は文系脳な人なのかもしれないけど、データ構造・形式を疎かにして
アルゴリズムだけで何とかしようとするのはプログラムとは言えません。
0329298
2007/10/04(木) 21:58:38ID:r3u5qyzlこの質問の、<h2>に条件を付けて表示できないかのような事
です。
条件1なら表示
条件2なら非表示という事です。
ただし、表示時に<h2>を残さないようにしたいのです。
下らない質問というより、わからない質問に真面目に答えてく
ださってる方、
どうもありがとうございます。
0332nobodyさん
2007/10/04(木) 23:15:47ID:???無視するのはよくないぞ
↓じゃだめなのか?駄目ならその理由を第三者にわかるようかつ簡潔に述べよ。
<?php
$japanese = true;
$english = false;
?>
<html>
<body>
<?php if ($japanese) { ?>これはペンです。<?php } ?>
<?php if ($english) { ?>This is a pen. <?php } ?>
</body>
</html>
0334nobodyさん
2007/10/04(木) 23:28:57ID:3TfT8CvK会員システムで、ID(idhoge) と PASS(passhoge) に基づいて各ユーザの情報を管理してる場合でも
ブラウザ上では
profile.php?uid=10001 profile.php?uid=10002
といった風に連番のパラメータを渡して各ユーザの情報を表示する場合があると思います。
もしこれが、ユーザ登録時のインクリメントの固有値を使ってるのだとしたら、
こういうのって、直接 profile.php?uid=idhoge としない場合にくらべてどんなメリットがあるのでしょう?
概念的というか、漠然とした質問かもしれないですがよろしくお願いします
0335298
2007/10/04(木) 23:30:24ID:r3u5qyzl失礼しました。
0336nobodyさん
2007/10/04(木) 23:30:53ID:???えーと・・・・つまり、
はてなで紹介されてた手法を使うとHTMLの中にPHPコードを埋め込まなくても
自由に表示を制御できるらしいぞ!ってことは俺の;プログラムもPHPコードを
全部消してちょーシンプルにできるんじゃね?きゃっほー魔法みたいだー!
でも読んでもやり方さっぱりわからねー。ereg_replaceとかどこに書くんだ。
わっかんねーからくだ質で聞いてみるべ!
…と、こんな感じの話なんでしょうか?
とりあえず君はSmartyを覚えた方が幸せになれる気がするけど。
0338nobodyさん
2007/10/04(木) 23:34:55ID:???ユーザからの要望に応じて後から自由にIDを変更できる。
(特に複数テーブル間でIDを識別子に使ってる場合に重要)
IDに使用可能な文字や桁数を自由にできて融通が利く。
識別子は数字列にしといた方がDB上での検索が速くなる。
0340nobodyさん
2007/10/05(金) 00:28:12ID:???319だけどエスパーになりたいので再チャレンジするおw
<?php
$saza = 1;
$output = <<< HTML
<saza>ああああ</saza>
<saza1>いいいい</saza1>
<saza2>うううう</saza2>
HTML;
$saza_flag = array(0, 0, 0);
$saza_flag[$saza] = 1;
$pattern_array = array();
if ($saza_flag[0] == 0) $pattern_array[] = '(<saza>.*<\/saza>)';
if ($saza_flag[1] == 0) $pattern_array[] = '(<saza1>.*<\/saza1>)';
if ($saza_flag[2] == 0) $pattern_array[] = '(<saza2>.*<\/saza2>)';
$pattern = implode("|", $pattern_array);
$output = preg_replace("/{$pattern}/", "", $output);
echo $output;
?>
0341nobodyさん
2007/10/05(金) 02:05:39ID:???interface iBBB{}
interface iCCC extends iAAA, iBBB{}
abstract class DDD implements iCCC{}
class EEE extends DDD{}
class DDDに インターフェイス iCCCを実装しているんですが、なぜabstractが必要なんですか?
abstract無しだとダメなんでしょうか?
また、class EEEには、abstractは必要ないんですか?
0342nobodyさん
2007/10/05(金) 02:08:55ID:???はてなのは絶対に削除で、>>329は条件付き削除(表示)、なら
preg_replaceを条件で分岐させればいいだけじゃないの?
(ソースはコピペなので未検証)
$html = <<< ENDHTML
<h1>hoge</h1>
<h2>hogehoge</h2>
<p>hogehogehoge</p>
<h2>hogehogehoge</h2>
<img src="hoge.src">
ENDHTML;
$mode = true;
if($mode) echo $html;
else echo preg_replace('!<h2>.*?</h2>\n*!i', '', $html) ;
2分岐なら$modeに真偽値で代入して上の処理、
多岐分岐なら==で比較しながら「if〜elseif〜」かswitch文
条件1ならh1表示、条件2ならh2表示、だと置換パターンも変える。
HTML側に変則的な文字列入れといて適当な文字列に置換って手もあるけどreplaceが2回必要になる。
0343nobodyさん
2007/10/05(金) 02:16:51ID:zHZGL2zy0344nobodyさん
2007/10/05(金) 02:52:19ID:???これphp?
複数のimplementsはできても複数のextendsはできんかったと思うけど
EEEと同じようなクラスが他にもいくつかあると思うけど
それらで共通の処理が必要なものをabstractに書いてたりすんじゃないかな
>>343
俺はhogehogeというクラスのファイルは
hogehoge.class.phpでクラス毎に1個1個作ってる
0345nobodyさん
2007/10/05(金) 02:56:27ID:???それ、2分岐くらいまでなら問題ないけど、質問主の要望みたいに
3、4分岐と増えるに従ってかなり面倒になるよ。
「1つだけ消す」のなら単純にelse条件を1つ増やすだけだけど、
「複数あるうち1つだけ残す(=3個とか4個とか消さないといけない)」なので。
で、そんなのいちいち条件判定しないで、正規表現に任すのがいいんじゃない?
$html = <<< ENDHTML
<sage1>hoge</sage1>
<sage2>hoge</sage2>
<sage3>hoge</sage3>
<sage4>hoge</sage4>
ENDHTML;
$sage = 2;
echo preg_replace("!<sage[^$sage]>.*?</sage[^$sage]>!", '', $html);
0346nobodyさん
2007/10/05(金) 02:58:14ID:???基本的には。
1つのファイルに複数クラスを入れるのはその両クラスがよっぽど関連が強くて
ほぼ確実にワンセットで使うだろう場合くらい。
0347345
2007/10/05(金) 03:07:52ID:???$html = <<< ENDHTML
<sage1>hoge1</sage1>
<sage2>hoge2</sage2>
<sage3>hoge3</sage3>
<sage4>hoge4</sage4>
ENDHTML;
$sage = 2;
echo preg_replace("!<sage[^$sage]>.*?</sage[^$sage]>|<sage$sage>|</sage$sage>!", '', $html);
ってとこかね。
これで
hoge2
だけ表示される。
あと$tekunoだかなんだかの話は、上記で$sage=2;にしてるとこを
if($tekuno and $posh) $sage = 1;
if($tekuno or $posh) $sage = 2;
if($tekuno != $posh) $sage = 3;
とすりゃいいんでしょ?
0348nobodyさん
2007/10/05(金) 05:10:20ID:utkOd4ppWeb技術のワンステップアップとしてPHPの次に.NETかServlet,JSPに触れたいと思ってます
Javaを理解している人間にとってPHPやC#はわかりやすいと聞くけど
逆にPHPからJava,C#を習得するのって困難ですか?
オブジェクトPHPを理解してる人にはある程度敷居が低いんでしょうが
自分はOOPは初歩程度の知識しかありません
みなさんはPHPからのステップアップとしてどういった技術を身に付けましたか?または身に付けようと思ってますか?
0351nobodyさん
2007/10/05(金) 06:50:35ID:???0352nobodyさん
2007/10/05(金) 06:58:58ID:???Smalltalk以外のOOP言語なんてどれも50歩100歩だよ。
形だけ学ぶならPHPで十分、十分。
0353nobodyさん
2007/10/05(金) 07:49:36ID:???この辺のブログが役に立つと思う。
ttp://d.hatena.ne.jp/sumim/20040525/p1
ttp://d.hatena.ne.jp/JavaBlack/20070825/p1
0355nobodyさん
2007/10/05(金) 08:15:08ID:???Java,C#を学ぶのは他言語での記述力をつけるってことでいいかと。
OOP? OOPとWeb技術とどう結びつくのか不明。
0356nobodyさん
2007/10/05(金) 08:17:05ID:???ステップアップするならJavaかC#?でもOOP分からんから怖くて触れない
って言いたいんだろ。
0358nobodyさん
2007/10/05(金) 08:37:29ID:???・宣言していない変数使おうとして怒られる
・異なる型どうしをキャストせずに代入しようとして怒られる
こんな些細なことで躓く子がたまにいるんだよね
0359nobodyさん
2007/10/05(金) 09:03:26ID:???0360nobodyさん
2007/10/05(金) 09:21:33ID:???Cをメインにやってたとき、型無し言語をしってびっくりしたぞ
0361nobodyさん
2007/10/05(金) 09:35:51ID:OqMmbiqQ0362nobodyさん
2007/10/05(金) 09:37:56ID:???0363nobodyさん
2007/10/05(金) 10:03:51ID:???0364360
2007/10/05(金) 10:24:41ID:???コンパイル段階でエラーつぶせる事だよね
error_reporting(E_ALL);
って必ず書くやつは、型強制言語出身の可能性大だと思うわ
0365nobodyさん
2007/10/05(金) 10:29:15ID:???型付けってなんの意味があるの?って思っちゃうんだが
メモリを効率につかうためとかいう理由?
0366360
2007/10/05(金) 10:41:36ID:???それもあるが、効率考えなくていいとこもあるから、
それはケース倍ケースだな
型強制言語から始めたものとしては、
宣言していない変数使おうとしてもそれなりに動いてしまう
のは脱力ポイントだな。
$hoge = 1
:いろいろ書いてて
echo $hogo; 変数名typo
とかやっても実行できてしまう。
Notice出すようにすればいいけど、実行しないと出ないでしょ。
型付けありだと、実行させなくてもコンパイル段階で
エラーでるからな。単純ミスは減らせる。
その分、ソースの記述は多くなるがな。
0367nobodyさん
2007/10/05(金) 11:05:17ID:???必要なく手軽に扱えるというのが好感触ポイントだけどな
なんかphpは下級言語で高級言語のC使えるやつや使ってる奴がえらい みたいな流れだな
嫌味くせえ
0368nobodyさん
2007/10/05(金) 11:09:48ID:???難易度が簡単なもの=低級じゃないよ
人間に理解可能かどうか
人間にとって難解であれば難解であるほど低級言語
低級← →高級
機械語 アセンブラ C JavaやPHP
0369nobodyさん
2007/10/05(金) 11:17:14ID:???0370nobodyさん
2007/10/05(金) 11:35:46ID:???或いは意図的に避けて育っちゃうと理解できないと思うし、解決方法を
見い出すことすらままならないじゃないかな。
0371360
2007/10/05(金) 11:38:13ID:???嫌味に聞こえたなら悪かった
正直なところケースバイケースだと思う
>>348 の質問があったから、型なし言語の経験のみなら、
次やるとしたら型ありがいいんじゃない?っていいたかっただけ
php本体はCで書かれてるgccだから一部c++な機能つかってるかもだけど
ちなみに、機械語、アセンブラ以外は全部高級言語だよ
個人的には phpとかjavaとか無かった時代の言葉なので、今使うのは
時代になじまないと思う
0373nobodyさん
2007/10/05(金) 11:38:23ID:???0374nobodyさん
2007/10/05(金) 11:43:28ID:???低級でもなければ高級でもないんじゃね?
中級ってところだと思うが
ポインタなんかもあるし
0376360
2007/10/05(金) 11:50:47ID:???とかで判断してくれ
0377nobodyさん
2007/10/05(金) 11:51:28ID:???それ見たかもしれない。
どっかの会社の社長の日記だろ?はてなで見た気がする。
アセンブリ言語ならともかく機械語までさかのぼっちゃうのはどうなのよ。
古い人間の意見だと思いたいんだけど実際本当に機械語まで知る必要がある?
機械語世代の古参プログラマの方の意見を聞きたいね。
あったほうがいいっていうなら話はわかるけど必須っていわれると・・・
0378nobodyさん
2007/10/05(金) 12:00:02ID:???必要無いでしょ。CPU(MPU?)毎に異なるんだし。
機械語だってCPUに取り込まれてそのまま実行じゃなくて
さらに翻訳して…という行程を経るから意味無しじゃん。
0379nobodyさん
2007/10/05(金) 12:06:36ID:???というのもPHPで大規模なものは作らないから最適化の必要がない
そもそもPHPでアセンブリを使えない(と思う)
0380375
2007/10/05(金) 12:09:16ID:???LLのモジュールをデバッガで追いかけてバグの原因を探すとか
微妙に訳の分からん話をしていたな
0381nobodyさん
2007/10/05(金) 12:11:09ID:???機械語は唯一CPUが直接実行することができるんだよ
他の高級言語は最終的に全て機械語に変換されて実行される
0382nobodyさん
2007/10/05(金) 12:20:59ID:???アセンブリ言語をアセンブルした機械語をCPUが直接実行するんじゃなくて
CPUの中で機械語をさらに内部コードに展開して実行するという話でしょ
0383360
2007/10/05(金) 12:28:09ID:???俺C世代だが、そのころはアセンブラしっておかないと。とかよく言われてたから
さわりだけかじったことはあるぐらい
>>378 がかいてるとおり、
今はさすがにそこまで知っておく必要性は薄れてきてるとおもう
linux kernel も アセンブラで書かれてるのは一部だしね
俺もその記事よんだが、メモリの使われ方とかイメージできない
やつが多すぎる。のようなこと書いてた点には賛同しちゃう
一生webしかやらないなら不要かもしらんが、負荷集中して
パフォーマンス出ない。unsetしたほうがいいんじゃないの?とか
phpソースレベルで詳細確認したいとかいう状況になる立場に
いるのなら知っておいたほうがベストではあると思う
もっともほかの言語に行く前に、
正規表現使えるようになっとけ
ってことかな応用きくしな
0384nobodyさん
2007/10/05(金) 12:39:08ID:???やっぱりその辺から理解していると絶対楽しいと思うし
何よりデバッガ見てちゃんと理解できるのが羨ましい
0385nobodyさん
2007/10/05(金) 12:44:06ID:???そういう話だと思うが、分子=機械語、原子=内部コード
みたいなものだからどちらかというと分子の振る舞いを知る方が
化合物=高級言語のユーザには重要だと思う。
# 特にPHPって高級言語のなかでも素の部分は低級な作りだから。
0386nobodyさん
2007/10/05(金) 12:47:09ID:???Cの知識はあるべきだと思う。自称mysqlのモジュールでも読んで、
簡単なモジュールでも書けるようにしとけばなにかと役に立つ。
PHPなんて簡単過ぎてもう完全にマスターしちまったよ、
と思ったらCソースを読めるようにしとくと、ここでさらにデカい顔が出来る気がする。
アセンブラは...どうだろうね。俺は組み込みマイコンで遊ぶことがあるから
たまに書いたりディスアセンブルしたコードを読むことはあるけど、
PHPと関係するような場面で役に立つことはなさそう。
ただCの理解にはとても良い。すごく良い。
機械語は、たぶん必要ない。ただ自在に操るとカッコいい。
>>384
たいていはソースレベルデバッグで間に合うからCだけで大丈夫だよ。
0387nobodyさん
2007/10/05(金) 12:56:51ID:???0389nobodyさん
2007/10/05(金) 13:06:43ID:???それはさておき>>348の欲望を満たすにはどうすんべ?
環境構築はWindows+IIS+.NETFrameworkでC#の方が間違いが少ない
どう転んでもこれで設定に失敗するってことはないと思うが
0390nobodyさん
2007/10/05(金) 13:17:56ID:???PHPのOOPすらしてないみたいだし。
だから何やっても中途半端に終わる予感。
Web技術云々ならHTTP関係の勉強したら?と思った。言語はPHPのOOPでも。
0391nobodyさん
2007/10/05(金) 13:24:29ID:???確実にできるものだけ選択しててもレベルアップにはならんのでは?
環境構築だって立派なスキルだし、独学なら教科書読むより失敗から学ぶ方が身につく。
0392nobodyさん
2007/10/05(金) 13:42:15ID:0zJjw8jk位置情報のデータベースをダウンロードして
MySQLに全部ぶちこみたいんだけど、
何せ量が多すぎる・・・
全部で1GBくらいになるんだが、レンサバじゃきつい
何かいい方法ないかな?
0393360
2007/10/05(金) 13:46:22ID:???>>390 の書いたHTTPプロトコル勉強するのはいいね
セッションのしくみ知らない人多いとおもう
phpで書かれたフリーソフト読むとかでもいいかも
どっかのフレームワークとかいいんじゃね?
どうしても、
oopやりたいんならjavaとかC#のほうがいいとおもう
phpは標準でクラスライブラリないから
与えられる道具もクラスの言語の方が理解しやすいんじゃないかな
0395nobodyさん
2007/10/05(金) 14:10:05ID:yfT5K3xuそのデータを普通に取得しただけでは改行されませんよね
改行を<BR>に置き換えたいのですが、置き換える元(VBならvbcrlf)がわかりません
何になるのでしょうか?
0397395
2007/10/05(金) 14:16:24ID:???無事解決しました
0398nobodyさん
2007/10/05(金) 14:27:04ID:???0399nobodyさん
2007/10/05(金) 14:39:57ID:???0400nobodyさん
2007/10/05(金) 15:06:23ID:???gettype(-11.5478)
もやってみるとおもしろいよ
0402nobodyさん
2007/10/05(金) 15:24:44ID:OqMmbiqQ国土地理院のやつかな?
あれは重複が結構あるね。
重複分を整理、都道府県名や市町村名など余分なものはカット。
これで半分ぐらいになる。
0403nobodyさん
2007/10/05(金) 15:55:57ID:???if( ! is_array($hoge)){
$ tmp = array();
for($ i = 0; $i<strlen($hoge); $i++){
$tmp[$i] = substr($hoge, $i, 1);
}
$hoge = $tmp
if( ! is_array($hoge)){でhogeが配列でないことを調べているのに、
$hoge = $tmpで配列に変換しているということは、
左辺が変数で右辺が配列のとき値の代入すると、
自動で左辺の変数が右辺の方の配列に変換されるのでしょうか?
0404nobodyさん
2007/10/05(金) 16:03:46ID:???$hoge = $tmpの前後で$hogeをデバッグプリントすれば?
0410nobodyさん
2007/10/05(金) 17:39:05ID:???PHP4だったら $tmp の持っている値を $hoge に代入になるんだけど
PHP5は $hoge =& $tmp を暗黙に行う
0413nobodyさん
2007/10/05(金) 20:06:21ID:/jiD7c/gphpだとどのようにしたらできますか?
0414nobodyさん
2007/10/05(金) 20:08:38ID:/jiD7c/g0415nobodyさん
2007/10/05(金) 20:11:26ID:???0416nobodyさん
2007/10/05(金) 20:14:47ID:/jiD7c/g平たくいうとlolipopのレンタルサーバです。
0417nobodyさん
2007/10/05(金) 20:20:31ID:???0418nobodyさん
2007/10/05(金) 20:26:08ID:???0419nobodyさん
2007/10/05(金) 20:45:34ID:/jiD7c/g>>417
それは何かの関数で使うんでしょうか?
■ このスレッドは過去ログ倉庫に格納されています