【PHP】下らねぇ質問はここに書き込みやがれ 44
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2007/04/12(木) 16:54:47ID:???PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。
過去スレ、関連スレ、FAQなどは>>2-10辺り
◆前スレ
【PHP】下らねぇ質問はここに書き込みやがれ 43
http://pc11.2ch.net/test/read.cgi/php/1175368910/
◆質問する時の注意
・ 自分のIDを表示させること。(メール欄に何も記述しないこと。空白も入力しちゃダメ)
・ サーバーのOS(Linux、Windows他)、WebサーバーとPHPの種類やバージョン等を明記すること。
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
◆質問後の注意
・偽者防止に必ずIDを表示させること。(メール欄に何も記述しない)
・2回目以降は最初に質問した際のレス番号を名前欄に入れること。
・解決しなくても回答をもらった場合はお礼を言うこと。
(荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)
◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
【その他諸注意】
・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
・SQLについての質問はデータベース板(PCカテゴリ)の各スレで
0362nobodyさん
2007/04/19(木) 04:00:05ID:???何らかのオブジェクトとそのコレクションを収めるためのクラスとかね。
0363nobodyさん
2007/04/19(木) 08:33:00ID:???数クラスで完結するような小規模スクリプトは一ファイルですましちゃうけど。
0364nobodyさん
2007/04/19(木) 10:01:37ID:hqZ1gGO60366nobodyさん
2007/04/19(木) 11:06:01ID:???<p>なんたらかんたら</p>
<?php include('footer.php'); ?>
とするより、1つのPHPファイルにまとめて
<?php include('chinko.php'); printHeader(); ?>
<p>なんたらかんたら</p>
<?php printFooter(); ?>
ってやるほうが賢い選択でしょうか?
教えてエロイ人
0367nobodyさん
2007/04/19(木) 11:07:26ID:???0368nobodyさん
2007/04/19(木) 11:16:12ID:???0369nobodyさん
2007/04/19(木) 11:16:39ID:hqZ1gGO6パス間違ってないのに関数がFALSE返してコピーされないのよ。
ちなみにwindows版。
0370虚弱PHP
2007/04/19(木) 11:19:49ID:???0371nobodyさん
2007/04/19(木) 11:53:40ID:???245バイトまでOKだったな。
多分windowsの制限じゃないの?
0372nobodyさん
2007/04/19(木) 12:23:32ID:suDQqd220375nobodyさん
2007/04/19(木) 12:37:41ID:???の場合、<?php 〜〜〜 ?>をエスケープするだけでいい?
(しないとPHPコードが実行されるような状態)
ちなみにタグOKなのでhtmlspecialcharsはしません
0376nobodyさん
2007/04/19(木) 12:56:30ID:???http://pc11.2ch.net/test/read.cgi/php/1164617202/377-
>>375
index.phpに書き込んで表示の意味が分からない
0377nobodyさん
2007/04/19(木) 13:08:25ID:???つlast_insert_id
PHP固有の話ではないのでスレ違いだな。
さらに話を続けたければMySQLのスレに行くべし
0378nobodyさん
2007/04/19(木) 13:19:55ID:???index.phpが投稿内容を表示するページってことか?
んで投稿内容にPHP開始タグがあるとPHPが実行されるからエスケープするって?
0379nobodyさん
2007/04/19(木) 13:35:51ID:WBNGWxYVclass化して、用途に応じてそのclassを実行しているのですが、
複数ファイル内に同じソースの結構があって、このclass処理の部分を
まとめるか否かで悩んでいます。
まとめる=関数にすると言ったイメージがあるのですが、
そもそも関数をまとめているのがclassなわけで、なんか変だと思います。
ただ、共通するclassの部分は別ファイルにして、requireするだけで
良いのかな?とも思いますが、それで良いのかどうかも迷います。
文章では伝わりにくいかもしれませんが、アドバイスいただければ助かります。
0380nobodyさん
2007/04/19(木) 13:36:54ID:???複数ファイル内に同じソースの結構があって ↓
複数ファイル内に同じソースの箇所が結構あって
0381nobodyさん
2007/04/19(木) 13:55:12ID:???間違えている。まーでもPHPは貧弱だから止むを得ないことも...
0382375
2007/04/19(木) 14:08:54ID:???>>378
投稿された文字列をログに入れてecho で表示するんじゃなくて、
PHPファイルに直接書き出すので、
<?php "ああああああああ"?>と入力されると
あああああああが表示されてしまう状態
この場合、PHPがコードとして評価されるのを防げば、
PHP的なセキュリティはOKですか?
0383nobodyさん
2007/04/19(木) 14:10:02ID:???それを実装するための手段として関数だろうがクラスだろうが何でも構わない。
自分にとって便利な方法使えばいいと思うよ。
0385375
2007/04/19(木) 14:29:40ID:???過去ログ機能をそなえた実にすばらしいアイデアなんですよ
書き込むファイルは日付けを元にしたファイル名なので、
日付けが変わるとファイルが切り替わって過去ログになる
いちいち作り直さなくてもOK
20070419.php
<!--ヘッダ部分-->
わたしの掲示板です
あなたは<?php /*カウンタのコード*/ ?>番目のPHP大好きっ子です!
<!--ここから投稿内容 追記モードで書き込む-->
〜〜〜
〜〜〜
〜〜〜
0387nobodyさん
2007/04/19(木) 14:52:31ID:???>>375はindex.phpを書き換えるって書いてるから別人だろう
htmlを書き換えるなら分かるがなぜphpを書き換える必要があるのか理解に苦しむが
0388虚弱PHP
2007/04/19(木) 15:14:29ID:???まあ、「タグOKなので」の時点で多分XSSし放題。
0389364
2007/04/19(木) 15:16:34ID:hqZ1gGO6どうしようもないので、こんな関数作ってみたら成功。
function excopy($src, $dst)
{
exec("copy \"{$src}\" \"{$dst}\" 2>&1", $ary, $ret);
return ($ret == 0) ? TRUE : FALSE;
}
性能には全く変わらず。
phpの内部でパスのバッファが256バイトぐらいの固定長なのかねぇ?
0390虚弱PHP
2007/04/19(木) 15:17:30ID:???> まとめる=関数にすると言ったイメージがあるのですが、
> そもそも関数をまとめているのがclassなわけで、なんか変だと思います。
ここら辺の認識がちょっと違うような気がする。
classをclassとして有効に使うというより、
単なるネームスペースみたいなものとして使ってるんじゃないかな。
0391nobodyさん
2007/04/19(木) 15:18:19ID:RzPJY5VSユーザー登録で”半角英数字のみ”という判定をしたいのですが、どのように判定すればいいでしょうか?
よろしくお願いします。
0392nobodyさん
2007/04/19(木) 15:20:29ID:???正規表現で対応可能。
専用のスレがあるから、次からはそっちで。
if(preg_match("/[^a-zA-Z0-9]/",$str)){
半角英数字以外があった時の処理
}
0393391
2007/04/19(木) 15:22:08ID:RzPJY5VSありがとうございました。さっそく試してみます。
0394虚弱PHP
2007/04/19(木) 15:32:45ID:???よくわからないので、簡単に調べてみた。
Windowsではフルパスが
MAX_PATH 260
で定義されてて、
PHPのソースでもそのまま使ってるみたい(たぶん /main/php.h)。
execだとOSがショートファイル名使ってるのかもしれないね。
0396379
2007/04/19(木) 16:07:02ID:???例えば、「データベースに登録している特定の情報を出力するclass(又は関数)」
があったとして、それをlist.phpでもsearch.phpでも使用している。
という事に関してこれで良いのか否か悩む時があります。
list.phpでもsearch.phpでも同じコードを書くわけですから、classの意味があるのかと。
自分にとってはclass化(モジュール化)してだいぶ効率が上がったのですが、
更に効率が上がる方法はないかと思い、質問した次第です。
>>390
その判断が正直わかりません。他者のコード(例えばXOOPSやphpbbなど)
を見ても、同じコードが出てくる箇所は結構あるし。
周りに聞ける人間がいないので、自分のコード・組み立て方は正しいのか
どうか迷う時があります。WEBシステムとして動けば良いのでしょうが。。
0397nobodyさん
2007/04/19(木) 16:15:17ID:???状況がよくわからないけど、ほとんど同じ振る舞いをするバリエーションであれば、
共通部分を括りだして基底クラスを作って、改めて既存のクラスをそこから派生させてやればいいのでは?
0398虚弱PHP
2007/04/19(木) 16:52:24ID:???もうちっと具体的にならないと、
どう設計したらいいかのアイデアは出てこないと思う。
例えば、こういった感じのふたつの処理があるとする。
1) update.php(更新→リスト表示)
2) list.php(リスト表示)
この場合、リスト表示は同じ処理になっちゃう。
でも同じ処理なんだから共通化したいよね。
そしたら処理を細分化して、
1. function update()
2. function list()
1)' 1を呼ぶ → 2を呼ぶ
2)' 2を呼ぶ
とすることで解決。
ここら辺はできてるんじゃないかな?
MVCフレームワークだと1)'や2)'がControllerだね。
1や2がModel。
1)'' 1を呼ぶ → 2を呼ぶ → 表示処理
2)'' 2を呼ぶ → 表示処理
とすると一応MVC。
で、>>396 は何に悩んでいるかだ。
0400nobodyさん
2007/04/19(木) 16:58:19ID:???0401虚弱PHP
2007/04/19(木) 17:06:06ID:???Mojaviで言うActionChainになると思う。
で、ActionChainみたいなのはContollerより上位の考え方だし、
Controllerよりもっと基本レベルで、
(例えば)入力の標準的なValidatorを通したいとか、
権限によって処理を実行するかしないかみたいな、
振り分けをしたいと思うようになる。
そうしたら、Javaで言うServletコンテナみたいなコンテナを用意して
そこら辺の処理をやらせたり。
…とここら辺で俺は満足しちゃったんだけど。
0402379
2007/04/19(木) 17:08:05ID:???詳しくご説明ありがとうございます。
例えば
a)function memberData(); //会員情報を表示
b)function bbsData(); //掲示板の書き込み内容
c)function categoryData(); //カテゴリ
があるとします。この基本セットは
登録一覧表示(list.php)や検索表示(search.php)
など、一般的にしようするとします。
しかし、list.phpにdが出てきた場合はどうするか?list.phpにdの関数(又はclass)
だけ追加してやればいいのか?もしくは、外部ファイルに分けて読み込むように
した方が良いのか?と言うのが悩みです。
398さんの例で言うと (共通した3を追加する場合)
1を呼ぶ→2を呼ぶ→3を呼ぶ
2を呼ぶ→3を呼ぶ
で良いのかな?と思うわけです。わかりづらかったらすみません。
0403nobodyさん
2007/04/19(木) 17:08:41ID:???0404nobodyさん
2007/04/19(木) 17:11:07ID:???やっぱり同じクラスを2つのページに書いてるの?
処理a, b, c, dがあるクラスを両ページでincludeすればいいんじゃないでしょうか?
0405379
2007/04/19(木) 17:15:28ID:???そうですね。例えば一覧表示(list.php)の場合は検索のclassはいりませんが、
>>402の例で言うと、a〜cまでのclass(関数)は使っています。
そして検索用のファイル(search.php)では、検索用のclass(例ではd)
を追加している。といった感じです。
現在は両ページでincludeしているのですが、a〜cまでは共通しているので
更にa〜cまでまとめてincludeした方が良いのかな?と言うのが悩みです。
0406nobodyさん
2007/04/19(木) 17:20:55ID:???関数集としての使い方しかしてないみたいだし、普通にfunctions.phpにでも関数入れて
各ページで読み込ませることにしたほうがいいんじゃね?
んでこれが終わったらオブジェクト指向・設計とかクラスとかについて勉強するといいと思われ。
0408nobodyさん
2007/04/19(木) 18:37:31ID:???0409379
2007/04/19(木) 19:02:47ID:???オブジェクト指向化していると思うのですが、
自分の思う基準が一般的な基準と違うかもしれませんし。
アドバイスいただいた方、ありがとうございました。
0410虚弱PHP
2007/04/19(木) 19:07:32ID:???まあ、class使ってカプセル化する事がオブジェクト指向ではないので。
(といいつつ、定義は難しいよね)
デザインパターンとか勉強してみるといいかも。
0411nobodyさん
2007/04/19(木) 19:26:32ID:???変数がそのまま残るってこと?
だったら消えてくれたほうが使いやすい
0412nobodyさん
2007/04/19(木) 19:29:19ID:???0413nobodyさん
2007/04/19(木) 19:36:20ID:JjAom0RF特定のクラスを使えるようにしたいのですが、
なんかそういう方法ありますか?
パスとおすみたいなことができればおしえていただきたいです。
0414nobodyさん
2007/04/19(木) 20:08:09ID:E0JBJHfw上記の文字列の、「12345678901」の部分を取得したいのですが、
$ascii="DoCoMo/2.0 YYYY(c10;ser12345678901; icc12345678901234567890)";
preg_match("/ser(.*);/",$match,$agent);
でマッチしないです。
"/ser\d{15};/"
も試してみたのですが同じです。
この部分はどのような文でマッチさせるのがベストなのでしょうか?
0415nobodyさん
2007/04/19(木) 20:27:19ID:???するけど?
ていうかなんかおかしいぞ。変数が。
$ascii="DoCoMo/2.0 YYYY(c10;ser12345678901; icc12345678901234567890)";
if (preg_match("/ser(.*);/", $ascii) {
echo "match";
}
0416415
2007/04/19(木) 20:28:24ID:???if (preg_match("/ser(.*);/", $ascii) {
↓
if (preg_match("/ser(.*);/", $ascii)) {
0417nobodyさん
2007/04/19(木) 20:29:58ID:E0JBJHfwあー
比較する変数と比較した結果が格納される変数を
書く場所が逆でした
ありがとうございます
0418nobodyさん
2007/04/19(木) 21:11:25ID:g61ARuJQphp5を使っています。
先ほどCall to undefined function: array_combine() とエラーが出てしまいました。
sqliteは使えるのでPHP5はインストール出来ていると思います。
何か設定がいるのでしょうか?
ちなみに、同じプログラムは自宅の環境では動いています。
0419nobodyさん
2007/04/19(木) 21:14:24ID:???http://jp.php.net/manual/ja/language.oop5.autoload.php
0422nobodyさん
2007/04/19(木) 22:01:09ID:3qk/G7nZselect * from table where 1;
とかして、1回のクエリで全部取得して、配列などを駆使して頑張って表示するか、
select column from table where group = 1;
みたいなクエリを数回実行して、
数回にわたり、クエリ送信→結果取得・表示を繰り返すのは、
どちらが一般的な方法なのでしょうか?
あと結果取得する際は、fetch_assocやfetch_objectなど
さまざまな関数がありますが、どの関数を使うのが一般的ですか?(もちろん用途によるでしょうが)
0424nobodyさん
2007/04/19(木) 22:10:07ID:???大抵の場合は速いのでDBへのクエリ発行は基本少なくした方が良い
配列でとるかオブジェクトでとるかは好みでいいと思うが
最初は配列でいいんじゃないかな
0425nobodyさん
2007/04/19(木) 22:11:20ID:3qk/G7nZ具体的にテーブルの構成は、
ID, GROUP(int), NAME(char), DESCRIPTION(char)ってかんじで、
GROUP別にNAMEとDESCRIPTIONを表示するだけなんですけど、
イメージとしては
<table>
<tr>
<td rowspan="3">Group1</td>
<td>Name</td><td>Description</td>
</tr>
<tr>
<td>Name</td><td>Description</td>
</tr>
<tr>
<td>Name</td><td>Description</td>
</tr>
</table>
ってかんじです。
#だいぶスレ違いすみません。
0426nobodyさん
2007/04/19(木) 22:15:09ID:3qk/G7nZレスありがとうございます。
>SQLが複雑になっても1回のクエリにした方が
>大抵の場合は速いのでDBへのクエリ発行は基本少なくした方が良い
やっぱそうですよねー
まだ1度で全てやったことはないので勉強がてら頑張ってやってみようと思います。
>配列でとるかオブジェクトでとるかは好みでいいと思うが
ではオブジェクト慣れしてないので配列で頑張ってみます。
0427nobodyさん
2007/04/19(木) 22:26:41ID:???0428nobodyさん
2007/04/19(木) 23:40:32ID:0KeZVqYASimpleXMLのasXML()を使ってxmlファイルを作成する際に、
インデントさせた形でxmlファイルに書き込むにはどうすればよいですか。
$xml = simplexml_load_file('example.xml');
$a = $xml->addChild('a');
$b= $a->addChild('b', 'hoge');
$c = $a->addChild('c','fuga');
$xml->asXML('example.xml');
example.xml:
<a><b>hoge</b><c>fuga</c></a></a>
↑これを
<a>
<b>hoge</b>
<c>fuga</c>
</a>
↑このように整形した形でファイルに
書き込見たいのです。
0430nobodyさん
2007/04/19(木) 23:47:20ID:???0431428
2007/04/20(金) 00:07:56ID:b3irjh4Dすばやいレスありがとうございます。
仕様なら仕方ないですね。
ほかの方法であたってみます。
ありがとうございました。
0432nobodyさん
2007/04/20(金) 00:09:40ID:???grepで確認してSimpleXMLElementからオーバーライド
0433nobodyさん
2007/04/20(金) 00:19:50ID:SGW4zUZisession.gc_probability, session.gc_divisor の設定では
自動で GC が行われないということですが、
/var/tmp // 自動で GC される
/home/usr/tmp // 自動で GC されない
という解釈でよいのでしょうか?
0434nobodyさん
2007/04/20(金) 00:31:36ID:???DomDocument->dump_file()なら第一引数をTRUEにすれば
整形されるらしいから、そっち使えば
0435nobodyさん
2007/04/20(金) 01:19:08ID:???array(
array('a', '1'),
array('b', '2'),
array('x', '5')
)
と言う配列を手っ取り早く
array(
'a' => '1',
'b' => '2',
'x' => '5'
)
にする方法はないかな?
ヨロシク!
0436nobodyさん
2007/04/20(金) 01:20:37ID:tutvnVSF0438nobodyさん
2007/04/20(金) 01:24:22ID:???0439nobodyさん
2007/04/20(金) 01:27:16ID:???010010
と
100010
を処理して
110010
という感じの処理をしたいのですが、これをなんと言うのですか?
またやり方を知りたいです。
ビットを立ててフラグを管理するようなのを見るのですが、やり方がわかりません。
0441nobodyさん
2007/04/20(金) 01:46:45ID:VuqLwFSH沖縄県での選挙ですが、どうか民主党だけは避けてください。県民の生命に関わる可能性があります。
民主党の最大の公約は一国二制度(※)ですが、一度「一国二制度 沖縄 三千万」で検索をお願いします。
この際、民主党のHPで調べても良いです。以下の注釈↓と矛盾することは書いてないはずですから…
※一国二制度
簡単に言えば沖縄を中国と日本の共有物にし、そこに3000万人の中国人を入植させます。
(つまり沖縄人口の 96% を中国人にして、実質、沖縄を中国人の居住地とします。)
さらに「自主」の名の下、沖縄で有事が起きても自衛隊は干渉できません。
3000万人の中国人が、少数派となった130万人の日本人に何をしても、です。
そして反日教育を受けた中国人の反日感情の強さは、ほとんどの日本人の理解を超えるものです。
今回の選挙で民主党が勝った場合、「自主」「発展」を連呼しつつ段階的に進めていくことになります。
自主と言っても、自主を認めるのが「住人の96%が中国人となった」後だということに気をつけてください。
発展と言っても、新沖縄の少数派となった「少数民族日本人」の発展ではないことに気をつけてください。
0442nobodyさん
2007/04/20(金) 01:49:49ID:???XMLってエラーあるとページ表示されんのかな?
0443nobodyさん
2007/04/20(金) 01:51:30ID:???0444442
2007/04/20(金) 01:57:19ID:j6HhIKSH>>443
CSV形式のファイルをPHPを使ってXMLに書き出そうと思うのですが、
なかなかうまいこといかずに苦戦中・・・
XML宣言してるのに形式が.phpだから表示されなかったり・・・
0445nobodyさん
2007/04/20(金) 02:01:22ID:???そりゃ当たり前だ。
htaccessで拡張子phpをxmlとして動作させるようにしないと。
phpでechoでxmlを出力してるなら、headerでxml指定すればいい。
0446nobodyさん
2007/04/20(金) 02:03:50ID:j6HhIKSH.xmlで実行させてみたんだけど
宣言の<?xml〜?>がPHPとして認識されてしまう・・・
とりあえずヘッダーで出力してみることにします
0447nobodyさん
2007/04/20(金) 02:08:58ID:???ビット演算
>>440
ちゃうよ
>>446
別に妥当なXML文書が出力できてればPHPで実行しようと問題ないだろ
0448nobodyさん
2007/04/20(金) 02:09:34ID:j6HhIKSH- <rss version="2.0" xmlns:blogChannel="http://backend.userland.com/blogChannelModule">
- <channel>
- <item>
<title>最新データをXMLで出力</title>
<link>http://www.yahoo.co.jp/</link>
<pupDate>2007/4/20</pupDate>
</item>
- <item>
<title>CSVで保存してPHPで出力</title>
<link>http://www.yahoo.co.jp/</link>
<pupDate>2007/4/19</pupDate>
</item>
- <item>
<title>XMLでも出力</title>
<link>http://www.yahoo.co.jp/</link>
<pupDate>2007/4/18</pupDate>
</item>
- <item>
<title>役にたつかな?</title>
<link>http://www.yahoo.co.jp/</link>
<pupDate>2007/4/15</pupDate>
</item>
- <item>
<title>オナかすいた</title>
<link>http://www.yahoo.co.jp/</link>
<pupDate>2007/4/13</pupDate>
</item>
</channel>
</rss>
0449nobodyさん
2007/04/20(金) 02:10:07ID:j6HhIKSH更新ボタン押すたびに
XML ページを表示できません
スタイル シートを使用した XML 入力は表示できません。エラーを訂正してください。 [更新] ボタンをクリックするか、または後でやり直してください。
--------------------------------------------------------------------------------
指定したエンコードはシステムでサポートされていません。リソース 'http://localhost/XML/make.php' の実行エラーです。
というページが表示されるが・・・orz
0450nobodyさん
2007/04/20(金) 02:11:27ID:???0451nobodyさん
2007/04/20(金) 02:13:37ID:???0454nobodyさん
2007/04/20(金) 02:16:09ID:tutvnVSF元のは必ず多次元配列になるんでarray_flipは使えないモヨリ。
0455nobodyさん
2007/04/20(金) 02:17:56ID:???キー部分が変えられなかった。
0456nobodyさん
2007/04/20(金) 02:20:02ID:???<?php
header('Content-Type: application/xml; charset=utf-8');
echo "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n";
?>
<rss>
</rss>
0457nobodyさん
2007/04/20(金) 02:21:30ID:j6HhIKSHあー、
なるほど、charsetのところに文字コードの変数じゃなくて別の変数を当てはめていたのが原因でした
0458nobodyさん
2007/04/20(金) 02:22:09ID:???0459nobodyさん
2007/04/20(金) 02:22:38ID:j6HhIKSHちなみにこんなコードになってます
http://www.dotup.org/uploda/www.dotup.org2686.txt
こりゃおかしくなるわwwwwwwww
0461nobodyさん
2007/04/20(金) 02:25:59ID:???■ このスレッドは過去ログ倉庫に格納されています