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

【PHP】質問スレッドpart24【php】

レス数が950を超えています。1000を超えると書き込みができなくなります。
0001nobodyさん04/11/01 04:09:15ID:???
・PHP全般の質問スレです。 
・新規質問の方は上げてください。age進行でお願いします。 
・質問する際には環境も明記。 
・正しい日本語で分かりやすく。 
・レスがつかないからって逆切れする厨お断り。 
・解決しなくてもこたえてもらったら礼を。 


■本家 
 http://www.php.net/ ;

■日本 PHP ユーザ会 
 http://www.php.gr.jp/ ;

■PHP マニュアル 
 http://www.php.net/manual/ja/ ;

■PEAR マニュアル 
 http://pear.php.net/manual/ja/ ;

過去スレ, 関連スレ等>>2-4 
0875nobodyさん04/11/19 18:20:18ID:???
そんなんだったらflockの存在意義が無いだろボケ
0876nobodyさん04/11/19 18:26:18ID:???
元々存在意義無いし
0877nobodyさん04/11/19 19:04:08ID:???
mkdirの存在意義はあるよ
0878nobodyさん04/11/19 19:30:42ID:???
マルチバイト文字列関数を使いたいのですが、どの様にすれば良いでしょうか?

↓PHPマニュアルには
http://jp2.php.net/manual/ja/ref.mbstring.php
>configureスクリプトでモジュールを有効にする必要があります。
>詳細は、インストールの節を参照して下さい。
と書いてありますが、指定されたインストールのページには
詳細どころか configureスクリプト の文字すら無く、弱っております。
0879nobodyさん04/11/19 19:45:35ID:???
>>878
志村〜
環境!環境!
0880素人04/11/19 20:44:15ID:/iwixYaK
教えてくだされ

Apache バージョン 2.0.40
PHP Version 4.3.9

簡単なファイルアップロードのプログラムを動かすと
なぜかファイルサイズが倍(正確には倍より少しちいさい)ぐらいになってしまいます。
当然、中身もおかしいので画像ファイルだとずれた画像になってしまいます。
ftpだとうまくいきます。

プログラムは
http://www.pat.hi-ho.ne.jp/dimension/sample/sample_others_upload.shtml

のとおりなのですが、、、

どなたかお心当たりはありませんでしょうか。
0881nobodyさん04/11/19 21:35:16ID:???
>>879
たぶんWindows。
なんとなく。ただただなんとなく。
0882カポコン04/11/19 21:38:18ID:???
拡張モジュールを使いたいのなら
Linuxはエナブルで追加、
Windowsは、php**.dllを置いた所に拡張モジュールを置いて
リスタート
0883nobodyさん04/11/19 21:45:35ID:???
>>882
ちゃんとした表記が出来ないなら英単語のまま書けよ。
検索も出来ないし意思の疎通が難しくなるだけだろ。
0884nobodyさん04/11/19 23:07:45ID:???
Enable = エナブル
0885nobodyさん04/11/19 23:27:14ID:???
aliasをジョージと読むことはあってもenableをエナブルとよぶ馬鹿はおらんやろ。
0886nobodyさん04/11/19 23:33:25ID:???
エナブルってツールがあるのかと思ったよ。enableかよ。
0887nobodyさん04/11/19 23:54:10ID:???
>>886
カポコンの言う事ですから!残念!!
0888nobodyさん04/11/20 00:03:07ID:???
喝っ!・・・・・ポコ〜〜〜〜ン・・・
0889nobodyさん04/11/20 00:16:24ID:???
発音はイネーブルだろ。英語勉強しなおせ
0890nobodyさん04/11/20 00:23:38ID:???
何度注意しても タイトルを titole にしてくるデザイナーがうちにいるよ orz
↓次の質問いってみようか
0891nobodyさん04/11/20 00:29:02ID:???
ループに使う変数をroopってするやつもうちの周りにいるな
whileループ使うよりfor使えばいいのに
0892nobodyさん04/11/20 02:03:29ID:lZ7mI+hy
すみません
プログラム経験まったくない初心者で今日からPHPを勉強し始めました。
まだ本当の初心なのですが、
$x = 1;
$a = 2;
$b = $a + 3 * $x;

print("計算結果は".$a+3*$x."です<br>");
print("計算結果は".$b."です<br>");

としたときに

3です
計算結果は5です

と表示されるのはなぜなのでしょうか?
いろいろ調べてみたのですがわかりません。
教えていただけないでしょうか?
0893nobodyさん04/11/20 02:16:08ID:???
>>892
http://jp.php.net/manual/ja/language.operators.php#language.operators.precedence
これ見ると、「.」と「+」の演算子の優先順位は同じだよな。
どういう順番で演算されてそういう結果になったと思う?
0894nobodyさん04/11/20 02:34:35ID:lZ7mI+hy
こんな深夜にありがとうございます。
これを2時間くらい考えていて眠れなかったんです。

3*$xが先に計算されて3ですよね
その後に”計算結果は.$b”というありえない数字が足されたために無視されたので

3です

になったんでしょうか?
0895nobodyさん04/11/20 02:43:18ID:???
"計算結果は".$a+3*$x."です<br>"

"計算結果は".$a+3."です<br>"

"計算結果は2" +3."です<br>"

3. "です<br>"

"3です<br>"
0896nobodyさん04/11/20 02:46:18ID:???
>>894
取り敢えず、動作が分からなくなったら、
895みたいな感じで、確認する癖つけよう。
一番手っ取り早く理解出来る。
0897nobodyさん04/11/20 02:48:59ID:???
>>894
少しもちつけ。
「"計算結果は".$a+3*$x."です<br>"」の演算について話してる時に$bは出てこないだろう。
「"計算結果は".$a」の部分の結果が "計算結果は.$a" となるわけでも無い。

落ち着いたら、さっきのリンクしたページから文字列演算子について調べてみよう。
英文かもしれないが答えは見つかるはずだ。
0898nobodyさん04/11/20 02:50:17ID:???
>>895-896
深夜なのにどうもすみませんでした
なかなか奥が深いのですね。
試料を探すだけじゃなくていろいろやりながら勉強してみます。
ありがとうございました。
089989404/11/20 03:06:00ID:???
>>897
えっと…
$a+3*$xだと(2+(3*1))になるから5ですよね
前の""の文字列は0で認識されるんですよね

"計算結果は".$a+3*$x.だと0.2+3に…
だと変だな
余計にこんがらがってきたw
0900nobodyさん04/11/20 03:07:23ID:???
で、ところで、print文の中で演算させる方法はあるのでしょうか?
perlで言うと@{[ ****** ]}みたいな…
0901nobodyさん04/11/20 03:28:05ID:???
perlでの機能をPHPで…
ってのは、もうウンザリ。
0902nobodyさん04/11/20 03:37:37ID:???
>>899
これで最後にしてくれ
>"計算結果は".$a+3*$x.だと0.2+3に…

"計算結果は".$a+3*$x

"計算結果は".$a+3

//文字列と数値を . (ドット)で演算すると、数値は文字列に変換されてくっつく
"計算結果は2" +3

//文字列と数値を + (プラス)で演算すると、文字列はゼロに変換されて加算される
0 +3
0903nobodyさん04/11/20 03:42:02ID:???
>>899
もちつけ。>>902が既に書いているが念の為

1. まず、「*」演算子が一番優先度が高いのでそこが評価される。
   → "演算結果は".$a+3*1."です<br>" → "計算結果は".$a+3."です<br>"
2. 「.」演算子と「+」演算子は優先度は同じ。左から順番に評価される。
3. "計算結果は".$a の部分。演算子の両側を文字列として扱うので、
  $a の値である 2 は "2" と変換される。
   → "計算結果は"."2"+3."です<br>" → "計算結果は2"+3."です<br>"
4. "計算結果は2"+3 の部分。演算子の両側を数値として扱うが、
  数値で始まっていない文字列 "計算結果は2" は 0 に変換される。
   → 0+3."です<br>" → 3."です<br>"
5. 3 は "3" に変換される。
   → "3"."です<br>" → "3です<br>"
0904nobodyさん04/11/20 04:16:37ID:???
お。なんかいい感じのレスが続いてるねぇ。

print("1. 計算結果は".$a+3*$x."です<br>");
print("2. 計算結果は".$b."です<br>");
これも行っときますか。
0905nobodyさん04/11/20 05:38:05ID:???
>>904
"1. 計算結果は" が 1.0 に変換されるというパターンか。
釣られてはみたものの、単に「マニュアル読め」、「試せ」で終わらせたい気もする。
http://jp.php.net/manual/ja/language.types.type-juggling.php
0906nobodyさん04/11/20 05:41:33ID:???
>>900
それ系の質問ウンザリだからわかってるPerlを使っとけ
090790504/11/20 05:55:12ID:???
しまった。"1. 計算結果は2" が浮動少数点数の 1 に変換されて…だな。
>>903 でも "演算結果は" とかヤっちゃってるし、吊って来る…
0908nobodyさん04/11/20 09:12:17ID:???
文字列の途中に計算結果を . で結合したい時は()[括弧]で括れってことだな。
print("計算結果は".($a+3*$x)."です<br>");
0909nobodyさん04/11/20 09:19:06ID:???
漏れはecho派だからこうするかな
echo "計算結果は", $a+3*$x, "です<br>";

括弧の対応で悩まなくて済むくらいしか利点が無いけど
0910nobodyさん04/11/20 12:04:58ID:???
意外と勉強になった人も多いんでは?w
建設的だったぽい
0911nobodyさん04/11/20 12:25:13ID:???
っていうか普通カッコつかうだろ
0912nobodyさん04/11/20 12:37:14ID:VmPsi8L8
$result = mysql_query("SELECT username, password
FROM user
WHERE username = '$username' AND password = '$password'", $con);
$row = mysql_numrows($result);
if($row != "0"){


上みたいな感じで会員制サイト作る際のログイン基準作ってるんですが、
セキュリティ的にこれで大丈夫ですかね?
あまりにシンプル過ぎてカナーリ心配なのですが・・・
ご指摘求みます
0913nobodyさん04/11/20 12:56:28ID:???
>>912
そんなコード書いてたら俺みたいなスーパーハカーに簡単に全ユーザの
パスワードを盗まれちゃうよ。

クロスサイトスクリプティングとかサニタイジングでググッてみれ。
0914nobodyさん04/11/20 13:00:12ID:???
$password'
ここに
・・・・; drop・・・
091591204/11/20 13:12:09ID:VmPsi8L8
クロスサイトってjavascriptとか使ってやるあれですよね?
上の例でなぜCSSが問題になるのかよく分からないのですが?
username と password に入力制限するだけでは駄目なのでしょうか?
091691204/11/20 13:14:06ID:???
XSSでしたなorz
0917nobodyさん04/11/20 13:15:08ID:???
最近の若いモンは算数が出来ないと聞くがここの連中は特に凄いのが集まってるな。
0918nobodyさん04/11/20 13:15:23ID:???
>>915
まあ素直にググッてみれ。
0919nobodyさん04/11/20 13:16:11ID:???
>>917
おばさんかもしれないよ
092091204/11/20 13:20:50ID:???
ググッてみましたが、
分かりませんです。
一応XSSについては気をつけていたつもりなのですが。
サニタイジングって無効化するやつですよね。
上記の例で何を無効化すべきなのか分かりません。
username と passwordですか?
914さんの発言を見ると、passwordの入力フォームで
ある内容を入力されるとパスワードがdropできちゃうってことですかね?
092191204/11/20 13:22:59ID:???
例えば上記例で、不正ユーザが$row=1として送っても、
4行目でrow=0に上書きされるはずですよね・・・
0922nobodyさん04/11/20 13:34:06ID:???
$password = " passwd; drop table user;"
0923nobodyさん04/11/20 13:40:04ID:???
>>917
こんなの算数でもなんでもないだろ
0924nobodyさん04/11/20 13:45:53ID:???
パスワード欄に「' or password !=' 」とか打たれると…。
092591204/11/20 13:51:16ID:???
なるほど、ちょっと感心しちゃいました。
名前入力とかはXSS気をつけてたんですが、
最も重要なポイントをサニタイジングするのを忘れてるようですね汗。

ありがとうございました。
0926nobodyさん04/11/20 14:00:19ID:???
そもそも作ってて気づけ。
0927nobodyさん04/11/20 14:19:42ID:???
$a=2004/11/25(日付)
$b=3(ヶ月)

$aに$bを足して、
$a=2005/02/25としたいのですが、
方法がよく分かりません。
$a=strtotime($a);
$a=mktime (0,0,0,date("m", $a)+$b, date("d", $a), date("Y", $a));
として02/25の部分はなんとかできたと思うのですが、
2004を2005にするにはどうすればいいでしょうか?
ご教授くださいませ
0928nobodyさん04/11/20 14:37:13ID:???
>>927
list($y,$m,$d) = explode("/", $a);
$a = date("Y/m/d", mktime(0.0.0. $m+$b, $d, $y));
0929 ◆.jC7ANgFY. 04/11/20 15:49:00ID:???
>>927 strtotimeは便利だよ。だから
$a = strtotime('2004/11/25 + 3 Month');
とかも書ける。"for($i=0;$i<20;$i++);"ぐらいの時間かかるけど。

下ので様子を見てみるといい
echo date('Y/m/d', strtotime('2004/11/25 + 3 Month'));
0930nobodyさん04/11/20 15:58:54ID:mKhjN6bd
サーバでスクリプトとしてphpを利用したいのですが
何もせずに戻り値だけ0を返すような物はどう書いたらいいでしょうか?
これkだえだとどうもダメだったので、教えてください。

#!/usr/bin/php
<?
?>

0931nobodyさん04/11/20 16:06:16ID:???
は? 何もしないならHTMLで良いやん
0932nobodyさん04/11/20 16:10:58ID:???
>>930
return 0; でいいのかな?何に対する戻り値か分からん。。
OSへ返す終了ステータスならexitとか。
0933nobodyさん04/11/20 16:11:55ID:???
単にechoだけつかって
それをfileで他の鯖から読み込んで中継にしてる香具師は俺くらいか
0934nobodyさん04/11/20 17:01:04ID:???
>>930
これ以上PHPユーザの質を下げないでくれ。
0935nobodyさん04/11/20 17:10:44ID:???
質の高いPHPユーザーはこんなトコ来ん
0936nobodyさん04/11/20 17:36:08ID:???
普通のユーザももう逃げてる
0937nobodyさん04/11/20 17:44:26ID:???
>>874
一日200万回程度回るカウンタでも壊れた事はないので、まぁそれなりなのではないかと思う。
0938nobodyさん04/11/20 17:57:03ID:???
俺のクリスマスの予定が決定
↓レス番1桁目     ↓時刻の秒1桁目
1 妹の前で       1 愛を叫ぶ
2 自分の部屋で    2 「ごきげんよう お姉さま」と言う
3 体育倉庫で      3 一人で手淫
4 姉の前でに      4 美少女とSEXする
5 地元の小学校で   5 運命の美少女と出会う
6 クリスマスに      6 首吊り
7 親の前で        7 掘られる
8 トイレで        8 谷亮子でオナニー
9 好きな子の前で   9 練炭で自殺
0 2ちゃんねるで    0 2ちゃんねる引退
0939nobodyさん04/11/20 17:58:28ID:???
>>874
「PHPのFLOCK」の意図するところがわからない
0940nobodyさん04/11/20 18:17:46ID:???
>>912からXSS対策ができてないと言い切れるおまえらは天才ですね
プログラマーはだから馬鹿にされるんですよ
0941nobodyさん04/11/20 18:29:57ID:???
>>940
当たってたから良いんじゃね?w

確かに>>912だけじゃxss対策してるかはわからん罠。
0942nobodyさん04/11/20 18:44:51ID:???
>>912
あれだけしか出してこなくて『これで大丈夫ですかね?』って聞いてるんだから対策してないと考えるのが妥当でしょ。
だってaddslashesとかやってたらそのコードも書くっしょ。
0943nobodyさん04/11/20 19:08:46ID:???
>>922
>>924
これ、本当に成功します?
いろいろ試してみたけどmysql_queryに2文入れられないみたいだし・・、シングルクォーテーションをエスケープしてたら絶対無理そうだし
0944nobodyさん04/11/20 19:15:04ID:???
>>939
PHP のソースコード内の信頼性を言ってるんじゃないか?
C言語でファイルシステムの fcntl(UNIX) か LockFileEx(Win32) を呼んでるルーチンがあるところ。
0945nobodyさん04/11/20 21:22:29ID:???
算数より読解ヤバイ
0946nobodyさん04/11/20 21:24:51ID:???
>>943
>シングルクォーテーションをエスケープしてたら絶対無理そうだし
912のソースからそういう想定をするのは無意味。
出された情報が少ないんだから、一般論で答えるしかないだろ。
少なくとも書いてないことまで補って妄想するよりまし。
今回は912にも思い当たることがあったみたいだからいいじゃんよ。
0947nobodyさん04/11/20 23:00:29ID:???
>>946
int型でシングルクォーテーションつかってない部分でもできませんでした。
912のソースのような部分が私のスクリプトにもあって、それで本当にどうなのか知りたかったのです。
自分のスクリプトでいろいろ試したのですが抜け穴なかなか見つけられなくて
0948nobodyさん04/11/20 23:03:55ID:???
>>947
対策してるんならOK 対策してないんならダメ

何が対策になるのかわからないのは問題外
0949nobodyさん04/11/20 23:06:18ID:???
content 云々でページを転送させる記述が思い出せない。
だれかおしえてくり
0950nobodyさん04/11/20 23:08:27ID:???
>>947
まあ確かに、どこまでやれば大丈夫かということに不安になる気持ちも分かる。
とりあえず下記のURLでも読んで、じっくり考えてみて。
ttp://www.ipa.go.jp/security/awareness/vendor/programming/a01_02_main.html
0951nobodyさん04/11/20 23:17:11ID:???
>>949
移動しろ

△▲ WebProg 初心者の質問 Part10 ▼▽
http://pc5.2ch.net/test/read.cgi/php/1095633323/
0952nobodyさん04/11/20 23:23:05ID:???
>>949
htmlの話なら web制作板へ
095394904/11/20 23:26:25ID:???
php上での記述の仕方が知りてーんだよ
0954nobodyさん04/11/20 23:26:53ID:???
移動しろ。
0955nobodyさん04/11/21 02:52:46ID:???
phpで構築されてるサイトで、
phpinfo(); の内容がすぐにわかってしまうのは
セキュリティ上、まずくはないんでしょうか?
0956nobodyさん04/11/21 02:56:28ID:???
>>955
phpinfo()の内容はphp.iniで制御できるよ。
0957nobodyさん04/11/21 05:41:12ID:???
phpinfo()が使えないように設定してあっても、php.iniやhttpd.confが
perlで作ったスクリプトで覗けてしまう無料レンタルサーバはよくあるな。
0958nobodyさん04/11/21 08:53:49ID:???
結局自作のphpinfo()関数作ればどうにでもなりそうな気もする
0959nobodyさん04/11/21 13:01:17ID:mw841Fe0
教えてください

RedHat9
PHP4
にmime_magic_moduleが
入っている環境なのですが、

 以下のソースの中で、mime-type: text/htmlのときに表示させるように
したいのですが、具体的なmime_magicの使い方がわからず困っています。

具体的にどうすればよいのかお教えください。

$cd = $_REQUEST['path'];
$dirname = "/home/hoge/public_html$cd/";
$dh = dir($dirname);
while ($entry = $dh->read()){
  if($entry != "index.html"){
    print $entry;
  }
}

よろしくお願いいたします。
0960nobodyさん04/11/21 17:11:10ID:???
>>955
PHPは初心者向けだからセキュリティよりもまずは利便性なんだよ
0961nobodyさん04/11/21 17:17:27ID:???
そう言う問題なのか…?w
0962nobodyさん04/11/21 17:54:26ID:???
>>955
どの項目だ
0963nobodyさん04/11/21 18:19:45ID:???
>>960
まぁ確かにブラウザにエラー出力するスクリプトが多いし
セキュリティよりも利便性ってのもある気もするな
0964nobodyさん04/11/21 19:58:14ID:???
大量に行があるテキストファイルから目的の行を探し当て取得するのに
もっとも効率のいい方法ってどんな感じですか?
whileで回しながら一行ずつチェックするのは
最後のほうに目的の行があった場合、時間がかかって困ってます。
データベース使わずになんとかならないでしょうか。
0965nobodyさん04/11/21 20:10:43ID:???
インデックスをつけるとか?
名前ならaから始まるのはここ、bから始まるのはここという情報を記憶するみたいな
0966nobodyさん04/11/21 20:14:35ID:???
データ次第。リニアサーチが不安定なら他のも試せ
096795904/11/21 21:53:54ID:mw841Fe0
 すいません、なにとぞmime_magicの使い方をお教え願えないでしょうか?
maime_magic以外にも、ファイルの形式を判断できる方法があれば、
そちらも教えていただきたいのですが、よろしくお願いします。

うざくて申し訳ないです。
0968nobodyさん04/11/21 22:10:00ID:???
>>967
Mimetype関数
0969nobodyさん04/11/21 23:48:46ID:???
"ソ"という文字をフォームを使って入力されると
データの中身が「ソ\」になってしまいます。
なので「ソ\」の後ろから「\」をとりたいのですが
上手に正規表現を組めません。
パターン構文のサイトを見て試行錯誤したのですが上手にできません。

どのようにすればいいか教えてください。

foreach ($src_list as $i => $v)
$v = ereg_replace ("ソ\\\", "ソ\", $v);
0970nobodyさん04/11/21 23:52:50ID:???
>969
それはエスケープされているわけだが「ー」「表」なども同様の副作用が生じる。
エスケープと逆の事をする関数を使え。
0971nobodyさん04/11/21 23:55:03ID:???
ありがとうございます。
その\と逆の事をする関数を探します。ラジャ
0972nobodyさん04/11/21 23:57:06ID:???
>>969
.htaccessに「php_flag magic_quotes_gpc Off」って書いとけば無問題
そして必要なところでは自分でエスケープすればいい
0973nobodyさん04/11/21 23:58:43ID:???
みつけました>逆の事をする関数
stripslashes

>>972
ありがとうございます。
是非やってみます
0974nobodyさん04/11/22 00:57:12ID:ui2dUAYs
質問です。
文字列"a1"から$a1を作り出す(読み出す)ことってできるのでしょうか。
JavaScriptやVBAなら文字列→変数に変換できるので、PHPでも同じことが
できるだろうと調べてみたものの見つからず。。
よろしくお願いします。
0975nobodyさん04/11/22 01:11:21ID:???
>>974
可変変数のことでしょうか?

$a["sample"] = "ほげほげ";
$name = "sample";

echo $a[$name];

−−−−−−−−−
出力結果:
ほげほげ
レス数が950を超えています。1000を超えると書き込みができなくなります。