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

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

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2009/02/18(水) 21:09:16ID:xNLzAD7T
質問者はまず>>1を良く読むこと(必須!)
過去スレ、関連スレ、FAQなどは>>2-10辺り
次スレは>>980が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。

◆前スレ
【PHP】下らねぇ質問はID出して書き込みやがれ 80
http://pc11.2ch.net/test/read.cgi/php/1233479457/

◆質問用テンプレ
【OS名】vine linux
【PHPのバージョン】php5.26
【連携ソフトウェア】mysql
【質問内容】

◆質問する時の注意
・ スレを上げて自分のIDを表示させること。(メール欄に何も記述しない。専ブラのsageチェックを外す)
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に関連リンクの公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
(PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。)

◆質問後の注意
・2回目以降は最初に質問した際のレス番号を入れて、偽者防止に必ずIDを表示させること。
・解決しなくても回答をもらった場合はお礼を言うこと。
 (荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)

◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
0637nobodyさん2009/02/28(土) 17:01:27ID:???
まあ、実行権限を剥奪しておけば、考えられる最大の被害は「画像が表示されない」程度なわけだし、getimagesizeで問題ないだろ。
0638nobodyさん2009/02/28(土) 17:05:42ID:???
>>637
きょうび、CMSのコミッターですらその程度の認識をしてたりするから困るよな。
実行権限をはく奪って、もともとPHPは読み込み権限で動くわけだし。
画像ファイルにスクリプトインジェクションされるってのをケアしないんだろうし。
06396252009/02/28(土) 17:18:45ID:Ho2Fi0s+
>>626
いや、最初はそう思ったのですがどうやらPHPの関数により速度が遅くなってるようなんです。
というのもPHPの関数が少ないページは高速に表示するからです。

ただ、何の関数が遅い原因なのかが割り出せません。
何なのか分かる奴よろしく。
0640nobodyさん2009/02/28(土) 17:19:10ID:???
>>635-636百回読んでから回答しろ
ttp://websec-memo.blogspot.com/2007/06/php-getimagesizephp.html
0641nobodyさん2009/02/28(土) 18:04:55ID:???
>639
つ xdebug.profiler_enable = 1
あと、Windows機があるならWinCacheGrid
0642nobodyさん2009/02/28(土) 18:05:36ID:???
Grindだった
0643nobodyさん2009/02/28(土) 19:42:43ID:Lzy3hD4E
imagecreate使って画像生成したんだけれど
画像のファイルサイズが0kb になって 保存できない・・・orz

ファイル名指定
header("Content-Disposition: attachement; filename=foo.jpg");
をつけても0kb・・・

どうしたらいいんだぁ・・・
0644nobodyさん2009/02/28(土) 20:27:57ID:???
        ゴガギーン
             ドッカン
         m    ドッカン
  =====) ))         ☆
      ∧_∧ | |         /          / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
     (   )| |_____    ∧_∧   <  おらっ!出てこい>>635-636
     「 ⌒ ̄ |   |    ||   (´Д` )    \___________
     |   /  ̄   |    |/    「    \
     |   | |    |    ||    ||   /\\
     |    | |    |    |  へ//|  |  | |
     |    | |    ロ|ロ   |/,へ \|  |  | |
     | ∧ | |    |    |/  \  / ( )
     | | | |〈    |    |     | |
     / / / / |  /  |    〈|     | |
    / /  / / |    |    ||      | |
   / / / / =-----=--------     | |
0645nobodyさん2009/02/28(土) 22:16:18ID:???
>>644
どうみても、636は正しいと思うんだが
0646nobodyさん2009/02/28(土) 22:32:57ID:???
ヘッダの一部しか見てないって、それ以外にヘッダで判別できるところあんの?
拡張子は別にして
0647nobodyさん2009/02/28(土) 22:35:26ID:???
ヘッダーの一部しか見てないのは事実だ。
そこから、
> それ以外にヘッダで判別できるところあんの?
っていう展開が意味不明
0648nobodyさん2009/02/28(土) 22:48:34ID:???
>>647
つまり、「ヘッダの、一部しか見てない」なのか「ヘッダの一部しか、見てない」なのかってことね
0649nobodyさん2009/02/28(土) 22:49:44ID:???
何をいってるんだw
0650nobodyさん2009/02/28(土) 22:54:24ID:???
ごめん>>638は分かりにくかったわ
ヘッダの一部しか見てない って、他にも判別できる部分があるようにとれない?

ヘッダの(他にも判別するところはあるけど)一部しか見てない なのか
ヘッダの一部(で)しか見てない なのかってことね
0651nobodyさん2009/02/28(土) 22:57:46ID:???
>>650もなんか分かりにくいわ
寝てくる
0652nobodyさん2009/02/28(土) 22:58:56ID:???
>>650-651
だいたい、そのポイント先、>>638じゃなくて>>648だろ
0653nobodyさん2009/03/01(日) 00:14:40ID:???
とりあえずgetimagesizeは完ぺきじゃないってこと
>>640をよく読め
0654nobodyさん2009/03/01(日) 00:31:01ID:???
>このような攻撃は、アップロードするファイルのファイル名をそのまま(この例では、.php)にしているサイトでのみ有効となるのだが、そのようなサイトは実際多く存在する。

これで回避できるとも読めるわけだが、どうなんだろう。
0655nobodyさん2009/03/01(日) 00:31:30ID:???
635と636は自分でバイナリエディタでも開いて画像にスクリプト埋め込んでこい
0656nobodyさん2009/03/01(日) 00:32:37ID:???
>>654
日本語でおk
0657nobodyさん2009/03/01(日) 00:36:08ID:???
>>655
ここの連中じゃ画像に埋め込むこともできなそうだなw
0658nobodyさん2009/03/01(日) 01:09:42ID:???
そもそもファイルを区別する必要性がわからねえ
最終的にブラウザで表示できるんだから何でもいいだろ
0659nobodyさん2009/03/01(日) 01:18:56ID:???
画像に埋め込んだスクリプトが反応するような糞ブラウザはIEぐらいだろ
0660nobodyさん2009/03/01(日) 02:35:03ID:eUPI6W90
mb_splitで正規表現にデミリタいらないのってバグですか?
0661nobodyさん2009/03/01(日) 03:05:47ID:ircjQ+OX
パーミッションの問題なんだけど、
txtファイルや、htmlファイルは、
ユーザーにrを渡さないと
ブラウザで閲覧したときに見れないんだけど、
.phpファイルは、なぜか
ユーザーに渡す権限が0でも
ブラウザでアクセスしたときに、
動作してしまうんだけど、これってなんで?
0662nobodyさん2009/03/01(日) 03:43:41ID:???
>>661
module版かcgi版かで若干答えが変わるかなぁ。。

ユーザって誰のこと??
0663nobodyさん2009/03/01(日) 03:47:49ID:ircjQ+OX
>>662
オーナー | グループ | 末端ユーザー

こういう概念です
0664nobodyさん2009/03/01(日) 03:50:25ID:ircjQ+OX
>>662
「CGIに関しては純粋にSuExecでの動作」

「CGI版をラッパーを使用し所有者の権限にて動作させる」

と書いてあります。
0665nobodyさん2009/03/01(日) 04:31:12ID:???
>>664
答えが書いてあるよ〜。

Webサーバの一番基本的な動きは分かってるかな?

ブラウザが「このファイルくれ!」ってWebサーバにいうと
Webサーバは自分の中から探して、読みこんで、「処理して」、結果をブラウザに返す。
このときWebサーバもユーザとして動いてる。

こんだけ。
0666nobodyさん2009/03/01(日) 06:55:07ID:ircjQ+OX
pear::authのサンプルコードで、
MySQLの例ばっかりなのだが、
これってSQLiteでもできるんだよね?

コードはどう書けばいいのかな?
特にDSNのあたり。
http://oshiete1.goo.ne.jp/qa3008843.html
このサンプルで、DSNをSQLiteに変更したものを
書いてもらえますか?
0667nobodyさん2009/03/01(日) 06:59:03ID:ircjQ+OX
それから認証の実装で
pear::authを使うことの是非についても
意見を述べてもらえますか?

pearのページ見たら、認証のカテゴリだけで7つも
モジュールあるじゃないですか。
0668nobodyさん2009/03/01(日) 07:01:29ID:???
>>666
ぐぐればすぐ見つかるよ〜
0669nobodyさん2009/03/01(日) 11:45:18ID:???
どうやら
質問

の人な気がするぜ
0670nobodyさん2009/03/01(日) 13:13:02ID:???
そんなの見りゃわかるよ
0671nobodyさん2009/03/01(日) 13:42:43ID:???
------------ここまで自演でした
0672nobodyさん2009/03/01(日) 14:46:48ID:lFCp+aHu
PHPの書き方で<?=$msg?>のような書き方が可能/不可能に設定できる項目教えてください
(ググろうにも「<?=?>」のようなワードでは検索できなくて・・・)
0673nobodyさん2009/03/01(日) 14:50:54ID:lFCp+aHu
short_open_tagでした、事故解決しました
0674nobodyさん2009/03/01(日) 17:35:53ID:Jolk/1HK
phpを使いテキストの各行にある文字列(例えばここでは"hogehoge")
が含まれているかどうかを調べるにはどのようにするのがよいのでしょうか?
0675nobodyさん2009/03/01(日) 17:41:35ID:???
file
foreach
preg_match
0676nobodyさん2009/03/01(日) 17:43:35ID:???
hogehogeがあるかどうかだけならpreg_matchはおおげさだな
strstrあたりでいいと思う
0677nobodyさん2009/03/01(日) 17:43:53ID:???
preg_matchがあればわざわざfileとforeachを組み合さなくてもできます
0678nobodyさん2009/03/01(日) 17:46:03ID:Jolk/1HK
どっちなんだろう・・・
0679nobodyさん2009/03/01(日) 17:50:35ID:???
>>678
史ね
少しは与えられた材料で自分で考えろ
0680nobodyさん2009/03/01(日) 17:51:32ID:???
文字列探索といったら正規表現しか知らない奴って何なの?バカなの?
0681nobodyさん2009/03/01(日) 18:02:38ID:qwqgUI7e
>>677の言ってることはパターン修飾子か?

$list = file("hoge.txt");
for ($i = 0; $i < count($list); $i++) {
if (strpos($list[$i]), "hogehoge") {
echo $i . "行目にhogehogeが見つかりました<br>\n";
}
}

これと同じことをできるのなら俺もぜひ教えてもらいたい
06826812009/03/01(日) 18:04:25ID:???
あ、ごめん
$i行目じゃなくて$i+1か
0683nobodyさん2009/03/01(日) 18:20:01ID:???
if (strpos($list[$i]), "hogehoge") {
なんじゃこりゃ?
0684nobodyさん2009/03/01(日) 18:33:38ID:???
>>681
おれが言ってるpreg_matchがでてこないんだがアンカーミスかね
06856812009/03/01(日) 18:38:49ID:???
$list = file("hoge.txt");
for ($i = 0; $i < count($list); $i++) {
if (preg_match("/hogehoge/", $list[$i])) {
echo $i+1 . "行目にhogehogeが見つかりました<br>\n";
}
}

それじゃこれで
0686nobodyさん2009/03/01(日) 18:41:12ID:???
>>685
動作には問題ないけど
for内にcount($list)を入れると、ループ毎にcountが実行されるので、
$cnt = count($list);

$i < $cnt

みたいにするといいよー
0687nobodyさん2009/03/01(日) 19:29:13ID:???
>>685
preg_matchじゃだめだった
無駄にfileとforeachしなくてもpreg_match_all使えば一行で住む
0688nobodyさん2009/03/01(日) 19:42:54ID:???
何行目に現れるかもわかる?
0689nobodyさん2009/03/01(日) 20:20:12ID:???
わかる
0690nobodyさん2009/03/01(日) 22:47:16ID:Jolk/1HK
perlあがりでどうもphpはよく分からんのだが
datファイル(数字10桁)かどうかを調べるにはどうすりゃいいの?
これだとダメポ。

$datfile = 1234567890.dat;
$number = str_replace(".dat", "", $datfile);
if ($number != \d{10}){
 print "2chのdatじゃない";
} else {
 print "おk";
}
0691nobodyさん2009/03/01(日) 22:52:53ID:???
preg_match
0692nobodyさん2009/03/01(日) 22:54:09ID:???
>>690
$datfile = "1234567890.dat";
if (preg_match("/^\d{10}\.dat$/", $datfile)) echo "おk";
else "2chのdatじゃない";
0693nobodyさん2009/03/01(日) 22:59:06ID:Jolk/1HK
print Thx
0694nobodyさん2009/03/01(日) 23:04:31ID:???
正規表現(笑)
0695nobodyさん2009/03/01(日) 23:16:30ID:A3j42u8W
まとめてファイルをアップロードする仕組みを作りたいのですが、
PHPにZIPを解凍する関数ってあるのでしょうか?

やっぱり、フォームのfile要素をいくつも用意して
1つずつ選択して送信する方法しかないのでしょうか?
0696nobodyさん2009/03/01(日) 23:21:54ID:???
peclとかpearとか探せば色々あるよ
zipだけでもArchiveTarとかArchiveZipとかpecl zipとか色々
0697nobodyさん2009/03/01(日) 23:26:26ID:???
標準クラスであるだろうが
0698nobodyさん2009/03/01(日) 23:27:29ID:???
ArchiveTarは違ったわ
0699nobodyさん2009/03/01(日) 23:29:07ID:???
>>697
それってzip関数のことでしょ?
それはpecl
0700nobodyさん2009/03/01(日) 23:38:13ID:???
標準であるじゃん
暗号化ZIPには対応してないようだけど
0701nobodyさん2009/03/01(日) 23:40:37ID:???
そうだっけ?すまん
0702nobodyさん2009/03/01(日) 23:50:07ID:???
ID:Jolk/1HK
回答もらったらお礼ぐらい書けよksg
0703nobodyさん2009/03/02(月) 00:02:07ID:???
>>693にあるやん
0704nobodyさん2009/03/02(月) 00:07:04ID:???
ID:Jolk/1HK=>>703
07057032009/03/02(月) 00:14:22ID:???
>>704
いんや、>>692なんだけどね
別にお礼を期待して回答しているわけではないから、そんなのはどうだっていいよ
0706nobodyさん2009/03/02(月) 00:56:54ID:???
どうだっていいなら何で書くの?
0707nobodyさん2009/03/02(月) 06:17:58ID:???
アマゾンの文章を取ってきて、
一部の文を変更するプロキシみたいなの
作りたいんだけど、できる?

「この商品を買った人はこんな商品も買っています」

              ↓これを

「この商品を買ってしまったかわいそうな人はこんな商品も買っています」

みたいに変更して表示したいんだけど。

チラ見だと気がつかないって言う。
よーく見ると違いがわかるっていう。
0708nobodyさん2009/03/02(月) 06:18:54ID:???
>>1
0709nobodyさん2009/03/02(月) 06:36:54ID:xA87Qrbu
指定したディレクトリ内から、
指定したMD5(またはSHA-1)の値を持つファイルを取得したいのですが、
なにかよい方法はないでしょうか?

やはり、一度全部取得して、
ひとつひとつ確認する必要があるのでしょうか?

よろしくお願いします。
0710nobodyさん2009/03/02(月) 08:01:04ID:Kxwrby6q
$files = scandir("./doc");
$i = 2;
while($files[$i] != null ):
$files_end = $i;
$i++;
endwhile;

と、docフォルダに入っているファイル数をしらべるスクリプトですが、
while($files[$i] != null ):
の行で
Notice: Undefined offset: 5
と、Noticeが出て来ます。
この、Noticeを消すにはどうしたらいいでしょうか?
0711nobodyさん2009/03/02(月) 08:04:40ID:???
>>707
フィッシング詐欺はやめな
0712nobodyさん2009/03/02(月) 08:05:07ID:???
classの使いどころがさっぱりわからん
使えたらかっこいいんだろうなと思って
使いたい使いたいと思ってるけど結局使わないまま終わってしまう
0713nobodyさん2009/03/02(月) 08:08:31ID:???
>>712
すごい、カンタンなところからはじめれば?
0714nobodyさん2009/03/02(月) 08:10:21ID:???
>>712
変数名をclassにすればいいよ。
$class1 $class2 $class3
0715nobodyさん2009/03/02(月) 10:10:58ID:???
>>710
OUT => while($files[$i] != null ):

IN => while( isset($files[$i]) ):
0716nobodyさん2009/03/02(月) 10:18:29ID:???
>>712
無理して使わなくていいよ
所詮プログラミング手法の1つに過ぎない
世の中には全てオブジェクトにしないと扱うことができない
言語も存在するがPHPはそうではない
使いどころを意識してるうちは概念も理解できないはずだ
オブジェクト指向が何かとかは考えないで
まずはオブジェクトにしないとプログラムが動かないと思ってはじめてみるといい
0717nobodyさん2009/03/02(月) 12:30:23ID:???
クラスを使う利点を教えてください
0718nobodyさん2009/03/02(月) 12:39:55ID:???
人数が多い場合クラス分けしないと学年がばらばらごちゃごちゃになるじゃん
0719nobodyさん2009/03/02(月) 13:33:46ID:qotKuiB9
php5で動作するクラスを勉強で作ってます

class hello
{
function asa(){$word="おはよう";return $word;}
function hiru(){$word="こんにちは";return $word;}
function yoru(){$word="こんばんは";return $word;}
}

これを呼び出して挨拶を表示するときにこのように書きました
$obj=new hello;
echo $obj->asa;

クラスの使い方としてこのような用途で使用するのは正しいでしょうか?
0720nobodyさん2009/03/02(月) 13:47:22ID:yL43OBtl
MVCでアプリケーションを組もうとしています。

やはり、どうしてもクラス数が膨大になり、1ファイル1クラスにするので、
読み込むファイル数も膨大になってくるのですが、余程のことがない限り速度は気にするほど変わらないと考えても構いませんか?
0721nobodyさん2009/03/02(月) 13:56:03ID:???
おk
0722nobodyさん2009/03/02(月) 13:56:47ID:???
ウェブの場合クラス分けしてもそんなに膨大にはならんと思うけどな
0723nobodyさん2009/03/02(月) 14:02:29ID:Kxwrby6q
>>715
おお、ありがとうございます。 noticeが消えました!!
0724nobodyさん2009/03/02(月) 14:03:01ID:???
>>719
class hello {
function greeting(){ return $this->word; }
}
class asa extends hello {
var $word = "おはよう";
}
class hiru extends hello {
var $word = "こんにちは";
}

$obj = new asa(); echo $obj->greeting();
$obj = new hiru(); echo $obj->greeting();

こういうほうがより現実的。挙動を変えたければgreetingだけをいじればよいので。
0725nobodyさん2009/03/02(月) 14:13:16ID:???
$objを何度も作るのってアリなの?
0726nobodyさん2009/03/02(月) 14:29:02ID:Be8+CZVl
PDOでbindParamするときに、どうしても
PDO::PARAM_STRとPDO::PARAM_INTを同じbindで使いたくて
PDO::PARAM_STR|PDO::PARAM_INTてやってみたのですが、
こちらでエスケープしたエラーになってしまいます。
int、str片方づつならデータが取得できるのですが・・
どのような手段でできますでしょうか
よろしくお願いします
0727nobodyさん2009/03/02(月) 14:53:55ID:yL43OBtl
>>721-722
勉強がてらのものなので、クラス分けなどが、まだうまくできてないのかもしれません。

ありがとうございました
0728nobodyさん2009/03/02(月) 14:55:08ID:v7Ja9zye
フォーム内のラジオボタンがあります
<form>
<input type="radio" name="s" value="0" />ページ1
<input type="radio" name="s" value="1" />ページ2
<input type="radio" name="s" value="2" />ページ3
</form>

http://www.example/?s=1でアクセスしてきたとき、ページ2のラジオボタンを選択済みにさせたいのですが
どのように書けばよろしいのでしょうか?
0729nobodyさん2009/03/02(月) 15:00:03ID:???
if(sが1だったら){ echo 選択済み }
0730nobodyさん2009/03/02(月) 15:00:07ID:???
<input type="radio" name="s" value="0" <?if($_REQUEST["s"]=="0"){ echo "checked"; }?> />ページ1
<input type="radio" name="s" value="1" <?if($_REQUEST["s"]=="1"){ echo "checked"; }?> />ページ2
<input type="radio" name="s" value="2" <?if($_REQUEST["s"]=="2"){ echo "checked"; }?> />ページ3
0731nobodyさん2009/03/02(月) 15:02:03ID:v7Ja9zye
やっぱりそれしかないですよね、わかりました
ありがとうございます
0732nobodyさん2009/03/02(月) 15:13:43ID:Hva8cjMK
mb_convert_encodingでUTF-8の文字をSJISに変換した時、
SJISに対応する文字がない時はU+XXXXという文字列に変換されますが、
このXXXXはどういう法則に従って算出されているのでしょうか?
0733nobodyさん2009/03/02(月) 15:28:28ID:???
>>731
ライブラリやらFW使えば楽
>>732
まんま文字コードかと
0734nobodyさん2009/03/02(月) 16:54:20ID:v7Ja9zye
フレームワークで使われるキャッシュファイルについて質問です
キャッシュの作り方は以下のやり方でよろしいでしょうか?

キャッシュファイルがなかったら→キャッシュファイル作成→出力
キャッシュファイルがあったら→キャッシュファイル読み込み・出力
0735nobodyさん2009/03/02(月) 19:33:12ID:???
>>726
PDO::PARAM_STR|PDO::PARAM_INTなんて指定が仮に出来たとして
どんなSQL文になるのが望みなんだ

>>734
ok
後はキャッシュの有効期限やキャッシュの保存手段を設定できるようにしたりと
使いやすいようご自由に
0736nobodyさん2009/03/03(火) 00:38:28ID:ttnGHap+
KJ、田中ナルミ両氏による『〜スーパーサンプル 活用編 第2版』を見て、ADODBを使ってみました。
サンプルを真似しながら、何とか自分なりに扱えるようにはなったのですが、
見たことの無い記述法に戸惑ってます。

$DB = NewADOConnection($sql_type);
$DB->PConnect($server, $user, $password, $dbname);
$result = $DB->Execute('SELECT * FROM blog_articles');
echo "<pre>";
print_r($result->GetArray());
echo "</pre>";

↑このコードの中の、
$result->GetArray();
の部分です。

メソッド(変数);
とかだったら普通に見慣れた形なのですが、
変数->メソッド();
となっているようで、よくわかりません。

これはどういう記述なのでしょうか?
■ このスレッドは過去ログ倉庫に格納されています