【PHP】下らねぇ質問はここに書き込みやがれ 25
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2006/07/23(日) 20:00:03ID:???ここならお前の下らない質問に回答があるかも知れません。
まず読め【PHP マニュアル】
http://www.php.net/manual/ja/
過去スレは>>2
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という名前をつけて
アップロードしてアクセスしてみて。
0233nobodyさん
2006/07/27(木) 19:19:40ID:s2/F2cYJ実在する行より1行多く読んできて、最後が空行になってしまいます。
次のような簡単なソースです。
$fp = fopen("data.txt", "r+");
if ($fp){
flock($fp, 2);
while (!feof($fp)){
$list[] = fgets($fp);
$i++;
}
}
}
data.txtには3行の記述があり、最後の行もきちんと改行で終わり、
最後に余計な改行などは入っていません。
ところが、 $i が 4となってしまい、$listも、 $list[3]まで作られ、中身は空です。
PHPは前からやっていたんですがこうなったことはないのですが、
いったいどんな原因が考えられますか?
0235nobodyさん
2006/07/27(木) 19:31:44ID:h5ch3/9D下記のような場合、どうすればこちらが意図した通りに処理してくれますか?
$text = '!0! !1! !2!';
$serach = '!([0-9]{1,3})!';
ereg($serach,$text,$key);
foreach($key as $key_arr) {
echo $key . 'ですぅ<br>';
}
0ですぅ
1ですぅ
2ですぅ
こんな感じで表示させたいのですが$keyに0しか入らないみたいなんです。
教えていただけないでしょうか?
0236nobodyさん
2006/07/27(木) 20:15:19ID:???$serach = '!([0-9]{1,3})!';
ereg($serach,$text,$key);
foreach($key as $key_arr) {
echo $key . 'ですぅ<br>';
}
これを
$text = '!0! !1! !2!';
$serach = '!([0-9]{1,3})!';
ereg($serach,$text,$key);
foreach($key as $key_arr) {
echo $key . 'です<br>';
}
こう変える
0237nobodyさん
2006/07/27(木) 20:45:34ID:???何処から突っ込んだら良いのか
とりあえずserach→searchな。
ereg系関数はpreg系関数と比べて大抵かなり遅いから出来れば使わないように。
foreachなのになんで$key_arr?
なんでforeach内で配列使う?
$text = '!0! !1! !2!';
$serach = '/!(\d{1,3})!/';
preg_match_all($serach, $text, $key_arr);
foreach($key_arr[1] as $key => $value) {
echo $key . 'ですぅ<br>';
}
0238237
2006/07/27(木) 20:47:10ID:???だな、スマソ
0239237
2006/07/27(木) 20:48:44ID:???$text = '!0! !1! !2!';
$search = '/!(\d{1,3})!/';
preg_match_all($search, $text, $key_arr);
foreach($key_arr[1] as $value)
echo $value . 'ですぅ<br>';
0240nobodyさん
2006/07/27(木) 22:51:30ID:S/uf8GoHfunction test($a) {
switch ($a) {
case 'a':
return 'あいうえお';
case 'ka':
return 'かきくけこ';
}
}
こう書いても問題ないッスよね?
それとも、
function test($a) {
switch ($a) {
case 'a':
$result = 'あいうえお';
break;
case 'ka':
$result = 'かきくけこ';
}
return $result;
}
と書いた方がよいのでしょうか?
0241nobodyさん
2006/07/27(木) 23:31:43ID:???まあ、caseが2つならif elseifで済ましてしまうが。
個人的には下。returnする前に何か処理が入る必要が出た時のために。notice対策でswitchの前に$return = null;で初期化しておく。
0243nobodyさん
2006/07/28(金) 00:25:54ID:???最後の行が改行で終わってる場合、3行目を読み込んだ時点ではeof()は立たない。
(EOFを認識する前に、改行を認識した時点でfgets()は制御を戻してしまうため)
さらに4回目のfgets()が動くとEOFを認識し戻り値がFALSEとなり、eof()が立つようになる。
(var_dump()してみれば分かるが、$list[3]は string(0) "" ではなく bool(false) になってるはず)
普通、そういう読み込みループは
while (($line = fgets($fp)) !== FALSE){
$list[] = $line;
$i++;
}
と書くか
while (!feof($fp)){
$line = fgets($fp);
if($line === FALSE) break;
$list[] = $line;
$i++;
}
のように書く。
PHPは前からやってたって言うけど、それにしちゃ経験浅すぎない?
その辺り、公式マニュアルのfgetsの説明に
ttp://www.php.net/manual/ja/function.fgets.php
> 陥りやすい罠:
> C 言語の fgets の動作に慣れている人は、EOF を返す条件の違いについて 注意する必要があります。
という感じで注意書きがされているよ。
0245nobodyさん
2006/07/28(金) 00:52:33ID:/hbJS61yEXIFは空なのでここに書いてある情報は使えないものとします。
0248nobodyさん
2006/07/28(金) 01:28:16ID:???ttp://jp.php.net/manual/ja/function.getimagesize.php
0250nobodyさん
2006/07/28(金) 01:39:36ID:???これに反省したらもっとマニュアルをきちんと読むように。
そんな分かりにくい場所に書いてあるわけじゃないだろう。
0251245
2006/07/28(金) 01:40:36ID:???0252nobodyさん
2006/07/28(金) 01:51:28ID:???0253nobodyさん
2006/07/28(金) 02:12:26ID:???その知識で簡単に使えるものは無いだろうね。
>>222
exec("command -o -p -t", $returndata, $returncode);
var_dump($returndata); var_dump($returncode);
215はこういうこと。ちなみに214のhoge.log=$returndata
とりあえずIISはおいといて、タスクマネージャ見ながらCLIで動かしてみて。
0254212
2006/07/28(金) 04:22:07ID:hIe930sx>hoge.logを見てみろって
hoge.logをnotepadで開いたところ、ファイルの中身は空っぽでした。
でも、ファイルは作られてます。
>>253
>exec("command -o -p -t", $returndata, $returncode);
>var_dump($returndata); var_dump($returncode);
>215はこういうこと。ちなみに214のhoge.log=$returndata
>とりあえずIISはおいといて、タスクマネージャ見ながらCLIで動かしてみて。
ブラウザ以外でやったことないので不慣れですが、CLIというのをやってみます。
回答ありがとうございました。
今のところ↓みたいなのになります。
CGI Timeout
The specified CGI application exceeded the allowed time for processing.
The server has deleted the process.
0255nobodyさん
2006/07/28(金) 04:34:49ID:???実はサーバー側でちゃんと起動してたんだがそのままウインドウが出たままになって終了せず、
その終了をずっと待ってたPHPがタイムアウトで終了しただけ、とかいうオチじゃないだろうな。
サーバーマシン側の画面はちゃんと見ているの?
そもそもIISってバックグラウンドのサービスで動かしてるのか?だとするとウインドウアプリケーションって
表示できずに裏で固まってたりするんじゃないのか?
0256nobodyさん
2006/07/28(金) 04:51:56ID:???拡張子偽装ファイルとかではなく真の .jpg です。
getimagesize に変わる方法や回避策などありませんでしょうか
環境はPHP Version 5.1.4 GD Version bundled (2.0.28 compatible) です。
0258nobodyさん
2006/07/28(金) 05:08:48ID:???じゃ、基本 DCT 方式じゃない JPEG なのかも。
どういう JPEG ファイルか中身を見てみないと分からん。
0259nobodyさん
2006/07/28(金) 06:32:58ID:???上記のような画面遷移で、あるフォームから投稿された内容をDBに保存する前に、表示確認画面を挟むとします。
このとき、(A)で投稿された内容を(B)で表示する場合にはもちろんエスケープして表示するのですが、
(C)に渡すために(B)にhiddenで埋め込んだ内容データはエスケープしなくていいんですよね?
っていうか、エスケープしちゃったら元の内容と違っちゃう(たとえば改行が<BR>に変換されちゃう等)ので
(A)で投稿された生のままhiddenに入れるべきですよね?
それで何かセキュリティ上の問題って起きますでしょうか。
0260nobodyさん
2006/07/28(金) 06:57:41ID:???エスケープしとかないと途中に"とか入ってた場合にinputタグが壊れるだろう。
セキュリティとか以前の問題だぞそりゃ。
0261nobodyさん
2006/07/28(金) 07:08:35ID:???あっ、そっか・・・
でもエスケープしちゃったら、元のデータが再現できないですよね?
DBに入れたものを取り出してエスケープして表示するときに、<BR>が二重になっちゃうし・・・
0265nobodyさん
2006/07/28(金) 07:53:04ID:???■ このスレッドは過去ログ倉庫に格納されています