【PHP】下らねぇ質問はここに書き込みやがれ 25
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2006/07/23(日) 20:00:03ID:???ここならお前の下らない質問に回答があるかも知れません。
まず読め【PHP マニュアル】
http://www.php.net/manual/ja/
過去スレは>>2
0134nobodyさん
2006/07/25(火) 18:20:42ID:???クラスのどこがわからないのかを詳しく。
「全部わからない」丸投げはご遠慮願いたい。
それは、マニュアルを見ないで努力放棄しているのと同じ。
0135nobodyさん
2006/07/25(火) 18:26:27ID:???引継ぎなら仕様書があるでしょ。使い方はそれを読む
中を弄らなければならないという場合でも所詮phpなんだし
まずはソースがあるんだから(=引継ぎ)それを理解して分からないことを質問しれ
ここは家庭教師ちゃうで
0136nobodyさん
2006/07/25(火) 18:33:58ID:???013787
2006/07/25(火) 18:49:56ID:???ちなみに>>111、>>113、>>117は偽者です。
なぜ俺が騙られたのか意味不明・・・
0138nobodyさん
2006/07/25(火) 18:52:35ID:???>6 準拠で質問していれば、偽者は排除できたわけですが…。
◆質問する場合の注意
1. 自分のIDを表示させること。(メール欄には何も記述しないでください)
0140nobodyさん
2006/07/25(火) 18:58:43ID:???「ソースを読んで理解して分からないこと」を教えてくださいよ。
107の存在意義が全くわからないんです。
0143nobodyさん
2006/07/25(火) 19:28:20ID:???以下のような感じで用いた場合にもリスクを抱え込むことになるのでしょうか?
extract($_REQUEST);
extract($_SERVER);
$Account = date("U");
$RD = fopen("password_files/".$Account.".DAT", "r"); <-重要なデータの格納されたファイルと仮定
echo fpassthru($RD);
fclose($RD);
0144nobodyさん
2006/07/25(火) 19:41:51ID:???何処で変数の初期化を忘れるかもしれないから、この程度の脆弱性について他人に訊くぐらいなら使わないほうがいい。
0146nobodyさん
2006/07/25(火) 19:55:13ID:???リスクもそうだけど、結果的に「変数の初期化をし忘れていないか」という不安を抱え込む。
extractしなければ、変数の初期化をし忘れていたら動作しない。
extract では必要な変数を初期化し忘れていると、extract で初期化されてしまうリスクを背負う。
そういうこと。
0147nobodyさん
2006/07/25(火) 20:16:57ID:???クライアントがアクセスしたhoge.php内だけでのグローバルと見て良いですか?
セッションとかにも絡まないですよね?
0149nobodyさん
2006/07/25(火) 20:20:36ID:???0150147
2006/07/25(火) 20:29:41ID:???ありがとん。
0151nobodyさん
2006/07/25(火) 20:35:57ID:???動機としては30点。
「ここで処理を終了するからexit」を堂々と書くべし。
むしろ「このページが表示されたらおかしいよ〜ん」と表示するページへの
locationヘッダを最後に入れとくくらいがいい(いや、それはさすがにやりすぎか)。
念のため〜は見えにくいバグを作る原因になりがちだからな。
0156nobodyさん
2006/07/25(火) 23:52:02ID:???<?require('hoge.php')?>
みたいにしてphpを埋め込んで使ってるんですが、
phpを埋め込んだ行のところでどうしても空行が入ってしまって困ってます。
空行ってのはhtmlのソース上で入るんではなくて、
何故かブラウザの表示上で入ってしまうんです。
(XP IE6)
htmlのソースの表示をすると空行などなく変なスペースとかも入ってないのでおかしな話なんですが、
どうしても解決しません。
読み込んでるhoge.phpは単に
<?php
echo <<<EOF
<div class="hoge">テキスト</div>
EOF;
?>
くらいしか書いてません。
同じものをhtmlに直接埋め込んだ形にすると、特に問題なく表示されるのですが…
どなたかアドバイス頂けますでしょうか、よろしくおねがいします。
0157nobodyさん
2006/07/25(火) 23:59:02ID:???> htmlのソースの表示をすると空行などなく変なスペースとかも入ってないのでおかしな話なんですが、
であれば、PHP の話題じゃないな。
0159nobodyさん
2006/07/26(水) 00:42:13ID:???そのHTMLを名前をつけて保存する→保存したHTMLをローカルで表示してみる
で、問題が再現するならHTMLやCSSの問題であってPHP関係ないので他所行って。
0160nobodyさん
2006/07/26(水) 00:49:07ID:???0161nobodyさん
2006/07/26(水) 00:50:21ID:???JSPならHttpServletRequestからgetInputStreamで取り出して、という手順で可能なのですが。
0162nobodyさん
2006/07/26(水) 00:53:09ID:???> 空行ってのはhtmlのソース上で入るんではなくて、
> 何故かブラウザの表示上で入ってしまうんです。
> htmlのソースの表示をすると空行などなく変なスペースとかも入ってないのでおかしな話なんですが、
先に確認したいんだが、「ソースの空行」と「ブラウザ表示上の空行」って違うよな?
ソースに空行があった場合、ブラウザ上では空白のように表示されるわけで見た目は空行にはならない。
話がそこから混乱してるので、症状の説明はもうちょい正確に頼む。
0163nobodyさん
2006/07/26(水) 01:22:39ID:+cVLS530<?php
$word1= "日本語";
$word2 = "English";
$word3 = "日本語English";
print ( $word1 ) . "<br>\n";
print ( $word2 ) . "<br>\n";
print ( $word3 ) . "<br>\n";
print strlen( $word1 ) . "<br>\n";
print strlen( $word2 ) . "<br>\n";
print strlen( $word3 ) . "<br>\n";
print mb_strlen( $word1 ) . "<br>\n";
print mb_strlen( $word2 ) . "<br>\n";
print mb_strlen( $word3 ) . "<br>\n";
?>
このようなスクリプトを書いて、ブラウザで表示したところ
日本語
English
日本語English
6
7
13
5
7
11
と表示されました。
strlen関数のほうは、ちゃんとバイト数を表示しているのですが
mb_strlen関数のほうが、2バイト文字が入っていると計算間違いを起こします。
これは、どのような原因なのでしょうか?
ご存知の方がいらっしゃいましたらご教授お願いします。
0164nobodyさん
2006/07/26(水) 01:23:48ID:???ttp://www.php.net/manual/ja/wrappers.php.php
> php://input
ってファイルを開けば読める。
他に $HTTP_RAW_POST_DATA って変数もあるんだが、
ttp://jp.php.net/ini.core
これはphp.iniで always_populate_raw_post_data ってのをONにしないと
メモリを余分に食うので標準では使えないようにされてる。
0165nobodyさん
2006/07/26(水) 01:28:43ID:???mbstringの設定が間違ってるんじゃないの?文字コードを正確に認識できてないんだと思う。
phpinfo() や echo mb_internal_encoding(); で今の文字コードが何になってるか確認してみれば?
0166nobodyさん
2006/07/26(水) 01:30:03ID:???requireで外部からヒアドキュメントを読み込んだ場合と、
それをそのままhtml内に記述した場合
この二つものがソース上では一緒なのに、なぜか違う結果になる(ブラウザ上で空行が入る)、
というのが問題だったのですが、一応解決?しました。
ネストの親に当たる部分のdiv要素(.hogehoge)もhoge.phpの中身に一緒に書き込んでやると、
問題ない表示が実現しました。
単にネストされてるだけでクラス的には親子関係にないから関係ないと思っていたのですが…。
requireすると読み込みの遅れが生じてCSSの判断にバグでも出るんですかねえ、以下ソースです。
やっぱりCSS噛んだ話でごめんなさい
.hogehoge{
width: 100%;
margin: 0 0 10px 0;
display: inline;
}
.hoge{
float: left;
margin: 0 14px 0 0;
display: inline;
width: 127px;
}
<div class="hogehoge">
<div class="hoge">
テキスト
</div>
</div>
0168nobodyさん
2006/07/26(水) 01:33:59ID:???全体的に hoge だらけで意味不明。
> requireすると読み込みの遅れが生じてCSSの判断にバグでも出るんですかねえ、以下ソースです。
読み込み遅れ(って言い方も変だが)で問題とかあり得ない。
0169nobodyさん
2006/07/26(水) 01:34:57ID:???> requireすると読み込みの遅れが生じて
読み込みしてるのはApacheであってブラウザじゃない。
CSSの解釈はブラウザが行っている。
よってCSS解釈のタイミングでは遅延は一切発生していない。原因はまた別にある。
0170nobodyさん
2006/07/26(水) 01:44:20ID:???んーと?つまり、「テキスト」に対して
class=hogehogeが適用されると「テキスト」の下に空行が出て、
class=hogeが適用されてる場合は空行は出ない、ってことなんだな?
<html>
<style type="text/css">
.hogehoge{
width: 100%;
margin: 0 0 10px 0;
display: inline;
}
.hoge{
margin: 0 14px 0 0;
display: inline;
width: 127px;
}
</style>
<body>
aaaaaaaaaaa<br>
<div class="hogehoge">
<div class="hoge">
テキスト
</div>
</div>
aaaaaaaaaaa<br>
</html>
このHTMLをIE6で見たら普通に空行が出てくるぞ。PHP関係ない。
むしろ空行が消える=CSSの指定が一部無視されている、ように思うが?
0171nobodyさん
2006/07/26(水) 02:00:28ID:???ああ、大事な空行の出る場所を書き忘れてましたね
ちがうんです、requireすると空行が出るのは下ではなく上なんですよ
下に出るのはCSSでマージン取ってるから問題ないんです
その例だとrequireした結果は
aaaaaaaaaaaa
テキスト
aaaaaaaaaaaa
になっちゃうのが困ってるんです
html側
<div class="hogehoge">
<?require='hoge.php'?>
</div>
hoge.php側
<?
echo <<< EOF
<div class="hoge">
テキスト
</div>
EOF;
?>
0173nobodyさん
2006/07/26(水) 02:12:38ID:???同階層のbasic.cssですー
headタグ内に書いてますので当然bodyより先読みです
<link rel="stylesheet" href="basic.css" type="text/css" media="all" />
ついでにいうと互換モードで書いてます
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
あとさっきのちょっと間違ってましたね
○ <?require( 'hoge.php' )?>
× <?require='hoge.php'?>
0174nobodyさん
2006/07/26(水) 02:15:51ID:???結局全部は提示しないのね。
書かない所に原因があるかもしれない訳じゃない?
後出しじゃんけんばっかりやってると、誰も相手しなくなるよ。
0175nobodyさん
2006/07/26(水) 02:20:53ID:???0177nobodyさん
2006/07/26(水) 02:37:24ID:???まんま渡すと何がなにやらわからなくなると思うので、
自分なりに絞ってみたんですが、それがよくなかったようですね
もうちょっと条件を絞り込んでから出直してきます
ありがとうございます
0178nobodyさん
2006/07/26(水) 02:59:01ID:???自分とこで調べるにしても、まず余分なものを除去したもので再現させて
原因となりうるものを絞り込むのはデバッグ手法の常識。
0179163
2006/07/26(水) 03:13:33ID:+cVLS530mbstringの設定は
mbstring.encoding_translation = On
mbstring.language = Japanese
mbstring.internal_encoding = EUC-JP
mbstring.http_input = auto
mbstring.http_output = pass
mbstring.detect_order = auto
mbstring.substitute_character = none;
mbstring.func_overload = 0
というような感じになっています。
あまり良くわからないのですが、いろいろ調べて推奨されているもので自分の環境に合うものを選んだつもりです。
いろいろ弄ってはみたのですが状況は変わりません。
文字コードが認識されていないとのことですが
ここの設定で何とかなるものなのでしょうか?
0181nobodyさん
2006/07/26(水) 03:31:40ID:???物の見事に>>163と同じ結果になったりするわけだが。
とりあえず一言。「意味も分からないまま真似だけするのはやめれ」
0182nobodyさん
2006/07/26(水) 07:07:37ID:???print mb_strlen( $word1, "sjis") . "<br>\n";
print mb_strlen( $word2, "sjis") . "<br>\n";
print mb_strlen( $word3, "sjis") . "<br>\n";
0183nobodyさん
2006/07/26(水) 08:16:20ID:???href=?htt?://www.2ch.net?
0184nobodyさん
2006/07/26(水) 14:37:04ID:cMjm+LpN0185nobodyさん
2006/07/26(水) 15:46:13ID:???0186nobodyさん
2006/07/26(水) 16:32:43ID:ZgT+QHaO0187nobodyさん
2006/07/26(水) 17:10:12ID:???天才ハッカー登場
http://pc8.2ch.net/test/read.cgi/hp/1137589842/1-5
0189nobodyさん
2006/07/26(水) 17:16:22ID:???<div class="comment">
こんにちは!!</div>
</div>
0191nobodyさん
2006/07/26(水) 17:53:30ID:???・・・・・・・・・・・掲示板破壊・・・・・・・・・・
</FONT></B>
0194nobodyさん
2006/07/26(水) 19:11:42ID:kip7lvkmでも訪問者にソース見られてもスクリプトのところは隠れるって凄いね。どうやってんだろ?
俺が書いたら丸見えなんだけど・・・。
0195nobodyさん
2006/07/26(水) 19:18:56ID:???0196nobodyさん
2006/07/26(水) 20:55:14ID:???0198193
2006/07/26(水) 21:23:34ID:???ほとんどの掲示板は <>& が実体参照に置き換えられるから、クロスサイトスクリプティングは使えないという認識だけど、見当違いの事を言ってる?
0199163
2006/07/26(水) 21:54:15ID:???いろいろ試してみて、結局はApacheとphpをインストールしなおして同じように設定したら直りました。
(私は、WindowsにApacheを組み込んでいます。)
結局アンインストールしてしまったので、原因が特定できなかったのですが
私が思うに、php.iniの書き換えた情報が適応されていなかったのではないかと思いました。
phpinfo()をみても、表示が変わらなかったので・・
折角アドバイスいただいたのに、結果がこれでごめんなさい(泣
また何かあったらお願いします。
0201nobodyさん
2006/07/26(水) 22:54:36ID:l/6BBPaW良いのでしょうか?
思いついたのは、以下の2つですが、合っていますか?
intval($_POST['id']) してから、is_int する
is_numeric($_POST['id']) する
よろしくお願いします。
0204nobodyさん
2006/07/26(水) 23:24:00ID:oSPf1yZU多分文字コードを 「UTF-8 で ボムを含める」でやってるからだと思う。
AJAXをやると、「UTF-8 で ボムを含める」の文字コードを使用するのが
常識だけど、それやると header 関数も動かなくなるんだよね。
ということで、解決策。
「UTF-8 で ボムを含めない」 に変換して下さい。
(マックだとAJAX動かなくなるけど、この際無視)
0206nobodyさん
2006/07/26(水) 23:39:39ID:???勘弁してやれなり。
0207nobodyさん
2006/07/27(木) 01:53:44ID:???二つのXMLファイルを読み込んだ後
それぞれのノードを統合してほげほげしたいのですが
配列のように統合する方法はないのでしょうか?
0208nobodyさん
2006/07/27(木) 01:55:23ID:???普通に考えたらis_numericじゃ?
つか、intvalしちゃったらどんなデータでも整数になっちゃうだろ。チェックの意味ねぇ。
ノーチェックで、何がきてもエラーを出さないようにする対策として使うなら前者。
0210nobodyさん
2006/07/27(木) 02:32:55ID:???0211nobodyさん
2006/07/27(木) 02:46:08ID:???0212nobodyさん
2006/07/27(木) 03:25:03ID:J0an5vjc環境はwindowsXP、IIS、PHP5です。
今やりたいのはexec()を使って
exec('"c:\Program Files\Adobe\Acrobat 7.0\Reader\AcroRd32.exe" /p /h hoge.pdf');
などとして印刷する処理をしたいのです。
でも、これだととまってしまいます。
PHPから外部アプリケーションの起動ができないのかと思い、
試しに
exec("c:\Program Files\Adobe\Acrobat 7.0\Reader\AcroRd32.exe");
とやっても起動しませんでした。(コマンドプロンプトでは起動確認済み)
サーバ側のプログラムは起動しない仕様なんでしょうか?
それとも別のやりかたがあるのでしょうか?
0213nobodyさん
2006/07/27(木) 04:28:02ID:???IISのユーザ権限とかも影響するかもしれないので何とも言えないが、
PHPからexec()でサーバー上のアクロバットリーダーのプログラム起動や印刷は可能。
> exec('"c:\Program Files\Adobe\Acrobat 7.0\Reader\AcroRd32.exe" /p /h hoge.pdf');
hoge.pdfもフルパスで指定してみては?
> exec("c:\Program Files\Adobe\Acrobat 7.0\Reader\AcroRd32.exe");
これは
exec('"c:\Program Files\Adobe\Acrobat 7.0\Reader\AcroRd32.exe"');
と指定しないとパスに空白を含むのでシェルが認識できない。
0214nobodyさん
2006/07/27(木) 05:14:20ID:???「起動しませんでした」てのは何を確認したの?
実行時のメモリー足りてる?
exec('"・・・・・ hoge.pdf > c:\hoge.txt');
とかしてコマンドの出力を調べてみれば何かわかるかも
0216nobodyさん
2006/07/27(木) 09:07:25ID:???当たり前のように、指定ページは「直リン」できてしまう状況です
直リンさせないようにするには、どのような方法があるのでしょう?
ぐぐる先生も上手くヒットさせてくれませんでした
IIS6+PHP5+mySQL5です
おながいします
0219nobodyさん
2006/07/27(木) 12:10:51ID:???PHPのsessionってどれくらいの期間サーバーに保存されるんですか?
あまり保存期間が長すぎたらサーバーに負担かかる?
0221nobodyさん
2006/07/27(木) 12:57:56ID:???ということをしたいんですが、
どんな関数使えばいいでしょうか?
zlib とか gz とか色々調べたんですがよくわからないのですorz
0222212
2006/07/27(木) 12:59:34ID:J0an5vjc>>214
>>215
回答ありがとうございました!
まず>>213さんの
>exec('"c:\Program Files\Adobe\Acrobat 7.0\Reader\AcroRd32.exe"');
>と指定しないとパスに空白を含むのでシェルが認識できない。
ということだったので
exec('"c:\Program Files\Adobe\Acrobat 7.0\Reader\AcroRd32.exe"');
としたところ、ブラウザが「・・・を開いています」のまま動きません。
>>214さんのように
exec('"c:\Program Files\Adobe\Acrobat 7.0\Reader\AcroRd32.exe" > hoge.log');
としてみましたが、同じ結果でした。
>>215さん
exec()の第2、第3引数ですね?リファ確認してみます。
0223nobodyさん
2006/07/27(木) 13:15:03ID:OicfcVgw>としてみましたが、同じ結果でした。
hoge.logを見てみろって
0225nobodyさん
2006/07/27(木) 18:04:59ID:02auc3if「20030710.txt」←のように、数字が8個並ぶ拡張子「.txt」のファイルを探したいのですが
glob('[0-9]{8}\.txt');
↑数字を8回繰り返すこれだとマッチせず、
glob('[0-9]*\.txt');
↑数字を一回以上繰り返すこちらだとマッチします。
数字が8回繰り返す正規表現は[0-9]{8}でいいと思うのですが、glob()関数だと違うのでしょうか。
ちなみに文字列検索ではマッチします
ereg('[0-9]{8}\.txt','20030710.txt');
0227nobodyさん
2006/07/27(木) 18:21:30ID:???PHPは知らんけど。
0231nobodyさん
2006/07/27(木) 18:39:23ID:???0232nobodyさん
2006/07/27(木) 18:41:12ID:???おそらく全員が釣りだと思っていたはず。
<?php
phpinfo();
?>
と書いたファイルにtest.phpという名前をつけて
アップロードしてアクセスしてみて。
■ このスレッドは過去ログ倉庫に格納されています