【PHP】質問スレッドpart24【php】
レス数が950を超えています。1000を超えると書き込みができなくなります。
0001nobodyさん
04/11/01 04:09:15ID:???・新規質問の方は上げてください。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:???0876nobodyさん
04/11/19 18:26:18ID:???0877nobodyさん
04/11/19 19:04:08ID:???0878nobodyさん
04/11/19 19:30:42ID:???↓PHPマニュアルには
http://jp2.php.net/manual/ja/ref.mbstring.php
>configureスクリプトでモジュールを有効にする必要があります。
>詳細は、インストールの節を参照して下さい。
と書いてありますが、指定されたインストールのページには
詳細どころか configureスクリプト の文字すら無く、弱っております。
0880素人
04/11/19 20:44:15ID:/iwixYaKApache バージョン 2.0.40
PHP Version 4.3.9
簡単なファイルアップロードのプログラムを動かすと
なぜかファイルサイズが倍(正確には倍より少しちいさい)ぐらいになってしまいます。
当然、中身もおかしいので画像ファイルだとずれた画像になってしまいます。
ftpだとうまくいきます。
プログラムは
http://www.pat.hi-ho.ne.jp/dimension/sample/sample_others_upload.shtml
のとおりなのですが、、、
どなたかお心当たりはありませんでしょうか。
0882カポコン
04/11/19 21:38:18ID:???Linuxはエナブルで追加、
Windowsは、php**.dllを置いた所に拡張モジュールを置いて
リスタート
0884nobodyさん
04/11/19 23:07:45ID:???0885nobodyさん
04/11/19 23:27:14ID:???0886nobodyさん
04/11/19 23:33:25ID:???0888nobodyさん
04/11/20 00:03:07ID:???0889nobodyさん
04/11/20 00:16:24ID:???0890nobodyさん
04/11/20 00:23:38ID:???↓次の質問いってみようか
0891nobodyさん
04/11/20 00:29:02ID:???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:???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."です<br>"
"計算結果は2" +3."です<br>"
3. "です<br>"
"3です<br>"
0897nobodyさん
04/11/20 02:48:59ID:???少しもちつけ。
「"計算結果は".$a+3*$x."です<br>"」の演算について話してる時に$bは出てこないだろう。
「"計算結果は".$a」の部分の結果が "計算結果は.$a" となるわけでも無い。
落ち着いたら、さっきのリンクしたページから文字列演算子について調べてみよう。
英文かもしれないが答えは見つかるはずだ。
0898nobodyさん
04/11/20 02:50:17ID:???深夜なのにどうもすみませんでした
なかなか奥が深いのですね。
試料を探すだけじゃなくていろいろやりながら勉強してみます。
ありがとうございました。
0899894
04/11/20 03:06:00ID:???えっと…
$a+3*$xだと(2+(3*1))になるから5ですよね
前の""の文字列は0で認識されるんですよね
"計算結果は".$a+3*$x.だと0.2+3に…
だと変だな
余計にこんがらがってきたw
0900nobodyさん
04/11/20 03:07:23ID:???perlで言うと@{[ ****** ]}みたいな…
0901nobodyさん
04/11/20 03:28:05ID:???ってのは、もうウンザリ。
0902nobodyさん
04/11/20 03:37:37ID:???これで最後にしてくれ
>"計算結果は".$a+3*$x.だと0.2+3に…
"計算結果は".$a+3*$x
"計算結果は".$a+3
//文字列と数値を . (ドット)で演算すると、数値は文字列に変換されてくっつく
"計算結果は2" +3
//文字列と数値を + (プラス)で演算すると、文字列はゼロに変換されて加算される
0 +3
0903nobodyさん
04/11/20 03:42:02ID:???もちつけ。>>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:???"1. 計算結果は" が 1.0 に変換されるというパターンか。
釣られてはみたものの、単に「マニュアル読め」、「試せ」で終わらせたい気もする。
http://jp.php.net/manual/ja/language.types.type-juggling.php
0907905
04/11/20 05:55:12ID:???>>903 でも "演算結果は" とかヤっちゃってるし、吊って来る…
0908nobodyさん
04/11/20 09:12:17ID:???print("計算結果は".($a+3*$x)."です<br>");
0909nobodyさん
04/11/20 09:19:06ID:???echo "計算結果は", $a+3*$x, "です<br>";
括弧の対応で悩まなくて済むくらいしか利点が無いけど
0910nobodyさん
04/11/20 12:04:58ID:???建設的だったぽい
0911nobodyさん
04/11/20 12:25:13ID:???0912nobodyさん
04/11/20 12:37:14ID:VmPsi8L8FROM user
WHERE username = '$username' AND password = '$password'", $con);
$row = mysql_numrows($result);
if($row != "0"){
上みたいな感じで会員制サイト作る際のログイン基準作ってるんですが、
セキュリティ的にこれで大丈夫ですかね?
あまりにシンプル過ぎてカナーリ心配なのですが・・・
ご指摘求みます
0913nobodyさん
04/11/20 12:56:28ID:???そんなコード書いてたら俺みたいなスーパーハカーに簡単に全ユーザの
パスワードを盗まれちゃうよ。
クロスサイトスクリプティングとかサニタイジングでググッてみれ。
0914nobodyさん
04/11/20 13:00:12ID:???ここに
・・・・; drop・・・
0915912
04/11/20 13:12:09ID:VmPsi8L8上の例でなぜCSSが問題になるのかよく分からないのですが?
username と password に入力制限するだけでは駄目なのでしょうか?
0916912
04/11/20 13:14:06ID:???0917nobodyさん
04/11/20 13:15:08ID:???0920912
04/11/20 13:20:50ID:???分かりませんです。
一応XSSについては気をつけていたつもりなのですが。
サニタイジングって無効化するやつですよね。
上記の例で何を無効化すべきなのか分かりません。
username と passwordですか?
914さんの発言を見ると、passwordの入力フォームで
ある内容を入力されるとパスワードがdropできちゃうってことですかね?
0921912
04/11/20 13:22:59ID:???4行目でrow=0に上書きされるはずですよね・・・
0922nobodyさん
04/11/20 13:34:06ID:???0924nobodyさん
04/11/20 13:45:53ID:???0925912
04/11/20 13:51:16ID:???名前入力とかはXSS気をつけてたんですが、
最も重要なポイントをサニタイジングするのを忘れてるようですね汗。
ありがとうございました。
0926nobodyさん
04/11/20 14:00:19ID:???0927nobodyさん
04/11/20 14:19:42ID:???$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:???list($y,$m,$d) = explode("/", $a);
$a = date("Y/m/d", mktime(0.0.0. $m+$b, $d, $y));
$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何もせずに戻り値だけ0を返すような物はどう書いたらいいでしょうか?
これkだえだとどうもダメだったので、教えてください。
#!/usr/bin/php
<?
?>
0931nobodyさん
04/11/20 16:06:16ID:???0933nobodyさん
04/11/20 16:11:55ID:???それをfileで他の鯖から読み込んで中継にしてる香具師は俺くらいか
0935nobodyさん
04/11/20 17:10:44ID:???0936nobodyさん
04/11/20 17:36:08ID:???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ちゃんねる引退
0942nobodyさん
04/11/20 18:44:51ID:???あれだけしか出してこなくて『これで大丈夫ですかね?』って聞いてるんだから対策してないと考えるのが妥当でしょ。
だってaddslashesとかやってたらそのコードも書くっしょ。
0943nobodyさん
04/11/20 19:08:46ID:???>>924
これ、本当に成功します?
いろいろ試してみたけどmysql_queryに2文入れられないみたいだし・・、シングルクォーテーションをエスケープしてたら絶対無理そうだし
0944nobodyさん
04/11/20 19:15:04ID:???PHP のソースコード内の信頼性を言ってるんじゃないか?
C言語でファイルシステムの fcntl(UNIX) か LockFileEx(Win32) を呼んでるルーチンがあるところ。
0945nobodyさん
04/11/20 21:22:29ID:???0946nobodyさん
04/11/20 21:24:51ID:???>シングルクォーテーションをエスケープしてたら絶対無理そうだし
912のソースからそういう想定をするのは無意味。
出された情報が少ないんだから、一般論で答えるしかないだろ。
少なくとも書いてないことまで補って妄想するよりまし。
今回は912にも思い当たることがあったみたいだからいいじゃんよ。
0947nobodyさん
04/11/20 23:00:29ID:???int型でシングルクォーテーションつかってない部分でもできませんでした。
912のソースのような部分が私のスクリプトにもあって、それで本当にどうなのか知りたかったのです。
自分のスクリプトでいろいろ試したのですが抜け穴なかなか見つけられなくて
0949nobodyさん
04/11/20 23:06:18ID:???だれかおしえてくり
0950nobodyさん
04/11/20 23:08:27ID:???まあ確かに、どこまでやれば大丈夫かということに不安になる気持ちも分かる。
とりあえず下記のURLでも読んで、じっくり考えてみて。
ttp://www.ipa.go.jp/security/awareness/vendor/programming/a01_02_main.html
0951nobodyさん
04/11/20 23:17:11ID:???移動しろ
△▲ WebProg 初心者の質問 Part10 ▼▽
http://pc5.2ch.net/test/read.cgi/php/1095633323/
0953949
04/11/20 23:26:25ID:???0954nobodyさん
04/11/20 23:26:53ID:???0955nobodyさん
04/11/21 02:52:46ID:???phpinfo(); の内容がすぐにわかってしまうのは
セキュリティ上、まずくはないんでしょうか?
0957nobodyさん
04/11/21 05:41:12ID:???perlで作ったスクリプトで覗けてしまう無料レンタルサーバはよくあるな。
0958nobodyさん
04/11/21 08:53:49ID:???0959nobodyさん
04/11/21 13:01:17ID:mw841Fe0RedHat9
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;
}
}
よろしくお願いいたします。
0961nobodyさん
04/11/21 17:17:27ID:???0964nobodyさん
04/11/21 19:58:14ID:???もっとも効率のいい方法ってどんな感じですか?
whileで回しながら一行ずつチェックするのは
最後のほうに目的の行があった場合、時間がかかって困ってます。
データベース使わずになんとかならないでしょうか。
0965nobodyさん
04/11/21 20:10:43ID:???名前ならaから始まるのはここ、bから始まるのはここという情報を記憶するみたいな
0966nobodyさん
04/11/21 20:14:35ID:???0967959
04/11/21 21:53:54ID:mw841Fe0maime_magic以外にも、ファイルの形式を判断できる方法があれば、
そちらも教えていただきたいのですが、よろしくお願いします。
うざくて申し訳ないです。
0969nobodyさん
04/11/21 23:48:46ID:???データの中身が「ソ\」になってしまいます。
なので「ソ\」の後ろから「\」をとりたいのですが
上手に正規表現を組めません。
パターン構文のサイトを見て試行錯誤したのですが上手にできません。
どのようにすればいいか教えてください。
foreach ($src_list as $i => $v)
$v = ereg_replace ("ソ\\\", "ソ\", $v);
0970nobodyさん
04/11/21 23:52:50ID:???それはエスケープされているわけだが「ー」「表」なども同様の副作用が生じる。
エスケープと逆の事をする関数を使え。
0971nobodyさん
04/11/21 23:55:03ID:???その\と逆の事をする関数を探します。ラジャ
0972nobodyさん
04/11/21 23:57:06ID:???.htaccessに「php_flag magic_quotes_gpc Off」って書いとけば無問題
そして必要なところでは自分でエスケープすればいい
0974nobodyさん
04/11/22 00:57:12ID:ui2dUAYs文字列"a1"から$a1を作り出す(読み出す)ことってできるのでしょうか。
JavaScriptやVBAなら文字列→変数に変換できるので、PHPでも同じことが
できるだろうと調べてみたものの見つからず。。
よろしくお願いします。
0975nobodyさん
04/11/22 01:11:21ID:???可変変数のことでしょうか?
$a["sample"] = "ほげほげ";
$name = "sample";
echo $a[$name];
−−−−−−−−−
出力結果:
ほげほげ
レス数が950を超えています。1000を超えると書き込みができなくなります。