【PHP】下らねぇ質問はID出して書き込みやがれ 76
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2008/11/13(木) 04:15:32ID:???過去スレ、関連スレ、FAQなどは>>2-10辺り
次スレは>>980が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。
◆前スレ
【PHP】下らねぇ質問はID出して書き込みやがれ 75
http://pc11.2ch.net/test/read.cgi/php/1224168721/
◆質問用テンプレ
【OS名】vine linux
【PHPのバージョン】php5.26
【連携ソフトウェア】mysql
【質問内容】
◆質問する時の注意
・ スレを上げて自分のIDを表示させること。(メール欄に何も記述しない。専ブラのsageチェックを外す)
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に関連リンクの公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
(PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。)
◆質問後の注意
・2回目以降は最初に質問した際のレス番号を入れて、偽者防止に必ずIDを表示させること。
・解決しなくても回答をもらった場合はお礼を言うこと。
(荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)
◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
【その他諸注意】
・SQL・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
0478nobodyさん
2008/11/23(日) 18:17:42ID:???だと実行できない理由です。
実行できない理由は、そういう風に作られているから
実行できないように作られた理由は、知らん
0479nobodyさん
2008/11/23(日) 18:22:18ID:???>問題なく動くようなのですが
は親クラスで何か定義されてるんじゃないの?
>>477
「クラスの中」と「クラス内のメソッド」と「外」は、
それぞれスコープ違うよ。
じゃ無いとインスタンスの内部に保存した変数が
上書きされちゃって困るだろ。
0480nobodyさん
2008/11/23(日) 18:33:47ID:???>>731
それはわかってますし、>>726でも「ローカル変数」って書いてます。
取り合えず>>730のスレにお越しください。
733 名前: nobodyさん [sage] 投稿日: 2008/11/23(日) 18:08:06 ID:???
喧嘩がしたかったようだね('A`)
734 名前: nobodyさん [sage] 投稿日: 2008/11/23(日) 18:12:23 ID:???
わざと喧嘩腰でデタラメ書いて、
顔真っ赤にした人が正解を書くのを釣るタイプ。
このタイプはもう飽きたよ。
735 名前: nobodyさん [sage] 投稿日: 2008/11/23(日) 18:12:48 ID:???
>>733
> 喧嘩がしたかったようだね('A`)
なんでそうなるのかぜんぜん理解できない。
誤解を訂正して誘導しただけじゃん。
736 名前: nobodyさん [sage] 投稿日: 2008/11/23(日) 18:14:32 ID:???
>>734
ぜんぜん釣りじゃないよ。
どこがデタラメなのか真剣に知りたいんだけど。
0482nobodyさん
2008/11/23(日) 18:35:38ID:I9fabXwC> は親クラスで何か定義されてるんじゃないの?
されていません。>>476のコードをお試しください。
> >>477
> 「クラスの中」と「クラス内のメソッド」と「外」は、
> それぞれスコープ違うよ。
それは知っています。私は元々Java屋です。
しかし、スコープが違うことと、
$this->変数 は実行できても、変数->変数 が実行できないこととは
あまり関係がないと思うのですが。
いずれにせよ、これらの機能は、フレームワークのソースで使われているわけ
ですから、undocumentedな隠し機能をではないだろうと思ったのですが、典拠
を見つけられなくて困っているのです。
0483nobodyさん
2008/11/23(日) 18:49:20ID:I9fabXwC【PHP】フレームワーク CakePHP 4ホール目【v1.2】
http://pc11.2ch.net/test/read.cgi/php/1213892680/699-
私はCakeスレの699です。ソースを読んでいて分からなかったことを質問しただ
けのつもりだったのですが、どうも意図が伝わらず、誤解を解こうとしたとこ
ろ、>>480のようなことになりました。
釣りや煽りの意図はまったくありませんが、意図が伝わらなくてイライラして
いたことは事実です。ごめんなさい。
0484nobodyさん
2008/11/23(日) 18:58:46ID:???var $hoge = 1;
function fuga() {
$x = "hoge";
var_dump($this->$x); //これはOK。本来$thisは要らないけど、同じクラス内だから。
}
}
$test = new Test();
$test->fuga(); // OK。testインスタンス内のfugaメソッドを呼んでるから。
$y = "hoge"
var_dump($test->$y); // これはNG. $yはtestインスタンスの中に無いから。
0485nobodyさん
2008/11/23(日) 19:08:59ID:???0486nobodyさん
2008/11/23(日) 19:12:17ID:???やってみたけどvar_dump($test->$y);も実行できたよ(int(1))
> 特に知りたいのは、レシーバが $this なら実行できて、$testのような実変数
> だと実行できない理由です。
$y = "hoge"の末尾にセミコロンがない
0487nobodyさん
2008/11/23(日) 19:13:15ID:I9fabXwC> var_dump($this->$x); //これはOK。本来$thisは要らないけど、同じクラス内だから。
細かいですが、$thisは要るでしょう?無ければ fuga()の出力は 1ではなく
"hoge"になってしまいます。
> var_dump($test->$y); // これはNG. $yはtestインスタンスの中に無いから。
ここが要点だと思うのですが、$testインスタンスの中の変数でしか、プロパティ
名のパラメタライズができないということでしょうか?
試してみました。
<?php
class Test {
var $x = "hoge";
var $hoge = 1;
function fuga() {
$x = "hoge";
var_dump($this->$x); //これはOK。
var_dump($this->{$this->x}); //これはOK。
}
}
$test = new Test();
$test->fuga(); // OK。
var_dump($test->{$test->x});// OK。
?>
おお、最後の行もちゃんとint(i)が出力されます!ありがとうございます。
この件について、参考になる資料をご存知でしたら、教えていただけないでしょうか?
あと、どなたか >>470(>>476)についてもお願いいたします。
0488nobodyさん
2008/11/23(日) 19:21:59ID:I9fabXwC大正解…。自分も確認しました。セミコロンか…ごめんなさい。
プロパティ名はどこでも変数でパラメタライズできる、ということのようです。
メソッドでも行けますね。
$y = "fuga";
$test->$y(); //int(1)
ありがとうございました。よろしかったら資料をご紹介ください。
あと、どなたか >>470(>>476)についても。
0489nobodyさん
2008/11/23(日) 19:29:12ID:???var_dump($test->$y);を
var_dump($test->y);
と思ってて、この人何言ってるんだろうと思ってた。
var_dump($test->hoge());が
$a = "hoge";
var_dump($test->$a());
って出来る筈なのに出来ないのは何故だーって話だったのか。
0490nobodyさん
2008/11/23(日) 19:30:26ID:CCu6AGm00491nobodyさん
2008/11/23(日) 19:34:59ID:???できない、って書こうとしたが、調べたらできるようだ。
31. WinBinder でデスクトップアプリケーション:ITpro
http://itpro.nikkeibp.co.jp/article/COLUMN/20070402/267112/
> PHPで作れるGUIアプリケーションは、Webアプリケーションだけではありま
> せん。 WinbBnderを使えば、Windows上でデスクトップアプリケーションを作
> 成すること も可能です。
0492nobodyさん
2008/11/23(日) 19:55:18ID:I9fabXwC$test->"fuga"(); // これはダメですが、
$test->{"fuga"}(); // これはOK!
しかし通常の関数は、変数じゃないとダメ。
function fugafuga() {
var_dump("fugafuga");
}
$y = "fugafuga";
$y(); // これはOK。
{"fugafuga"}(); //こっちはダメ。
?
どこにこの仕様は載ってるんでしょう!?
0493nobodyさん
2008/11/23(日) 20:24:40ID:???リテラルの動作とブレスの動作はそれぞれ意味があって、
不思議とは思わないんでスルーしてましたけど、
どっかに公開されていてもいいはずですよね。
Zendのテストにはその手の設問は結構あるから、日本語化されていないどこかに
リソースがあるんでしょうけど。詳しい人いないですかね。自分も興味あります。
0494nobodyさん
2008/11/23(日) 20:24:45ID:???それは正式な仕様じゃないと思う。
おっぱいが式の前にパースされて、たまたま動いてるだけかと。
一手間増えても常に
$y = "fugafuga";
$hoge->$y;
にしておいた方が安全。
0495nobodyさん
2008/11/23(日) 20:25:45ID:???失礼、レスし忘れておりました。
私の質問の意図は、おっしゃるとおりです。
> と思ってて、この人何言ってるんだろうと思ってた。
Cakeスレの人たちもそのように誤解したのでしょうか。自分でははっきり書い
たつもりだったのですが、実際は分かりにくかったようです…。
0496nobodyさん
2008/11/23(日) 20:28:25ID:???0497nobodyさん
2008/11/23(日) 20:30:02ID:???標準クラスの挙動が知りたいだけなら、Reflectionでソースを見ればだいたいわかる
0498nobodyさん
2008/11/23(日) 20:30:32ID:DgqkQkfl↓を試したんですが出来ませんでした。どこを直せばよいでしょうか?よろしくおねがいします。
<?php $data = array(
'1件目のデータ',
'2件目のデータ',
'3件目のデータ',
'4件目のデータ',);
require_once 'Pager/Pager.php';
$params = array(
'itemData' => $data,
'perPage'=> 2
"curPageSpanPre" => "[",
"curPageSpanPost" => "]"
);
$pager = & Pager::factory($params);
$pages = $pager->getPageData();
$links = $pager->getLinks();
foreach ($pager->getPageData() as $val) {
echo $val . '<br>';
}
echo '<p>' . $links['all'] . '</p>';
?>
0499nobodyさん
2008/11/23(日) 20:35:19ID:???> $a = "hoge";
> var_dump($test->$a());
> って出来る筈なのに出来ないのは何故だーって話だったのか。
出来るよ?
0500nobodyさん
2008/11/23(日) 20:39:18ID:I9fabXwCおお、興味を持ってくれた方が。
これはメタプログラミングに属する話題で、RailsのクローンであるCakeを成り
立たせた重要な技術だと思うんです。
>>494
そうですね。これは避けます。
そもそも、リテラルで呼び出すメリットはありませんから。
(関数名が固定だったら、直接 fugafuga() と書けば良い)。
>>496
書いてますので、冷静に読み直していただいたら、別の見解があるかもしれま
せん。つうか嘘って何?
>>497
よく分かりませんが、リフレクション機能のCのソースを読めとおっしゃってる
のでしょうか?
ご回答いただきありがとうございます。いったん所用でここを離れます。
0501nobodyさん
2008/11/23(日) 20:58:52ID:???>おお、興味を持ってくれた方が。
>これはメタプログラミングに属する話題で、RailsのクローンであるCakeを成り
>立たせた重要な技術だと思うんです。
get_class_vars
get_class
get_class_methods
call_user_func(array($obj, $method_name), $parameter);
辺りでどうにでもなると思うけど。
0503nobodyさん
2008/11/23(日) 21:12:49ID:DgqkQkfl!!!
ありがとうございました。恥ずかしいっスorz
0504498
2008/11/23(日) 21:32:36ID:???とあるHPに乗っていたCSSを加えたのですが、一番左のブロックだけ上にずれてしまいます。
特に間違ってそうなところはなさそうなんですが・・・ご指摘お願いできませんでしょうか。
div.pager {
font-size: 85%;
}
div.pager a,
div.pager span {
display: block;
float: left;
margin-right: 0.1em;
padding: 0.2em 0.5em;
}
div.pager a {
color: #105cb6;
background-color: #fff;
border: 1px solid #9aafe5;
text-decoration: none;
}
div.pager a:hover {
color: #003;
background-color:#0000FF;
border: 1px solid #2e6ab1;
}
div.pager span.current {
color: #fff;
background-color: #2e6ab1;
border: 1px solid #2e6ab1;
font-weight: bold;
}
0505498
2008/11/23(日) 21:33:15ID:DgqkQkfl0507nobodyさん
2008/11/23(日) 21:40:21ID:EISunP9D(1)東京か、地方か
(2)年齢
(3)使用言語
(4)使用OS
(5)分野(ゲーム、業務、ネットワーク、携帯等)
(6)希望している月額の金額
(7)最終学歴
こんなアンケート作って
統計処理しようと思ったんだけど、ただ単純に
データーを保存しただけでは、いわゆるカード型データーベースに
なってしまうので、いわゆる統計処理をしたいのであれば、
最初から、リレーショナルデーターベース、(MySQLとか)に
保存するように設計しないとだめなのかな?
0508nobodyさん
2008/11/23(日) 22:06:40ID:???0509nobodyさん
2008/11/23(日) 22:09:44ID:EISunP9Dなんで?
ネタですか?
0510nobodyさん
2008/11/23(日) 22:14:23ID:???単純にファイルに行単位で追加書き込みしていってもいいかと思う
0511nobodyさん
2008/11/23(日) 22:16:42ID:EISunP9Dいやだから。
そのあとで、統計処理するんですよ。
東京が何人で、地方が何人とか。
大卒で35才以上だけ抜き出して人数表示するとか。
そうしたらリレーショナルデーターベースでないと
できないんでしょう?
0512nobodyさん
2008/11/23(日) 22:21:24ID:???0513nobodyさん
2008/11/23(日) 22:28:26ID:???0514nobodyさん
2008/11/23(日) 22:34:16ID:EISunP9Dそういうことです。
0515nobodyさん
2008/11/23(日) 22:38:21ID:???0516nobodyさん
2008/11/23(日) 22:45:04ID:???それを行ごとに配列で読み込んで、
ループでif (地方 && 高卒 && 35歳以上)
とすればいいだけ
個人でスケーラビリティ(状況に応じてデータベースサーバを何台も増設するみたいな)を考慮しないんであれば、
それで十分だよ
0517nobodyさん
2008/11/23(日) 22:49:43ID:EISunP9Dその条件が
0518nobodyさん
2008/11/23(日) 22:50:24ID:EISunP9D、、、って書こうと思ったが、それは変数で処理すればいいのかな?
0519nobodyさん
2008/11/23(日) 22:52:24ID:???0520nobodyさん
2008/11/23(日) 23:22:35ID:???カンマで区切って書き出すだけで.csvファイルとして
エクセルに読ませれば並び替えと抽出できるし、
配列とかの処理すら不要に感じる。
以下のファイルをダウンロードして下さい(エクセル形式)
で、押し通せば良いんじゃねーの?
「なんと、エクセルで読み込めるんです!」くらいの勢いで。
0523nobodyさん
2008/11/24(月) 00:44:19ID:???そこまでの内容なら一日で覚えられるはずだし、どうしても複雑な条件を扱いたいならSELECTで抜いてからPHP側で処理する手もあるしな。
実行速度以前に、トータルの作業速度も恐らくSQL使ったほうが早い。
MySQLを導入するのがダルいってんなら、SQLiteかなんかに突っ込んでおけばいい。
インストール不要、ユーザー管理不要のお手軽DBMS。PHP5は標準で対応してる(5.2以降だっけか?)。
0524nobodyさん
2008/11/24(月) 01:18:49ID:Wj+KImYJ>>501
> get_class_vars
> get_class
> get_class_methods
> call_user_func(array($obj, $method_name), $parameter);
> 辺りでどうにでもなると思うけど。
ありがとうございます。 call_user_func() が
array(オブジェクトインスタンス, メソッド名の文字列) という引数を取れる
とは知りませんでした。
array(クラス名の文字列、メソッド名の文字列)しか取れないと思っていました。
つまり、スタティック呼び出ししかできないと思っていたのです。確かにこれ
なら、$test->$x() のような、インスタンスメソッドの呼び出しができますね。
しかし、マニュアルにもこうあったのですが。
http://jp.php.net/manual/ja/function.call-user-func.php
> このパラメータに array($classname, $methodname) を指定することにより、
> クラスメソッドも静的にコールすることができます。
やっぱりこれも undocumented?
0525nobodyさん
2008/11/24(月) 01:24:51ID:Wj+KImYJ> 自前でフレームワークを作ろうとしてるの?
> 観点が利用するという感覚じゃないようなので
いえ、私は単にCakePHP、およびPHP言語自体を理解したいだけです。
ソースを追っていて理解できなかったので質問させていただいたのです。
しかし、まだどなたにも参考資料をご提示いただけません。もしかして、この
件は全部、PHPマニュアルには無いのでしょうか?PHPってこういう「隠し機能」
だらけなのでしょうか?
しかし仮にそうだとしても、これだけメジャーなフレームワークが採用するぐ
らいですから、ある程度、PHPコミュニティで知られた機能だと思うのです。そ
ういう準公式ドキュメントのようなものは、どこかに無いものでしょうか。
0526nobodyさん
2008/11/24(月) 01:39:33ID:???どこにオブジェクトを引数として取れると書いてあるの?
$classnameを$objと書き間違えたんじゃないの?
0527nobodyさん
2008/11/24(月) 01:44:04ID:???ドキュメントが適当でクラス機能が壊れてるのがphp
まず最初にこれを学習したことが一番大きい
後は自分でシコシコ解析しながら進める
これがphpならではの勉強方法
0528nobodyさん
2008/11/24(月) 01:45:50ID:Wj+KImYJ$test = new Test();
$test->hogehoge = 3; //クラス定義に存在しないプロパティに代入
var_dump($test->hogehoge); // 正常に実行。int(3)
この挙動には、二つの点で興味があります。
1つ目は、もし代入するだけでプロパティが生成できるのなら、var hogehoge;
といった変数宣言文は必要なかったじゃないか、という言語仕様上の疑問です。
実際、他の言語で代入でプロパティを宣言できる言語(JavaScript, Pythonなど)
には、プロパティの宣言文は存在しません。Rubyも、クラス内でしか代入でき
ないという違いはありますが(Rubyにはpublicなインスタンス変数は無い)、同
様に宣言文は存在していません。なぜPHPは二通りの宣言方法を用意したのでしょ
うか?
2つ目は、実用上の問題で、このようにして変数宣言なしで定義されたプロパティ
があるなら、ソースをgrepするときに困るということです。CakePHP以外でもこ
の書き方が多用されているなら、grep "var hogehoge" では見つからないプロ
パティ定義がたくさんあるはずで、これはどう対処したものか、ということな
のです。
その辺の疑問を解決するためにも、まずはこの機能の公式ページ、ないしは準
公式ページを知りたいと思っております。
0529nobodyさん
2008/11/24(月) 01:46:43ID:Wj+KImYJ> 標準クラスの挙動が知りたいだけなら、Reflectionでソースを見ればだいたいわかる
という言葉の意味を教えていただけませんか?
「Reflectionでソースを見る」とはどういう意味なのか、残念ながら見当が付
きません。リフレクションで分かるのは、ソースではなくて、生成されたイン
スタンスやクラスの特性だと思うのですが。
0530nobodyさん
2008/11/24(月) 01:49:19ID:???WEBプログラムはWindowsアプリなどよりも
ネットでのドキュメント量が豊富だと思いますが
0531nobodyさん
2008/11/24(月) 01:56:57ID:???http://php.plus-server.net/language.oop5.reflection.html#language.oop5.reflection.extending
0532nobodyさん
2008/11/24(月) 01:59:09ID:Wj+KImYJ> $classnameを$objと書き間違えたんじゃないの?
私も書き間違いかと思ったのですが、ためしに$objにオブジェクトインスタン
スを与えたら動いたんです。
>>527
> ドキュメントが適当でクラス機能が壊れてるのがphp
> 後は自分でシコシコ解析しながら進める
うう…。Java育ちにはつらい話です。しかし、みんなが undocumented な機能
を多用していたら、Zend社がそれを突然廃止したとき、困るのではありません
か?特に仕事で使っているのなら。
Tips/PHP/foreach関数が使えない? - ゼンド・ジャパン株式会社 技術情報コンテンツ
http://www.zend.co.jp/tech/index.php?Tips%2FPHP%2Fforeach%B4%D8%BF%F4%A4%AC%BB%C8%A4%A8%A4%CA%A4%A4%A1%A9
>>530
> そんなマニュアルが揃ってる言語てあるんですか?
> WEBプログラムはWindowsアプリなどよりも
> ネットでのドキュメント量が豊富だと思いますが
JavaやPythonは非常によくドキュメントが整備されています。Rubyは少し落ち
ますが、これほど大きな機能が undocumented になっているのは考えられません。
Windowsよりネット上のドキュメントが多いのは同意ですが、問題は、公式でな
い仕様はいつ変わるか保証が無いことです。
0534nobodyさん
2008/11/24(月) 02:06:26ID:???0535nobodyさん
2008/11/24(月) 02:16:41ID:Wj+KImYJすみませんがますます分かりません。コードを実行してみましたが、メソッド
名やクラス名、アクセス修飾子といった属性が取得できただけです。まあリフ
レクションとはそういうものですが。
そもそも、私の質問とどう関連するのか、申し訳ないのですが見当が付きません。
>>533
> 単純にあなたの検索力がかなり低いと思うのだが・・・
恥ずかしながら正解です。言い訳ですが、PHPは始めたばかりなもので。あつか
ましいとは思いますが、何とかお助けいただけないでしょうか。
>>534
> クラス機能が壊れてるから公式ドキュメントが無いんじゃないのw
そうかもしれません…。でも、コミュニティである程度は評価された機能でな
かったら、フレームワーク製作者はそれを利用しないと思うのですが。
0536nobodyさん
2008/11/24(月) 02:24:59ID:???cakePHPの
var hogehoge;
なんかはPHP5でも4との互換性の為にpublicとして動くんだけど
実際は非推奨になっててpublic/protected/privateを付けた方が良い。
PHP6になったらvarでの宣言は消される可能性がある。
メソッド内で宣言してないプロパティを使うと
null値のpublicプロパティとして扱われるけど、
ドキュメント化はされてないと思うから、本来は推奨されてない書き方。
cakePHPは4と5対応だから無理して両方で動く書き方してるに過ぎない。
ソース読むならZFかSymfonyにしといた方が良い。
PHPはまだオブジェクト指向を取り入れてる途中にあるから
クラスの細かい部分の説明が無いのは変わる可能性が
あると思ってた方が安全。
名前空間のセパレータが\になりそうで
\tHogeとか\nhogeの場合に気持ち悪すぎるって
騒ぎがあったのが最近だし。
0537nobodyさん
2008/11/24(月) 02:59:52ID:Wj+KImYJ大変詳しい説明、ありがとうございます。cakeはPHP4、5で動かすために、非推
奨の機能を多用しているということなのですね。
> $x = "hoge";
> $obj->$x; // $obj->hoge; と同じ。
や、
> $obj->hogehoge = 3; //代入でプロパティが宣言できる。
も、 undocumented な非推奨機能ということなのでしょうか?うーん。
ところで、cakeはなぜこれを採用したのでしょう?
自分がさっき考えたのは、プロパティの動的生成が目的だったのかな、という
ことです。例えば以下のような感じでしょうか。
<?php
class Test {
}
$test = new Test();
foreach (array("hoge", "fuga", "piyo") as $prop_name) {
$test->$prop_name = "hogehoge";
//$test->hoge, $test->fuga, $test->piyo が定義される。
}
?>
PHP(5)のリフレクションはほとんど知らないのですが、こういうことはPHP4で
は、公式の機能だけでは実現できないのではないでしょうか?まだcakeのソー
スは見始めたばかりで、こんなコードがあるかどうかはわかりませんが。
夜も遅くなりましたので、これで失礼します。明日また来ると思います。
0538nobodyさん
2008/11/24(月) 03:12:39ID:???0539nobodyさん
2008/11/24(月) 08:19:42ID:???php4環境のことは忘れて、php5の最新版に絞ってはいかがでしょうか。
あと、ソースを読んでどうこうしたいならcakeみたいな実用FWはやめたほうがいい。
ZFのほうが技術的には吉かと。
> この挙動には、二つの点で興味があります。
> 1つ目は、もし代入するだけでプロパティが生成できるのなら、
> var hogehoge;といった変数宣言文は必要なかったじゃないか、という言語仕様上の疑問です。
単に冗長化してある仕様であるとしか。
なぜ、それを用意したかという動機の部分は、DevMLで聞くしかないでしょう。
宣言なしでも変数を最初に使った時に作成されるというphpの仕様です。
しかし、クラス変数にpublic protected privateなどで宣言したいケースが
存在することは問題ないですよね?
基本的に内部プロパティを持っていないクラス変数を作成するという機能を
自作クラスで抑制したいときは__set($name)で制御できます。
> 2つ目は、実用上の問題で、このようにして変数宣言なしで定義されたプロパティ
> があるなら、ソースをgrepするときに困るということです。CakePHP以外でもこ
Cakeにはphp4対応しようという歴史的経緯があって、ソースの解析を難しくして
しまっています。
同様にphp4 php5両対応のシステムは、oop的に??です、特にjava等本格的oop
出身の人がphp4のソースを扱うのは無駄です。労力的に。
貧弱でルーズなオブジェクト指向でむりくり実装しているので、それぞれのシステム
のポリシーに振り回されることになります。
0540nobodyさん
2008/11/24(月) 09:37:17ID:161WFI/v【PHPのバージョン】php5.2.6
【質問内容】
ローカルでテストしていたら今まで問題なく動いていたファイルが
fputsで書き込みが出来なくなってしましました
fopenは出来ているようです
また同じファイルがサーバー上では問題なく動いています
ローカルではなぜかfile_put_contentsなら書き込み出来るんですが
借りているサーバーのPHPのバージョンが4なため途方にくれています
検索してみたのですがローカルでは動くがサーバーで動かないなどの逆の
パターンばかりです
直前にいじっていたファイルがおかしい部分があったのでそのせいかと思い
xamppを全てアンインストールし最新のものにしたのですがまったく変わらず
fputsがきかない状態です
$dataup = fopen("./data.dat", "r+");
flock($dataup, LOCK_SH);
fputs($dataup , "$up\n");
flock($dataup, LOCK_UN);
fclose($dataup);
上記の中に何か問題があるのでしょうか
どなたかご教授お願いします
0541nobodyさん
2008/11/24(月) 11:34:49ID:???'./data.dat'に書き込み権限が無いんでしょ。
つまりパーミッションを見直しましょうという事。
>>537
ここまでの流れも全く読まずにレス。
>>539も書いてるが、PHP4とPHP5の両方に無理に対応させようとした結果、色々と冗長な部分がある。
他言語から入ってきた人でもしも環境が許すなら、PHP5一本に絞る事をお勧めする。
もう俺、PHP4のソースなんて見る気がしないわ(;´A`)
>>507
PHPならMySQLかSQLiteが手っ取り早いだろうね。
ただ予想されるデータ数が少なくてテキストファイルベースでやりたいなら、
ある意味頭の悪い方法ではあるが、一度全部配列にぶち込んでしまえばいい。
あとは抽出なりソートなりどうとでもなる。
0542541
2008/11/24(月) 11:38:25ID:???あ、悪い。local(Windows上)で書き込みが出来ないのか。
phpのエラーログは?
あと質問とは関係ないが、「LOCK_SH」ではなく「LOCK_EX」だね。この場合。
0543nobodyさん
2008/11/24(月) 11:40:02ID:???自分のサイトで100以上のページを管理しているんですが、
すべて拡張子がhtmlになっています。
これからは管理しやすいように、
フッターとヘッダーとサイドバーを
<?php
include_once("header.inc");
include_once("footer.inc");
include_once("sidebar.inc");
?>
<body>
<?php
echo "*********"
?>
</body>
みたいにphpで取り込んで出力しようと思うんですが、
これまでhtmlだったファイルの拡張子をphpに変更すると、URIが変わってしまうので
ページランクを継承できないかと思います。
URIを ***.html にしたまま、phpで取り込むうまいやり方はありませんでしょうか。
0544nobodyさん
2008/11/24(月) 11:44:46ID:???あまりお勧めはしたくないが、拡張子「.html」をPHPとして動作するようにするかな。
「AddHandler htaccess」でググって見たらいい。
htaccessが許可されてないがSSIなら使えるサーバーなら
ヘッダ・フッタの読み込みにSSIの#includeを使うという手もあるね。
0545nobodyさん
2008/11/24(月) 12:19:02ID:???>を多用していたら、Zend社がそれを突然廃止したとき、困るのではありません
>か?特に仕事で使っているのなら。
なんで更新内容も吟味せずに100%機械的なアップデートが前提なんだ?
マニュアル読めば分かるけど仮に将来廃止傾向にある要素があったとしても
相当前から警告してくれてるし、開発コミュニティで情報共有もされてる。
別に嫌味を込めていうわけじゃないが、もうちょっとPHPの経験積んでから色々いちゃもん付けたほうがいいんでないかな
0546nobodyさん
2008/11/24(月) 12:21:03ID:MXksGNjbありがとうございます
あまりお勧めされない理由とは何でしょう?
0548nobodyさん
2008/11/24(月) 12:23:56ID:???おれもjava使いだけど、java育ちかどうかは関係ないんで、
java使いが誤解されるような書き方はちょっとね。
>>543
mod_rewriteが使えるならリクエストを1か所に集めて処理という手もある
0549540
2008/11/24(月) 12:26:21ID:161WFI/vレスありがとうございます
local上なので権限はやっぱり関係ないですよね
エラーログは出ないんです
見た目問題無く済んだように見えて書き込みだけされていません
試しにfopenをwで行うとちゃんと新規ファイルが出来るのでどう考えてもfputsが原因のようなのです
fputs自体をチェックしてみたところfalse(0)が戻ってきました
file_put_contentsだったら書き込めるのでローカルではこれで動かしているのですが
サーバーでfile_put_contentsは使えないのでどうにか直したいのです
0550nobodyさん
2008/11/24(月) 12:30:37ID:???(てか「なぜ採用したのか」とかなぜCakeのdev-teamに聞かずにここの連中に聞く?)
0552544
2008/11/24(月) 12:35:30ID:???>>544のやり方は、一番簡単で手を抜いた方法。
Apacheモジュール使う方法とかもあるのだけど、その辺りはあえて紹介しなかった。(初心者と書いてたので)
簡単で手を抜いた方法は、サーバーにとっては易しくない場合がほとんどなので、
共有サーバーなら少し気をつけた方がいいかなと思ったまで。
他にもトラブルの元になる場合があるかな。
例えば、htaccess使って拡張子「.html」をPHPとして動作するようにすれば、
本当にただの「.html」ファイルでもPHPとして動作しようとするよね?
例えばphp.iniの設定で
short_open_tag が ON になっている場合、xmlの構文でパースエラーが起こる可能性があったり。
(理由はXMLは「<?xml」で始まるから)
0553541
2008/11/24(月) 12:38:00ID:???fopen($path, 'w');
は新規ファイル出来るけど、
fopen($path, 'r+');
は駄目だよ??そこは大丈夫?(でもそれが原因ならエラーが出る筈だが)
file_put_contents()は糞便利なんだが、PHP5でしか使えないからねぇ。。
0554540
2008/11/24(月) 13:02:49ID:161WFI/v二度目の書き込みでwとかいたのはr+だとまったくファイルが変わらないためどこで詰まっているのかを確認するためにwで動かしてみた際の話です
サーバー上では問題ないんです
ローカルだけでfputsのみがおかしい状態です
>>553
鯖がPHP5でさえあればorz
0555nobodyさん
2008/11/24(月) 13:23:36ID:???言ってることがメチャクチャだw
0556nobodyさん
2008/11/24(月) 14:28:28ID:8C5l1Dvrecho "$title <span class=\"gray\">(<em>$sub_title</em>, $year)</span>"; }
みたいな定型処理を文中で利用しまくってるんですけど、
サーバへの負担は気にする必要有りますかね?
0557nobodyさん
2008/11/24(月) 14:30:00ID:???0558nobodyさん
2008/11/24(月) 14:30:13ID:???0559nobodyさん
2008/11/24(月) 14:32:08ID:8C5l1Dvr了解、thanx
0560nobodyさん
2008/11/24(月) 14:33:47ID:???0561nobodyさん
2008/11/24(月) 15:57:33ID:???PHP関連の各スレへ1行で恥ずかしい無知な突っ込みいれてる馬鹿か?
ちなみにthanxは普通にスラングとして使われる綴りだが。
pleaseをplsとか書くだろ。
関数名でforを4と略したりtoを2と略したりするのと一緒だ。
0562nobodyさん
2008/11/24(月) 16:03:11ID:???PHP関連の各スレへ1行で恥ずかしい無知な突っ込みいれてる馬鹿か?
ちなみにthanxは普通にスラングとして使われる綴りだが。
pleaseをplsとか書くだろ。
関数名でforを4と略したりtoを2と略したりするのと一緒だ。
(笑)
0564nobodyさん
2008/11/24(月) 16:40:25ID:???0565nobodyさん
2008/11/24(月) 17:24:18ID:3UIztZ5+「file_put_contents」は文字列をファイルに書き込む関数、という
説明だが、もし「1」って書き込んだら、それは文字列と解釈され、
1+1などの計算をするときに、自動的に数値と解釈されなくなって
しまうのか?
それとも、コンテキストを見て判断して、数値と扱うべきところでは
自動的に数値になってくれるのか?
0567nobodyさん
2008/11/24(月) 17:33:21ID:???0568nobodyさん
2008/11/24(月) 17:44:15ID:???0569nobodyさん
2008/11/24(月) 17:52:18ID:???作れるよ
Webアプリケーションとして実装すれば
http://akid.s17.xrea.com/
こんなのもできるし
GTKとかを使ってクライアントGUIアプリなんかも作れるし
前者のWebアプリはともかく
後者のクライアントGUIアプリをPHPでやろうとするのはただの変人だけど
0570nobodyさん
2008/11/24(月) 18:01:26ID:3UIztZ5+データーが連続して蓄積されるような状況があったとして、それを
グラフで図とかで表したいんだけど、それってすっごく難しいの?
例えば、
1,2,3,4,5、、、
とかってデーターがあったとして、これを
折れ線グラフとかで表示したいんだけど?
0571nobodyさん
2008/11/24(月) 18:04:12ID:???0574nobodyさん
2008/11/24(月) 18:44:37ID:???〃〃∩ _, ,_
⊂⌒( `Д´) < ヤダヤダ! だって構って欲しかったんだもん
`ヽ_つ ⊂ノ
ジタバタ
_, ,_
(`Д´ ∩ < ヤダヤダ 灯油まいただけなのに逮捕なんてヤダヤダ
⊂ (
ヽ∩ つ ジタバタ
〃〃
0575nobodyさん
2008/11/24(月) 18:45:34ID:3UIztZ5+図を表示したいときは
ライブラリを使うのが常套手段なの?
PEARとかっていうのではだめなの?
0576nobodyさん
2008/11/24(月) 18:48:41ID:???0577nobodyさん
2008/11/24(月) 18:58:00ID:3UIztZ5+WEBアプリのAPIってどうやって作るの?
「5」とかの数値がサイト上にあって、
それに対するAPIを開放して、外部から利用できるように
したいんだけど?
■ このスレッドは過去ログ倉庫に格納されています