トップページ⇒php
1001コメント348KB

【PHP】下らねぇ質問はID出して書き込みやがれ 76

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2008/11/13(木) 04:15:32ID:???
質問者はまず>>1を良く読むこと(必須!)
過去スレ、関連スレ、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等)・フレームワークは各該当スレへ
0449nobodyさん2008/11/22(土) 16:15:10ID:???
>>448
板違い
その質問はレンタル鯖板で。
0450nobodyさん2008/11/22(土) 17:11:51ID:iSnXxlqn
最初、出だしの部分だけ表示して 「続きを読む」をクリックして
全文を表示させるようにしたいのですけど、どうやるのでしょう?
「続きを読む」という文にリンクをかけて、もう一つ全文記事を作って
そこで全部書けばいいのでしょうか?
0451nobodyさん2008/11/22(土) 17:35:35ID:???
トップページには出だしだけ切り取って表示すれば?
0452nobodyさん2008/11/22(土) 18:00:08ID:???
>>450
最近のMovableType4.2なんかだと「本文」と「続き」が別々のフォームで
保存も別にされてる様子。

1個の枠だけで「続きを読む」をやる場合は

まず本文の文字数をチェック。
↓
本文が○文字より長い場合は、頭から○文字までを表示して
一番最後に「…」みたいな省略がある事を明示する文字を付け足して
レコードの個別IDを含んだ全文表示用リンクを表示する。
↓
そうでない場合はそのまま表示する。

って感じだな。

記事の要約をトップページに表示したり
RSSへページの概要としても提供するなら
短い説明文と本文は分けて置いた方が良いと思う。

目次を表示する時に、各項目が「…」で省略されてるのは
クリックするまで中身が完結しないから、目次として微妙になってしまう。

わざと完結させないでPV増やすって技もあるかもしれないけど
他のサイトの方が読みやすければ廃れるのも早いと思われ。
0453nobodyさん2008/11/22(土) 20:48:34ID:MJ/AoE7Y
質問です。
ブラウザ経由ではなく、コマンドラインでPHPを対話的に操作したいのですが、

1. PHPの対話環境はありませんか?Rubyのirbのようなものです。
php -a は試しましたが、<?php ... ?> に囲まれないと出力されませんし、文
法エラーがあると強制終了だしで、実用に耐えませんでした。

2. 対話環境がないとしたら、 php -f PHPファイル名 しかないと思うのですが、
printのような関数で、最後に改行してくれるものはありませんか?
Java の System.out.println(), Ruby の puts のようなものです。
0454nobodyさん2008/11/22(土) 21:02:14ID:???
自己フォローです。2.については自己解決しました。
http://fdays.blogspot.com/2008/02/php5.html
対話的操作なら、var_dump()で良さそうです。
0455nobodyさん2008/11/22(土) 21:25:18ID:b7xKLs1N
ここを見てアップローダを作ろうとおもったのですが
ttp://w1.nirai.ne.jp/freeze/main/file09.html
----------------------------------------------
$updir = "./updir/";
 これが変数に保存用のフォルダを代入している部分です。

$filename = $_FILES['data']['name']
   これを、指定フォルダの中に保存するのが、
move_uploaded_file($_FILES['data']['tmp_name'], $updir.$filename)
   その後、echo命令で画像を表示しているわけです。

--------------------------------------------

$updir = "./updir/"の部分を他のサーバ、例えばhttp://www.example.com/down/
に保存したい場合、どのようにすれば良いでしょうか?

そのまま$updir = "./http://www.example.com/down/"とした時、アップロードするとエラーが出てしまいます。

0456nobodyさん2008/11/22(土) 21:27:11ID:???
無理です
0457nobodyさん2008/11/22(土) 22:03:15ID:P3cvCpOq
iisでphpを動かすのと
apache + mod_phpで動かすのだと
どっちの速度が速い?
0458nobodyさん2008/11/22(土) 22:03:44ID:???
場合による
0459nobodyさん2008/11/22(土) 22:05:15ID:???
>>455
他のサーバにアップロード用のプログラム用意して、socketで画像データをpostするとか
勿論セキュリティ上出来ない場合もあるだろうし、何より改変は変数一つ書き換えるだけでは済まない
0460nobodyさん2008/11/22(土) 22:11:43ID:???
他のサーバにPOSTするぐらいなら、ftpで保存先に送るシェルスクリプトを
流すようにした方が多分作るのは楽だろw
0461nobodyさん2008/11/22(土) 22:13:32ID:???
その保存したいサーバで実行すればいい
0462nobodyさん2008/11/22(土) 22:17:29ID:P3cvCpOq
>>458
どんな?
0463nobodyさん2008/11/22(土) 22:50:38ID:???
>>456>>459
そうなんですか・・・
有難うございました
0464nobodyさん2008/11/23(日) 08:59:40ID:7jpbyfc1
サーバーに test.php.jpgって感じのファイルでphpコードを書いたものを
アップしたんですが、phpとして実行されてしまうようです。
これは、Apacheの設定の問題でしょうか?

Apache/2.0.63 (CentOS)
php 5.1.x

httpd.confで下記のように設定しています
LoadModule php5_module modules/libphp5.so
AddHandler php5-script .php
AddType text/html .php
0465nobodyさん2008/11/23(日) 09:28:04ID:???
ファイル偽装したいけどできないってこと?

mod_mime_magicあたりが効いてるとかじゃないかな
0466nobodyさん2008/11/23(日) 10:12:13ID:7jpbyfc1
ありがとうございます

ファイル偽装を防ぎたいけど、
AddType image/png png
AddType image/gif gif
AddType image/jpeg .jpg jpeg
こんな感じで書いても phpinfoとか余裕で実行できちゃうんですよね。

LoadModule mime_magic_module modules/mod_mime_magic.so
LoadModule mime_module modules/mod_mime.so
# TypesConfig describes where the mime.types file (or equivalent) is
TypesConfig /etc/mime.types

でmime.typesの一覧にはちゃんとjpgも入ってるんですけど・・・

mod_mime_magicが先頭の数バイトを読んで、phpと判断してphpに処理を
渡しちゃうんですかね・・・
そうすると、スレチですか。。
0467nobodyさん2008/11/23(日) 10:40:35ID:7jpbyfc1
mod_mime_magic を外してみたんですが、一緒でした。
もう少し調べてみます
0468nobodyさん2008/11/23(日) 12:42:11ID:???
*nix系ならfileってコマンドでファイルのタイプが分かるよ。

うる覚えだけどPHPからシェルコマンド実行する場合は
配列かなんかで戻ってきて、確か1番目が名前かサイズ?で
2番目とかにファイルタイプが入ってた様な気がする。

もしかしたら改行で分割して自分で配列に入れてたかも。

まあ細かい手順はともかく、*nix系なら、
fileコマンドでチェックすれば、拡張子にかかわらずファイルのヘッダ見てくれる。
0469nobodyさん2008/11/23(日) 12:51:12ID:???
普通に設定してたらありえなくねー?
んなもんが余裕でできてたら今ごろ被害者続出だろ
0470nobodyさん2008/11/23(日) 16:42:57ID:???
質問です。
こんなコードが、問題なく動くようなのですが、PHPマニュアルのどこを見たら
この件が書かれているでしょうか?

<?php
class Test {
fuction() {
var_dump($this->hogehoge); // 定義に存在しないインスタンス変数にアクセス。
}
}

$test = new Test();
$test->hogehoge = 3;
var_dump($test->hogehoge); // 正常に実行。int(3)
$test->fugafuga(); // 正常に実行。iint(3)
?>

http://www.php.net/manual/ja/
PHP4、5の「クラスとオブジェクト」を読みましたが、載っていないようです。
0471nobodyさん2008/11/23(日) 16:43:21ID:I9fabXwC
あ、ID出し忘れました。
0472nobodyさん2008/11/23(日) 16:57:45ID:I9fabXwC
補足すると、この書き方はCakePHP1.2のソースを読んでいて見つけたものです。
0473nobodyさん2008/11/23(日) 17:01:02ID:???
定義しなきゃ代入しちゃだめなんて誰が言ってたの
0474nobodyさん2008/11/23(日) 17:15:59ID:I9fabXwC
以前知り合いから聞きました。
JavaやRubyではできませんから、自分もそうだと思ってました。

PHPマニュアルで、これに関する記述を探していますが見つかりません。
0475nobodyさん2008/11/23(日) 17:18:17ID:???
>問題なく動くようなのですが

お前試してないだろ
0476nobodyさん2008/11/23(日) 17:22:43ID:I9fabXwC
失礼。元のクラスは長かったので、編集しましたがミスしました。

<?php
class Test {
  function fugafuga() {
    var_dump($this->hogehoge);
  }
}

$test = new Test();
$test->hogehoge = 3;
var_dump($test->hogehoge);
$test->fugafuga();
?>
0477nobodyさん2008/11/23(日) 17:49:13ID:I9fabXwC
追加の質問です。
同じくcakeのソースで、このような記述が見つかりました。
変数名をパラメタライズしている点で、可変変数に似ています。
これについても、該当するPHPマニュアルを探しています。

class Test {
  var $hoge = 1;
  function fuga() {
    $x = "hoge";
    var_dump($this->$x); //これはOK。
  }
}

$test = new Test();
$test->fuga(); // OK。
$y = "hoge"
var_dump($test->$y); // これはNG.

特に知りたいのは、レシーバが $this なら実行できて、$testのような実変数
だと実行できない理由です。
0478nobodyさん2008/11/23(日) 18:17:42ID:???
>特に知りたいのは、レシーバが $this なら実行できて、$testのような実変数
だと実行できない理由です。
実行できない理由は、そういう風に作られているから
実行できないように作られた理由は、知らん
0479nobodyさん2008/11/23(日) 18:22:18ID:???
前の方の
>問題なく動くようなのですが
は親クラスで何か定義されてるんじゃないの?

>>477
「クラスの中」と「クラス内のメソッド」と「外」は、
それぞれスコープ違うよ。

じゃ無いとインスタンスの内部に保存した変数が
上書きされちゃって困るだろ。
0480nobodyさん2008/11/23(日) 18:33:47ID:???
732 名前: nobodyさん [sage] 投稿日: 2008/11/23(日) 17:51:46 ID:???
>>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
ぜんぜん釣りじゃないよ。
どこがデタラメなのか真剣に知りたいんだけど。
0481nobodyさん2008/11/23(日) 18:35:37ID:???
>>477
なんでCakePHPスレから
0482nobodyさん2008/11/23(日) 18:35:38ID:I9fabXwC
>>479
> は親クラスで何か定義されてるんじゃないの?

されていません。>>476のコードをお試しください。

> >>477
> 「クラスの中」と「クラス内のメソッド」と「外」は、
> それぞれスコープ違うよ。

それは知っています。私は元々Java屋です。
しかし、スコープが違うことと、
$this->変数 は実行できても、変数->変数 が実行できないこととは
あまり関係がないと思うのですが。


いずれにせよ、これらの機能は、フレームワークのソースで使われているわけ
ですから、undocumentedな隠し機能をではないだろうと思ったのですが、典拠
を見つけられなくて困っているのです。
0483nobodyさん2008/11/23(日) 18:49:20ID:I9fabXwC
>>480について、無視するのもあれなので説明しておきます。

【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:???
class Test {
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:???
>>477
やってみたけどvar_dump($test->$y);も実行できたよ(int(1))

> 特に知りたいのは、レシーバが $this なら実行できて、$testのような実変数
> だと実行できない理由です。
$y = "hoge"の末尾にセミコロンがない
0487nobodyさん2008/11/23(日) 19:13:15ID:I9fabXwC
>>484
>     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
>>485-486
大正解…。自分も確認しました。セミコロンか…ごめんなさい。
プロパティ名はどこでも変数でパラメタライズできる、ということのようです。

メソッドでも行けますね。
$y = "fuga";
$test->$y(); //int(1)

ありがとうございました。よろしかったら資料をご紹介ください。

あと、どなたか >>470(>>476)についても。
0489nobodyさん2008/11/23(日) 19:29:12ID:???
ああ、意味分かったよ。ゴメソm(__)m

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:CCu6AGm0
PHPってスタンドアローンのアプリ作れますか?
0491nobodyさん2008/11/23(日) 19:34:59ID:???
>>490
できない、って書こうとしたが、調べたらできるようだ。

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
しつこく補足です。変数じゃなくて、リテラルでもOKでした。

$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:???
>>492
それは正式な仕様じゃないと思う。
おっぱいが式の前にパースされて、たまたま動いてるだけかと。

一手間増えても常に
$y = "fugafuga";
$hoge->$y;
にしておいた方が安全。
0495nobodyさん2008/11/23(日) 20:25:45ID:???
>>489
失礼、レスし忘れておりました。
私の質問の意図は、おっしゃるとおりです。

> と思ってて、この人何言ってるんだろうと思ってた。

Cakeスレの人たちもそのように誤解したのでしょうか。自分でははっきり書い
たつもりだったのですが、実際は分かりにくかったようです…。
0496nobodyさん2008/11/23(日) 20:28:25ID:???
書いてねーよ。内容といい嘘といい人に迷惑かけまくりな奴だな
0497nobodyさん2008/11/23(日) 20:30:02ID:???
あぁ、ちなみに、仕様がどこに書いてあるかは知らないけど
標準クラスの挙動が知りたいだけなら、Reflectionでソースを見ればだいたいわかる
0498nobodyさん2008/11/23(日) 20:30:32ID:DgqkQkfl
pagerの質問なんですが、現在のページの表示を変えられるということで
↓を試したんですが出来ませんでした。どこを直せばよいでしょうか?よろしくおねがいします。

<?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:???
> var_dump($test->hoge());が
> $a = "hoge";
> var_dump($test->$a());
> って出来る筈なのに出来ないのは何故だーって話だったのか。

出来るよ?
0500nobodyさん2008/11/23(日) 20:39:18ID:I9fabXwC
>>493
おお、興味を持ってくれた方が。
これはメタプログラミングに属する話題で、RailsのクローンであるCakeを成り
立たせた重要な技術だと思うんです。

>>494
そうですね。これは避けます。
そもそも、リテラルで呼び出すメリットはありませんから。
(関数名が固定だったら、直接 fugafuga() と書けば良い)。

>>496
書いてますので、冷静に読み直していただいたら、別の見解があるかもしれま
せん。つうか嘘って何?

>>497
よく分かりませんが、リフレクション機能のCのソースを読めとおっしゃってる
のでしょうか?


ご回答いただきありがとうございます。いったん所用でここを離れます。
0501nobodyさん2008/11/23(日) 20:58:52ID:???
>>500
>おお、興味を持ってくれた方が。
>これはメタプログラミングに属する話題で、RailsのクローンであるCakeを成り
>立たせた重要な技術だと思うんです。

get_class_vars
get_class
get_class_methods
call_user_func(array($obj, $method_name), $parameter);
辺りでどうにでもなると思うけど。
0502nobodyさん2008/11/23(日) 21:01:50ID:???
>>498
,が一個抜けてない?
0503nobodyさん2008/11/23(日) 21:12:49ID:DgqkQkfl
>>502
!!!

ありがとうございました。恥ずかしいっスorz
05044982008/11/23(日) 21:32:36ID:???
恥ついでにもう一つ質問お願いします。498にcurPageSpanPreの値にspan.currentというタグを入れて
とある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;
}
05054982008/11/23(日) 21:33:15ID:DgqkQkfl
↑ID出し忘れてしまいました。すいません
0506nobodyさん2008/11/23(日) 21:37:58ID:???
>>491
これってVBみたいにポトペタで作れるんで無くて、
コードをガリガリ書くタイプでしょう?
0507nobodyさん2008/11/23(日) 21:40:21ID:EISunP9D
質問

(1)東京か、地方か
(2)年齢
(3)使用言語
(4)使用OS
(5)分野(ゲーム、業務、ネットワーク、携帯等)
(6)希望している月額の金額
(7)最終学歴



こんなアンケート作って
統計処理しようと思ったんだけど、ただ単純に
データーを保存しただけでは、いわゆるカード型データーベースに
なってしまうので、いわゆる統計処理をしたいのであれば、
最初から、リレーショナルデーターベース、(MySQLとか)に
保存するように設計しないとだめなのかな?
0508nobodyさん2008/11/23(日) 22:06:40ID:???
microsoft SQL Serverじゃないと無理じゃね。
0509nobodyさん2008/11/23(日) 22:09:44ID:EISunP9D
>>508
なんで?
ネタですか?
0510nobodyさん2008/11/23(日) 22:14:23ID:???
アンケートなら大した総数にならないだろうから
単純にファイルに行単位で追加書き込みしていってもいいかと思う
0511nobodyさん2008/11/23(日) 22:16:42ID:EISunP9D
>>510
いやだから。
そのあとで、統計処理するんですよ。
東京が何人で、地方が何人とか。

大卒で35才以上だけ抜き出して人数表示するとか。

そうしたらリレーショナルデーターベースでないと
できないんでしょう?
0512nobodyさん2008/11/23(日) 22:21:24ID:???
その統計処理とやらの部分を自分で実装すればいいじゃんw
0513nobodyさん2008/11/23(日) 22:28:26ID:???
統計処理なんて単純な足し算だと思うがなんか他に難しいことあったっけ?
0514nobodyさん2008/11/23(日) 22:34:16ID:EISunP9D
「地方」でなおかつ「高卒」でなおかつ「35歳以上」だけ抜き出す、とか
そういうことです。
0515nobodyさん2008/11/23(日) 22:38:21ID:???
なおかつ っていうのは条件文 A && B で実現できるよ
0516nobodyさん2008/11/23(日) 22:45:04ID:???
例えばデータがプレーンテキストにあるデリミタで区切られて一行におさめられているとしたら、
それを行ごとに配列で読み込んで、
ループでif (地方 && 高卒 && 35歳以上)
とすればいいだけ
個人でスケーラビリティ(状況に応じてデータベースサーバを何台も増設するみたいな)を考慮しないんであれば、
それで十分だよ
0517nobodyさん2008/11/23(日) 22:49:43ID:EISunP9D
>>516
その条件が
0518nobodyさん2008/11/23(日) 22:50:24ID:EISunP9D
何百通りもあるんだよ!!!


、、、って書こうと思ったが、それは変数で処理すればいいのかな?
0519nobodyさん2008/11/23(日) 22:52:24ID:???
SQLだって条件で抽出するから同じこと
0520nobodyさん2008/11/23(日) 23:22:35ID:???
そのジャンルなら、めちゃくちゃ多く見積もっても数千だから
カンマで区切って書き出すだけで.csvファイルとして
エクセルに読ませれば並び替えと抽出できるし、
配列とかの処理すら不要に感じる。

以下のファイルをダウンロードして下さい(エクセル形式)

で、押し通せば良いんじゃねーの?
「なんと、エクセルで読み込めるんです!」くらいの勢いで。
0521nobodyさん2008/11/23(日) 23:31:22ID:???
>>520
お前が会社でどういう扱いされているか
目に浮かぶようだ
0522nobodyさん2008/11/23(日) 23:50:09ID:???
>>500
自前でフレームワークを作ろうとしてるの?
観点が利用するという感覚じゃないようなので
0523nobodyさん2008/11/24(月) 00:44:19ID:???
単なるアンケートならば、簡単なINSERTとSELECTだけで事足りるはずだから、SQLったってそう難しくは無い。
そこまでの内容なら一日で覚えられるはずだし、どうしても複雑な条件を扱いたいならSELECTで抜いてからPHP側で処理する手もあるしな。
実行速度以前に、トータルの作業速度も恐らくSQL使ったほうが早い。

MySQLを導入するのがダルいってんなら、SQLiteかなんかに突っ込んでおけばいい。
インストール不要、ユーザー管理不要のお手軽DBMS。PHP5は標準で対応してる(5.2以降だっけか?)。
0524nobodyさん2008/11/24(月) 01:18:49ID:Wj+KImYJ
戻りました。IDは変わっていますが。

>>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
>>522
> 自前でフレームワークを作ろうとしてるの?
> 観点が利用するという感覚じゃないようなので

いえ、私は単にCakePHP、およびPHP言語自体を理解したいだけです。
ソースを追っていて理解できなかったので質問させていただいたのです。

しかし、まだどなたにも参考資料をご提示いただけません。もしかして、この
件は全部、PHPマニュアルには無いのでしょうか?PHPってこういう「隠し機能」
だらけなのでしょうか?

しかし仮にそうだとしても、これだけメジャーなフレームワークが採用するぐ
らいですから、ある程度、PHPコミュニティで知られた機能だと思うのです。そ
ういう準公式ドキュメントのようなものは、どこかに無いものでしょうか。
0526nobodyさん2008/11/24(月) 01:39:33ID:???
>>524
どこにオブジェクトを引数として取れると書いてあるの?
$classnameを$objと書き間違えたんじゃないの?
0527nobodyさん2008/11/24(月) 01:44:04ID:???
>>525
ドキュメントが適当でクラス機能が壊れてるのがphp
まず最初にこれを学習したことが一番大きい
後は自分でシコシコ解析しながら進める
これがphpならではの勉強方法
0528nobodyさん2008/11/24(月) 01:45:50ID:Wj+KImYJ
もう一つ、>>470(>>476)についても、補足させてください。

$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
あとどなたか、>>497さんの

> 標準クラスの挙動が知りたいだけなら、Reflectionでソースを見ればだいたいわかる

という言葉の意味を教えていただけませんか?

「Reflectionでソースを見る」とはどういう意味なのか、残念ながら見当が付
きません。リフレクションで分かるのは、ソースではなくて、生成されたイン
スタンスやクラスの特性だと思うのですが。
0530nobodyさん2008/11/24(月) 01:49:19ID:???
そんなマニュアルが揃ってる言語てあるんですか?
WEBプログラムはWindowsアプリなどよりも
ネットでのドキュメント量が豊富だと思いますが
0531nobodyさん2008/11/24(月) 01:56:57ID:???
>>529
http://php.plus-server.net/language.oop5.reflection.html#language.oop5.reflection.extending
0532nobodyさん2008/11/24(月) 01:59:09ID:Wj+KImYJ
>>526
> $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よりネット上のドキュメントが多いのは同意ですが、問題は、公式でな
い仕様はいつ変わるか保証が無いことです。
0533nobodyさん2008/11/24(月) 01:59:59ID:???
>>528
単純にあなたの検索力がかなり低いと思うのだが・・・
0534nobodyさん2008/11/24(月) 02:06:26ID:???
クラス機能が壊れてるから公式ドキュメントが無いんじゃないのw
0535nobodyさん2008/11/24(月) 02:16:41ID:Wj+KImYJ
>>531
すみませんがますます分かりません。コードを実行してみましたが、メソッド
名やクラス名、アクセス修飾子といった属性が取得できただけです。まあリフ
レクションとはそういうものですが。

そもそも、私の質問とどう関連するのか、申し訳ないのですが見当が付きません。


>>533
> 単純にあなたの検索力がかなり低いと思うのだが・・・

恥ずかしながら正解です。言い訳ですが、PHPは始めたばかりなもので。あつか
ましいとは思いますが、何とかお助けいただけないでしょうか。


>>534
> クラス機能が壊れてるから公式ドキュメントが無いんじゃないのw

そうかもしれません…。でも、コミュニティである程度は評価された機能でな
かったら、フレームワーク製作者はそれを利用しないと思うのですが。
0536nobodyさん2008/11/24(月) 02:24:59ID:???
>>528
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
>>536
大変詳しい説明、ありがとうございます。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:???
宣言してないと notice とか e_strict とか出ないっけ
0539nobodyさん2008/11/24(月) 08:19:42ID:???
>>528
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
【OS名】windowsXP
【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:???
>>540
'./data.dat'に書き込み権限が無いんでしょ。
つまりパーミッションを見直しましょうという事。

>>537
ここまでの流れも全く読まずにレス。
>>539も書いてるが、PHP4とPHP5の両方に無理に対応させようとした結果、色々と冗長な部分がある。
他言語から入ってきた人でもしも環境が許すなら、PHP5一本に絞る事をお勧めする。
もう俺、PHP4のソースなんて見る気がしないわ(;´A`)

>>507
PHPならMySQLかSQLiteが手っ取り早いだろうね。
ただ予想されるデータ数が少なくてテキストファイルベースでやりたいなら、
ある意味頭の悪い方法ではあるが、一度全部配列にぶち込んでしまえばいい。
あとは抽出なりソートなりどうとでもなる。
05425412008/11/24(月) 11:38:25ID:???
>>540
あ、悪い。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:???
>>543
あまりお勧めはしたくないが、拡張子「.html」をPHPとして動作するようにするかな。
「AddHandler htaccess」でググって見たらいい。

htaccessが許可されてないがSSIなら使えるサーバーなら
ヘッダ・フッタの読み込みにSSIの#includeを使うという手もあるね。
0545nobodyさん2008/11/24(月) 12:19:02ID:???
>うう…。Java育ちにはつらい話です。しかし、みんなが undocumented な機能
>を多用していたら、Zend社がそれを突然廃止したとき、困るのではありません
>か?特に仕事で使っているのなら。

なんで更新内容も吟味せずに100%機械的なアップデートが前提なんだ?
マニュアル読めば分かるけど仮に将来廃止傾向にある要素があったとしても
相当前から警告してくれてるし、開発コミュニティで情報共有もされてる。

別に嫌味を込めていうわけじゃないが、もうちょっとPHPの経験積んでから色々いちゃもん付けたほうがいいんでないかな
0546nobodyさん2008/11/24(月) 12:21:03ID:MXksGNjb
>>544さん
ありがとうございます

あまりお勧めされない理由とは何でしょう?
0547nobodyさん2008/11/24(月) 12:22:50ID:???
>>545
まぁ言いたい事はよく分かるがそれぐらいにしとこうよ。
0548nobodyさん2008/11/24(月) 12:23:56ID:???
>>532
おれもjava使いだけど、java育ちかどうかは関係ないんで、
java使いが誤解されるような書き方はちょっとね。

>>543
mod_rewriteが使えるならリクエストを1か所に集めて処理という手もある
■ このスレッドは過去ログ倉庫に格納されています