【PHP】下らねぇ質問はID出して書き込みやがれ 78
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2008/12/23(火) 19:08:55ID:???過去スレ、関連スレ、FAQなどは>>2-10辺り
次スレは>>980が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。
◆前スレ
【PHP】下らねぇ質問はID出して書き込みやがれ 76
http://pc11.2ch.net/test/read.cgi/php/1226517332/
◆質問用テンプレ
【OS名】vine linux
【PHPのバージョン】php5.26
【連携ソフトウェア】mysql
【質問内容】
◆質問する時の注意
・ スレを上げて自分のIDを表示させること。(メール欄に何も記述しない。専ブラのsageチェックを外す)
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に関連リンクの公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
(PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。)
◆質問後の注意
・2回目以降は最初に質問した際のレス番号を入れて、偽者防止に必ずIDを表示させること。
・解決しなくても回答をもらった場合はお礼を言うこと。
(荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)
◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
0067nobodyさん
2008/12/24(水) 14:12:57ID:???まさかとは思うが開発をPHP5でやって本番はPHP4とかないよな?
あと変数の初期化はコンストラクタで行っているんであって
宣言時にarray値をぶちこんでたりしないよな?
0068nobodyさん
2008/12/24(水) 14:19:03ID:???0069nobodyさん
2008/12/24(水) 14:23:45ID:oUm0Exnm例えばtxtファイルが100MBくらいになるとか。
また既存のシステム(txt)からmysqlにアップグレード可能ですか?
0070nobodyさん
2008/12/24(水) 14:26:48ID:???この場合、41行目じゃなくて、
それより前に(の後のクォートが閉じられていないんだと思うよ。
(もしくは、そのクォートが文字コードの問題でエスケープでこけてるとか。)
だから、41行目の開始クォートで逆にクォートが閉じ、
そこに期待される閉じ括弧がなくて文字列があるぞってエラー
だから、41行目をコメントアウトすると、正しいはずの別の宣言文で
同じロジックでエラーが移動していく。
59氏は恥ずかしがらずにソース貼ってみて。
0071nobodyさん
2008/12/24(水) 14:28:07ID:???とりあえず、やってみたら?
プロセスに十分なメモリが当たってれば大丈夫でしょう。
テキストから、MySQLにインポートとか、普通にできる。
0072nobodyさん
2008/12/24(水) 14:30:38ID:oUm0Exnmありがとうございます
mysqlは『基礎からのMysql』の95ページを読み終えたレベルですが、がんばってやってみます。
0073nobodyさん
2008/12/24(水) 14:34:12ID:???100Mになる前にメモリーのリミットが限界値を越えて
テキストから全データを呼びだして配列にしたりすることが
出来なくなる
もしくはリミットが200Mとかになっているなら開くまでに
かなりの時間がかかりどうさが遅くなりタイムアウトに
ひっかかって落ちる
0074nobodyさん
2008/12/24(水) 14:37:01ID:???メモリーリミットってそこ?
fopenするだけなら、ファイルハンドルを取得するだけだから、
file()しないでfread()なら大丈夫じゃない?
007558
2008/12/24(水) 14:52:51ID:AHayykgcconfig.logがどこにあるかわからん初心者です
./configureだけで通しても、同様にだめでした
0076nobodyさん
2008/12/24(水) 14:54:58ID:???config.logが読めないんなら、おとなしく、yumで入れるとかしたら?
リポジトリを[centosplus]にすればPHP5だよ。
007858
2008/12/24(水) 15:02:54ID:AHayykgc実験鯖でいじくりまわす練習してるので、yumだと意味がないです
参考サイトでも教えてくだされ
0079nobodyさん
2008/12/24(水) 15:03:49ID:???0080nobodyさん
2008/12/24(水) 15:11:53ID:???とりあえず、config.logを探してみたら?
unixコマンドの知識0でソースからコンパイルしても何の意味もないでしょ。
まぁ、普通に./Configureした作業ディレクトリ内にあると思うけど。。
0081nobodyさん
2008/12/24(水) 15:15:10ID:???鯖管にでもなりたいのか?
ならスレ違いだ
phpをやりたいのか?
なら慣れてるwindowsでとっとと環境整えて始めろ
0082nobodyさん
2008/12/24(水) 15:33:03ID:???0083nobodyさん
2008/12/24(水) 15:40:57ID:Gn6DSPVu$arr = array('a', 'b', 'c');
という変数から
$data['a']['b']['c']
にアクセスするような関数を作りたいと思っています。
何か良い方法はありますか?
0085nobodyさん
2008/12/24(水) 15:46:30ID:???0086nobodyさん
2008/12/24(水) 15:51:00ID:???引数をループしてアクセスすれば?
配列の要素数が決まってるなら、0 1 2でもいいと思うけど。
まぁ、遊びとしては
eval('$res = $data[\'' . implode("']['", $arr) . '\'];');
008783
2008/12/24(水) 16:04:06ID:Gn6DSPVu出来るだけ綺麗に仕上げたいのでevalは避けたいのです。
call_user_funcあたりの変数呼び出し版みたいなのがあると一番良いんですが。.
0088nobodyさん
2008/12/24(水) 16:06:45ID:???どれだけ綺麗さを求めてるのか知らんけど
008958
2008/12/24(水) 16:24:42ID:AHayykgc-lresolv -lm -ldl -lnsl -lxml2 -lz -lm 1>&5
/usr/bin/ld: skipping incompatible /usr/lib/libz.so when searching for -lz
/usr/bin/ld: skipping incompatible /usr/lib/libz.a when searching for -lz
/usr/bin/ld: cannot find -lz
collect2: ld returned 1 exit status
configure: failed program was:
#line 20123 "configure"
#include "confdefs.h"
char xmlInitParser();
int main() {
xmlInitParser();
return 0;
}
ここまでです
0090nobodyさん
2008/12/24(水) 16:25:39ID:???while($res = mysql_fetch_array( $sql )){
print "<a href='".$res["url"]."'>".$res["name"]."</a><br>";
$month = date("n月j日", $res["time"]);
print $month."<br>";
}
これでカラム名time(date型)に入ってる(2009-1-1)のようなデータを
1月1日というように表示させたいです。
上の文だと一番上のレコードの日時はきちんと表示されるんですが
以降ずっと最初の日時のみ表示されてしまいます。
なぜですか?
0091nobodyさん
2008/12/24(水) 16:28:05ID:???009290
2008/12/24(水) 16:34:44ID:???【PHPのバージョン】php5.26
【連携ソフトウェア】mysql
【質問内容】
>>90
補足ですが
$month = date("Y:n月j日", $res["time"]);
としたら1970:1月1日 と表示されたので根本的に間違ってました。
もう一度まとめますが
カラム名time(date型)に入ってる(2009-1-1)のようなデータを
1月1日というように表示させるにはどうすればよいでしょうか?
0093nobodyさん
2008/12/24(水) 16:37:32ID:???スレチだな。
しかし、一応ヒントだけldの設定をちゃんとすればOKだと思うけど、
yum install zlib-devel
してみそ。
あとは、祈れ
0094nobodyさん
2008/12/24(水) 16:38:01ID:???0095nobodyさん
2008/12/24(水) 16:38:51ID:9cQH1zL0mbstring.script_encodingが意図しないものになり、たまにエラーになったようです。
'--enable-zend-multibyte' を消して再コンパイルしたら発生しないようになりました。
009690
2008/12/24(水) 16:40:23ID:GAo/2aEbすみません。
全然ちゃんと読んでませんでした。
009758
2008/12/24(水) 16:43:00ID:AHayykgc無事成功しました、ありがとう
0098nobodyさん
2008/12/24(水) 16:44:11ID:???date関数の第二引数はunixタイムスタンプです。日付を渡しても無理。
strtotimeかませばOK。
$month = date("Y:n月j日", strtotime($res["time"]));
010090
2008/12/24(水) 16:47:48ID:GAo/2aEbありがとうございます。
きちんと表示されました。
0101nobodyさん
2008/12/24(水) 17:37:15ID:???0102前スレ745
2008/12/24(水) 18:07:23ID:???やってみました.基本的に $this-> 付けないとダメだと理解しました
C++ のときは何もつけなくてもよかったのでややこしいです
$hoge = "global::hoge";
// 次の関数定義を削除すると A::func() の最後の行で Fatal error: Call to undefined function piyo()
function piyo() {
echo "global::piyo()\n";
}
class A
{
private $hoge = "A::hoge";
private function piyo() {
echo "A::piyo()\n";
}
0103前スレ745
2008/12/24(水) 18:08:45ID:???public function func() {
var_dump($this->hoge);
var_dump($hoge);
// これは予期した通りに動作する
$this->hoge = 'with $this->';
var_dump($this->hoge);
var_dump($hoge);
// この $hoge は関数 func() のスタックに積まれた変数を参照?
$hoge = 'without $this->';
var_dump($this->hoge);
var_dump($hoge);
// A::piyo() を呼ぶ
$this->piyo();
// グローバルな piyo() を呼ぶ
piyo();
}
}
$a = new A();
$a->func();
0104前スレ745
2008/12/24(水) 18:09:27ID:???出力結果:
string(7) "A::hoge"
NULL
string(12) "with $this->"
NULL
string(12) "with $this->"
string(15) "without $this->"
A::piyo()
global::piyo()
0105nobodyさん
2008/12/24(水) 18:24:58ID:???報告乙です。マニュアルも見たらいいよ
ちなみに、PHPはオブジェクト指向言語ではないので、過剰な期待はしないように
http://jp2.php.net/manual/ja/language.oop5.php
javaでもperlでもc++でもないんですよ、PHPは
0106nobodyさん
2008/12/24(水) 19:06:28ID:???0107nobodyさん
2008/12/24(水) 19:56:58ID:???0108nobodyさん
2008/12/25(木) 03:10:56ID:aKyYzPmfどちらを使うべき?
0109nobodyさん
2008/12/25(木) 03:15:10ID:???0110nobodyさん
2008/12/25(木) 03:28:44ID:aKyYzPmf0111nobodyさん
2008/12/25(木) 03:29:37ID:aKyYzPmfって書いてあるけど、もし派生クラスが30もあったら
調べるの大変だよね?
0112nobodyさん
2008/12/25(木) 03:31:18ID:???0113nobodyさん
2008/12/25(木) 03:37:29ID:aKyYzPmf0114nobodyさん
2008/12/25(木) 03:38:06ID:???0115nobodyさん
2008/12/25(木) 03:43:27ID:???それだと継承する意味ないよね。
子クラスから親クラスのメソッド一切使えないなんて。
だから、半分private、半分protectedにするのが最適解?
0116nobodyさん
2008/12/25(木) 03:47:27ID:???お前の巣
クリスマスに女性声優が男と過ごしていないか監視するスレ
http://tsushima.2ch.net/test/read.cgi/news/1230135292/
0120nobodyさん
2008/12/25(木) 04:26:20ID:???子クラスから親クラスのメソッド使用不可になる?
0121nobodyさん
2008/12/25(木) 04:27:15ID:???0122nobodyさん
2008/12/25(木) 04:57:35ID:???一人OOPで何悩んでるだよw
外から使うメソッド=publicで、その他privateだろうが
protectedなんざ何に使うの?
え?継承?www
またまたご冗談を
一人で開発しててポリモるなんて無理やりだろ
てんで必要のないとこでポリモるってかw
そんなことしても後からメンテするときにこっぱ恥ずかしくなるだけだからやめとけって
どうしても使いたいなら俺ライブラリを一般化して公開することだなw
0123nobodyさん
2008/12/25(木) 04:58:56ID:???そいつが合流したらすぐに2人になるだろ
0124nobodyさん
2008/12/25(木) 05:20:43ID:???PHP→低額案件多い→だれもやりたがらない→ダメな人だけ残る→php板に隔離される
0125nobodyさん
2008/12/25(木) 05:38:20ID:???0126nobodyさん
2008/12/25(木) 05:59:21ID:???というような方々は 「くらす ってなに? おぶ
じぇくとってなに?いんすたんすってなに?」
というような方々を多いように見受けられま
すね。
業務としてシステム構築する際に人がいない
からといって、PHPのみの経験者を開発メン
バーに入れると SEさんが痛めみます・・・・orz
そういう方々がセキュリティ的な意識も低いせ
いか、PHPはセキュリティに甘い という風潮が
あるようです
0127nobodyさん
2008/12/25(木) 06:04:37ID:???ってPHP4から仕方なく引き継いだグダグダ仕様らしいな
0128nobodyさん
2008/12/25(木) 06:36:01ID:???0130nobodyさん
2008/12/25(木) 08:21:19ID:???JavaもC++も、クラス名と同名のメソッドはコンストラクタと見なされる。そう珍しい仕様でもない。
「マジックメソッド(笑)」のような予約された名前を使わないなら、「特別な関数」を関数名だけで表す唯一の方法だからな。
>111
派生クラスを読むときに、親クラスを読む手間がかかるだけ。
派生クラスを読むときに兄弟にあたるクラスを読む必要はないし、親クラスを読む時は親だけ読めばいい。
0131nobodyさん
2008/12/25(木) 08:35:14ID:???解説サイトやらブログやら覘いて質問立てるんなら、引用元書いてくれ
ブログ記事を誤解して質問されてもなぁ
あぁ、でも糞サイト晒すならブログ板かw
0132nobodyさん
2008/12/25(木) 08:35:46ID:???このページに
「オブジェクト指向の世界では変数を参照するのに、
「アクセッサ」と言う関数を通して参照すると言う変な習慣が有ります。
これは値の設定の時にチェックしたり、
値の返却の時に編集したりするのが楽になるためと言われていますが、
多分、ステップ換算の案件の時に、より多くふんだくれるからだと思います。」
って書いてあるが本当?
0136nobodyさん
2008/12/25(木) 09:06:44ID:aKyYzPmf$a="hoge1";
for ($i=1;$i<=10;$i++){
print $a;
print "<br>";
$a++;
}
?>
これ実行したら10番目の結果に吹いた
これを事前に予測できる勇者は
そういないと思う
0137nobodyさん
2008/12/25(木) 09:12:17ID:???で始めるといいよ
0139nobodyさん
2008/12/25(木) 09:26:30ID:???class User{
function getName(){
return $this->name;
}
function getMail(){
if(false === isset($this->mail)){
$this->mail = $this->loadMainAddressFromDb(); // 重い処理
}
return $this->mail;
}
function getUrll(){
return $this->homepage->getUrl();
}
}
・遅延初期化を使える(getMail()。必要になるまで変数の中身を取りに行かない、初期化が重い場合に有効)
・内部構造を隠蔽できる(getUrl()。直接変数にアクセスする構造だと、このような内部構造を取れないし、後からこういう風に変更もできない)
・publicでメンバを公開すると、その値に変数を好き勝手に代入できてしまう。getterだけを公開しsetterを作らないと、メンバーの変更を自分とこだけで管理できる
0140nobodyさん
2008/12/25(木) 09:39:57ID:???0141139
2008/12/25(木) 09:45:53ID:???というか読んで吹いた。ダメだこの記事。
カプセル化はなんとか分かってるがオブジェクト指向が分かってないレベルだな。
O/Rマッパというのは「オブジェクト/リレーショナルDBマッパ」のこと。
例えばUserってテーブルにmailとnameってフィールドがあった場合に、
class User extends ORMapper{}
と宣言するだけで、$user->mailとかにアクセスできるようになるのが正しいO/Rマッパ。
(当然、DBへの値の挿入もメンバー変数代入のように実行できる。永続化のタイミングは実装次第だが)
こいつの書いてる「O/Rマッパ(笑)」は、単なるDB抽象化レイヤー。つまりPDO。
PHPだと、CBL_ActiveRecordがコンパクトな実装で比較的読みやすい。
0142nobodyさん
2008/12/25(木) 09:56:11ID:???初期化が必要なのがダサいが。
0144nobodyさん
2008/12/25(木) 10:10:09ID:mYLTQOpT【PHPのバージョン】PHP 5.2.6
【連携ソフトウェア】mysql
【質問内容】PHPでExcel-XMLを操作できるライブラリ
PHP で Excelファイルを操作、編集できるライブラリはないでしょうか?
JavaならApache POIに相当するようなものです。
Class: Excel XML Parser (excel, xmlparser, xml_parser.php, excel reader) - PHP Classes
http://www.phpclasses.org/browse/package/3187.html
検索して見つけたこれを試してみましたが、Excelのセルのを一つずつ書き換え
ることができるだけでした。
0145nobodyさん
2008/12/25(木) 10:20:24ID:???0146nobodyさん
2008/12/25(木) 10:25:04ID:RfhezXXN日本語対応は可能でしょうか?
注意点などありますか?
0147nobodyさん
2008/12/25(木) 10:30:28ID:sOMAc6ie$test['aaa']の方が速いのは分かるんですが、
$test['aaa']と$test[0]だとどっちが速いですか?
コード上見て分かりやすいって理由だけで連想配列にするなら、
ただの配列にしといた方が良かったりしますか?
0149nobodyさん
2008/12/25(木) 10:54:42ID:???天然?
> $test['aaa']と$test[0]だとどっちが速いですか?
forループして、CLIで実行すればすぐわかると思うよ。
やってみてレポートしたら?
> コード上見て分かりやすいって理由だけで連想配列にするなら、
> ただの配列にしといた方が良かったりしますか?
良いかどうかはどういう観点かによる。
どういう観点での良しあしが知りたいの?
0150nobodyさん
2008/12/25(木) 11:22:44ID:sOMAc6ie試しに3万個の要素入れて計ってみました
連想配列にしない方が若干速かったです。
質問するようなことじゃなかったですね。すんません。
経緯をいうと、
キーを2種類どちらかのフラグとして持ちたかったので、
以下のように文字列としてもつか数字としてもつか悩んでたんです。
$test[]['default'] = 'hoge';
$test[]['advance'] = 'wwww';
$test[][0] = 'hoge';
$test[][1] = 'wwww';
コード上は文字列にしといた方が何のフラグがすぐ分かるので良いかなぁと、
でも速度に差があるなら数字の方が良いのかなぁと。
若干速いので数字で持つことにします。意味はコメントにいくらでも書けばいいので。
0151nobodyさん
2008/12/25(木) 11:42:13ID:???計測乙。
3万個も使うのか・・・そこまで速度が必要なケースなんだ・・
設計は人それぞれだからいいんだけどね。
0152nobodyさん
2008/12/25(木) 11:47:31ID:???015383
2008/12/25(木) 14:18:17ID:2wMGCLSI変数を取得するのはforeachで実現できました。有り難う御座いました。
しかし変数をsetする方法が思いつきません。
クラス内の変数にsetする例を考えています。
$arr = array('a', 'b', 'c');
$data = 'abc';
$cls->setVar($arr, $data);
とするとsetVar()内では
function setVar($arr, $data)
{
// $arrを下記の通りに展開して$data代入
// つまり以下のようなことがしたいです
$this->data['a']['b']['c'] = $data
}
何か良い案がありましたらお願いします。
0155nobodyさん
2008/12/25(木) 14:26:01ID:???何がやりたいんだか知らんが、構造的に破綻すると思うぞ。それ
そんなにぐだぐだやるんだったら、素直にArrayObjectでも使った方がいいぞ。
015683
2008/12/25(木) 14:32:02ID:2wMGCLSI具体例お願いします。
ちょっとお手上げです。
>>155
QuickTimeのAtomにObject的にアクセスするって云うことをやっています。
ファイル構造ググって頂ければ何となく分かるかと思います。
0157nobodyさん
2008/12/25(木) 15:07:42ID:???class test {
public $data = array();
function setVar($arr, $val)
{
do{
$val = array(array_pop($arr) => $val);
}while($arr);
$this->data = array_merge_recursive($this->data, $val);
}
}
0158nobodyさん
2008/12/25(木) 15:12:57ID:???ttp://okayama.cool.ne.jp/dvd2cd/atom/atomformat.html
俺なら、ArrayObjectでメソッドチェーンするけど、
ま、自由だから好きにやったらええわ。
015983
2008/12/25(木) 15:30:11ID:2wMGCLSI有り難う御座います。正確に動作しています。
こういう方法は思いつきもしませんでした。
>>158
ArrayObjectを使用したことがないのでちょっとあれなんですが、
上記のコードよりも簡単に>>153を実装できるのでしょうか?
宜しければサンプルコードを教えて下さい。
0160nobodyさん
2008/12/25(木) 15:41:03ID:???>>153みたいな実装はしないってことなんだけどね。
a,b,cに意味を持たせる必要があるわけでしょ。
それだったら、
$quickTime
->getBlock(2)
->getMoov("main")
->getTrack("hoge");
みたいに、それぞれの階層に合わせたオブジェクトを作成して、
メソッドで順次取得するっていう話。
んで、ArrayObjectを使えばショートカット的に配列で処理できる。
$quickTime[1]["main"]["hoge"]で、参照を取得できるから、
値のセットもゲットも普通に実装出来るしね。
まぁ、offsetSetの時に一工夫は必要だけど。
ただ、簡単に実装というのは人によって意味が違うから何とも言えん。
わかりやすいかどうかは主観の問題だからね。
0161nobodyさん
2008/12/25(木) 15:44:18ID:???016283
2008/12/25(木) 16:10:25ID:2wMGCLSI現状でパース後の配列は
$quickTime[1]["main"]["hoge"] = $data;
のようになっています。
$arr = array(1, 'main', 'hoge');
から
$quickTime[1]["main"]["hoge"]
にどうsetやgetが簡単にできるかっていうので悩んでいます。
わかりやすいというよりかは直感的な操作が目的です。
確かにそのように関数作るのも良いのですが、ツリー型で出来れば記録したいところです。
ただAtomってのはややこしいんですが、同一断層に同じ名前のAtomが出てくることもあるので、
そこら辺の条件分岐をやってるとどうしても複雑になってきます。
XMLに似てる感じです。
>>161
結局内部ではarrayとして扱われるのでそれをどう処理するかがミソです。
0163nobodyさん
2008/12/25(木) 17:28:45ID:???foreach + 参照渡しを使えばいいよ
$tree = array('a' => array('b' => array('c' => 'C')));
$indexes = array('a', 'b', 'c');
$node =& $tree;
foreach ($indexes as $index) {
$node =& $node[$index];
}
echo 'node: ', var_export($node, true), PHP_EOL;
echo 'tree before: ', var_export($tree, true), PHP_EOL;
$node = array('new' => 'value');
echo 'tree after: ', var_export($tree, true), PHP_EOL;
注意点は $value =& $array[$key] が実行された際にキー $key が存在しない場合
無言で配列に要素が作られてしまう事
これはPHPのアンドキュメントな動作なので
嫌なら array_key_exists() でチェックしてね
0164nobodyさん
2008/12/25(木) 19:23:56ID:???$indexes = array_keys($tree);
でいいな
0166nobodyさん
2008/12/25(木) 19:49:40ID:???それは質問の答えになってないんじゃない?
新しいノードを追加じゃなくて、cにarrayが追加になってるよね。
c=>'C'の'C'を書き変えたいわけでしょ
■ このスレッドは過去ログ倉庫に格納されています