【PHP】下らねぇ質問はここに書き込みやがれpart16
レス数が950を超えています。1000を超えると書き込みができなくなります。
0001nobodyさん
2006/02/05(日) 22:35:34ID:sf8bx52Dここなら本スレで回答のないお前の下らない質問に回答があるかも知れません。
まず読め【PHP マニュアル】
http://www.php.net/manual/ja/
本スレ【PHP】質問スレッドpart32【php】
http://pc8.2ch.net/test/read.cgi/php/1136276300/
前スレ【PHP】下らねぇ質問はここに書き込みやがれpart15
http://pc8.2ch.net/test/read.cgi/php/1137236771/
過去スレは>>2
0864nobodyさん
2006/02/22(水) 13:55:20ID:???> >>861
> 諸悪の根元
(・ω・;)ω・;)・;) )...マヂ??
レッツPHP!を参考に、つい先日から勉強を始めたばかりなのですが・・・。
ええextractも「これが基本かっ!」てな感じで使ってました・・・。
0865nobodyさん
2006/02/22(水) 14:05:25ID:YzTdS2ndwindows server 2003でIIS6.0を使用してます。
PHP4.4.2をインストールし、nucleusでblogを作成したところ、
「エラー発生アプリケーション w3wp.exe、バージョン 6.0.3790.1830、エラー発生モジュール php4isapi.dll、バージョン 0.0.0.0、エラー発生アドレス 0x00002443」
とアプリケーションログに記録され、表示できなくなりました。
どうやら、PHP4.4.2のバクのようで、STABLE版の使用で解決するらしいのですが、STABLE版はIISで使用できるのでしょうか?
また、設定方法等、解説しているサイトをご存知でしたら、ご教授願えませんでしょうか?
よろしくお願いします。
0866nobodyさん
2006/02/22(水) 14:07:18ID:???それを利用してブラウザに情報を挿入したhtmlを表示させるにはどうすればよいのでしょうか?
今までは表示用のhtmlを、あとから情報を挿入したい部分毎に細切れにしたものを変数に入れておき、
情報を挟みつつ順番につなげてからechoで出力していたのですが、
デザイン面の変更にかなり手間がかかっていました。
そこで次に試してみたのは、
_template.htmlの情報を挿入したい部分に{$hoge}と入れておき、
$hoge = "output test";
$output = file_get_content("_template.html");
echo $output;
としてみたのですが、ブラウザにも「{$hoge}」とそのまま表示され、$hogeに格納した文字列は表示されませんでした。
たとえば$output = "テスト{$hoge}";とやると$hogeの内容が表示されます。
どうすれば_template.html中の{$hoge}のような部分に変数の内容を表示させることが出来るのでしょうか?
よろしくお願いします。
0867nobodyさん
2006/02/22(水) 14:09:36ID:???スレ違い。こっちで
http://pc8.2ch.net/test/read.cgi/php/1140027592/145
0868nobodyさん
2006/02/22(水) 14:13:45ID:???あそこは凄いね。ある意味勉強になるよ。
SQLインジェクションとかがやり放題なスクリプトとか放置されてるし
(確かここで指摘されて知ったんだが)
0869nobodyさん
2006/02/22(水) 14:16:36ID:???スレ違い。こっちで
http://pc8.2ch.net/test/read.cgi/php/1118799352/
0870nobodyさん
2006/02/22(水) 16:51:33ID:25ErppZdprint関数内の変数名の全てを htmlspecialchars($hoge) のように変更すれば良いのですが、
それだとコードが汚くなってしまうので・・・。
よろしくお願いします。
0871nobodyさん
2006/02/22(水) 16:54:39ID:???それで正常に動作しているのですが、make uninstall には対応していないようですので、
例えば新たに PHP 5.1.3 が公開された場合には、どうやってアップグレードするのがよいのでしょうか?
1. Apacheの設定ファイル httpd.conf から 「LoadModule php5_module modules/libphp5.so」 を削除
2. Apacheの再起動
3. make install 時に作成されたファイルを全部手動で削除(rm, rmdirコマンド)
4. 新しいバージョンを落としてきてコンパイル、make install
5. Apacheの再起動
といった手順で問題ないでしょうか。
0872nobodyさん
2006/02/22(水) 16:58:14ID:???ソース内の「print」を一括置換で、
「$tempdata .=」に変えておいて、
処理の最後で
print htmlspecialchars($tempdata);
0873nobodyさん
2006/02/22(水) 17:02:31ID:???ob_start()で出力内容を全部バッファに格納しちゃって
プログラムの最後でprint htmlspecialchars(ob_get_contents())ってのはどう?
0874nobodyさん
2006/02/22(水) 17:03:03ID:???print htmlspecialchars($str);
}
とか作って
hoge($str)で読み込ますのは駄目?
0875nobodyさん
2006/02/22(水) 17:10:54ID:???高木さんも、あのサイト批判したらいいのに。
個人サイトだけど、公開してGoogleランクが非常に高いのは責任あるだろって。
(責任云々は無茶だけど。効果の問題として)
0876nobodyさん
2006/02/22(水) 17:14:56ID:???print $a,$b,$c; とか,でパラメータが渡されてるパターンの話だから、
それだと無理。,→.を追加ってのもスマートじゃないので、無しにしようよ
0877nobodyさん
2006/02/22(水) 17:17:52ID:???お前は、>>870か?それともエスパーか?
>>870のどこに
>print $a,$b,$c; とか,でパラメータが渡されてるパターンの話
なんて記述があるんだ?
0879870
2006/02/22(水) 17:22:39ID:???>>876は私ではありません。
条件が不足していて申し訳ありませんでした。
「print関数内の変数を全て htmlspecialchars を使ってエスケープ処理をする、といった場合にはどうするのが一番簡単でしょうか?」ではなく、
「print関数内の変数全てのみを htmlspecialchars を使ってエスケープ処理をする、といった場合にはどうするのが一番簡単でしょうか?」です。
つまり、
print "<strong>貴方のIPアドレスは" . $hoge . "です。</strong>"; となっている場合に
変数以外の部分の <strong> はエスケープせずに、変数である $hoge をエスケープしたいと考えています。
0881nobodyさん
2006/02/22(水) 17:31:04ID:???make clean は
make時に作成された一時ファイルの削除でしょ、全然違うと思うけど。
# make deinstall
# make uninstall
などが提供されている場合もあるけど、phpだとそれがない。
従って手動でファイル消すしかないっしょ
0882nobodyさん
2006/02/22(水) 17:57:21ID:???知らないだけかもしれんし、突っ込みどころ大杉で
やらないだけかもね。
>SQLインジェクションとかがやり放題なスクリプト
なんて、たいていの入門書がそうなってるし。
0883nobodyさん
2006/02/22(水) 18:20:14ID:???PHPのレッツPHP
0884nobodyさん
2006/02/22(水) 18:21:19ID:???0885nobodyさん
2006/02/22(水) 18:21:30ID:???0886nobodyさん
2006/02/22(水) 18:25:01ID:???今となってはかなり古くて、汚いコードに見えるね・・・。
0888nobodyさん
2006/02/22(水) 18:29:24ID:???よくあるように、
「既にその役目を終えたと判断し、閉鎖させていただきます」
みたいな潔い幕引き出来んもんかね・・・
0890900
2006/02/22(水) 18:49:20ID:???metaWeblog.newMediaObject でフォームから画像をアップロードしたいのですが、
アップロードされたファイルのサイズが1.5倍程に膨らんでしまいます。
以下、ソースになります。よろしくお願いします。PHP 4.3.11
<?php
require_once("XML/RPC.php");
$GLOBALS['XML_RPC_defencoding'] = "UTF-8";
$mt_host = "host名";
$mt_xmlrpc_path = "Movabletypeの mt-xmlrpc.cgi へのパス";
$mt_user = 'user';
$password = 'pass';
$c = new XML_RPC_client($mt_xmlrpc_path, $mt_host, 80);
$appkey = new XML_RPC_Value('', "string");
$username = new XML_RPC_Value($mt_user, "string");
$password = new XML_RPC_Value($password, "string");
$blogid = new XML_RPC_Value("1", "string");
0891900
2006/02/22(水) 18:50:02ID:???$UPLOAD = fopen($Myfile, "r");
$image = fread($UPLOAD, $Myfile_size);
fclose($UPLOAD);
$image64 = new XML_RPC_Value(chunk_split(base64_encode($image)),'base64');
$imageName = new XML_RPC_Value($Myfile_name, "string");
$Params = new XML_RPC_Value(array('bits' => $image64, 'name' => $imageName), 'struct');
$message = new XML_RPC_Message('metaWeblog.newMediaObject', array($blogid, $username, $password, $Params));
$result = $c->send($message);
$filepath = XML_RPC_decode($result->value());
echo $filepath{'url'};
exit();
}
?>
<html><body>
<form method="post" action="<? echo $PHP_SELF; ?>" enctype="multipart/form-data">
<input type="file" name="Myfile">
<input type="submit" value="SEND">
</form>
</body></html>
0892890
2006/02/22(水) 18:51:03ID:???0893nobodyさん
2006/02/22(水) 19:32:14ID:???みなさんにお聞きしたいのですが、どうやってプログラム勉強されたのですか?
PHPが初のプログラム言語(って言っていいのかな?)なんで戸惑ってます。
ひたすらサンプルとか拾ってきて勉強したりするんでしょうか?
○日で覚える系の参考書を一通り手打ちして、連想配列ってのがあるんだぁ
など知ったレベルです。
デザイナーなので、職業プログラマになるつもりは無いのですが
最近PHPに触れる機会があり、興味を持ったので勉強しています。
助言を頂けたらうれしいです。
よろしくお願いします。
0894nobodyさん
2006/02/22(水) 19:48:54ID:???ローカルに環境を作り、自分で書いてみるのが一番です。
サンプルを真似して書いてみるのもいい勉強になると思います。
(簡単なチャットや、レス無掲示板などいい勉強になると思います)
慣れてきたら、ただ書き写すだけではなく、
値を変えてみるとか、自分なりに色々いじってみるといいでしょう。
サンプルでわからない単語・関数が出てきたら、
公式のマニュアルを参照するのが良いでしょう。
それを読んでわからなければここで質問すればいいだけです。
サンプルに慣れてきたならば、
今度は一から自分で作ってみたいと思うようになります(多分)
簡単なプログラム(チャットとかでなくてもいいと思います)を
作れるようになる頃には、
自分なりの勉強方法が確立できていると思いますよ。
環境だけはローカルに作りましょう。
(Googleで検索するとインストールの方法がいろいろ出てきます)
レンタルサーバーなどで実験するのはただの迷惑なので。
以上、個人的な見解でした。
(個人差はあると思います)
0895nobodyさん
2006/02/22(水) 19:58:03ID:???ありがとうございます。
一応ローカルにapache入れて環境は作ってあります。
いろんな所からサンプル拾って真似てみます。
とりあえずチャットに決めました。
また書込み機会があればよろしくお願いします。
それでは失礼します。
0896nobodyさん
2006/02/22(水) 20:04:00ID:???今のはどうか知らんけど。
0898890
2006/02/22(水) 20:35:09ID:???ファイルサイズが増えた時点で気付くべきでしたが、
バイナリエディタで覗いてみたところデコードされていませんでした。
MT に Base64.pm が無かったので、extlib/MIME に
Base64.pm(MIME-Base64-2.23)を追加し、以下にソースを修正。
$image64 = new XML_RPC_Value(chunk_split(base64_encode($image)),'base64');
↓
$image64 = new XML_RPC_Value($image,'base64');
MIME-Base64
http://www.perl.com/CPAN/modules/by-authors/id/GAAS/
どうみてもPHPと関係ないスレ汚しです。
本当にありがとうございました。
0899nobodyさん
2006/02/22(水) 20:37:12ID:???0900nobodyさん
2006/02/22(水) 21:26:13ID:???AccessKeyってファンクションキー(F1とか)は設定できないのでしょうか。
別にAccessKeyでなくてもよいのですが、他に方法を思いつかないので・・。
0902900
2006/02/22(水) 21:44:40ID:???サヨウナラ・・
0903nobodyさん
2006/02/22(水) 22:00:00ID:???print htmlspecialchars($str);
}
HOGE("htmlspecialchars+printしたい文字");
0904nobodyさん
2006/02/22(水) 23:15:23ID:???それだと
HOGE('<strong>ここは<強調>したいんです</strong>');
はダメだからわけるしか無い
0905nobodyさん
2006/02/23(木) 01:36:14ID:???そこらへんは評価してあげないと。
今となっては穴だらけのスクリプトでも、
当時は感動したもんだ。
0906nobodyさん
2006/02/23(木) 02:01:43ID:???chmodコマンドは、借りている鯖側の処理で禁止されているのかな?
ファイル生成段階で属性って決めて保存ってできるか教えてください。
0907nobodyさん
2006/02/23(木) 03:07:02ID:???普通、PHPで出力したものは自分自身がそのオーナーなんだから
特にパーミッションなんて変更しなくても再読み書きできるもんだが、
そこのサーバーで何かおかしな真似されてるんじゃないか?
で、chmod以外でパーミッション設定は無理かと。
0908nobodyさん
2006/02/23(木) 10:25:22ID:???マニュアル見ても
define ("CONSTANT", "Hello");
echo CONSTANT; // "Hello"を出力します。
としか書いてないんですけど、
echo CONSTANT World!!;
といれたらエラーが出ますし、
echo "CONSTANT World!!";としたらそのままの文字列が出力されてしまいます。
変数の場合は、
echo $a;でもecho "$a";でもecho "{$a}";とかでも出力されますよね?
定数もecho "{CONSTANT}"みたいに何かで囲むことで、
出力されるようになるということはないですか?
それともこういう使い方の場合は変数を使えということでしょうか?
0909nobodyさん
2006/02/23(木) 10:44:59ID:???定数を "" で括って使う事自体定数の使い方がおかしい。
定数はその内容を意識しないで使うモンだ。
fopen( "example.dat", LOCK_EX ); の LOCK_EX みたいに普通は引数に使うだけ。
ライブラリや組み込み関数で使う定数の内容なんか意識しないで使うだろ?
そういう使い方をするものは変数が適している。
0910909
2006/02/23(木) 10:48:11ID:???flock( $resource, LOCK_EX ) と思ってくれ
0911nobodyさん
2006/02/23(木) 10:52:40ID:???0912nobodyさん
2006/02/23(木) 11:01:07ID:HLa5KG/+{ ? ? ? ( ) などを置換したくて[{???()]と書いてもパースエラー
[\{???\(\)]と書いても同様にパースエラーがでます。
Parse error: parse error, unexpected '[', expecting ')'
たぶん ) がエスケープできていないと思うのですがどうすれば ) を
エスケープできるのでしょうか。
0913nobodyさん
2006/02/23(木) 11:02:30ID:HLa5KG/+そこは気にしないでください。
0917nobodyさん
2006/02/23(木) 13:22:18ID:???phpの他のスレを関連として書いとくとかFAQとか
0919nobodyさん
2006/02/23(木) 14:11:48ID:HLa5KG/+だめみたいです。
勘違いしているだけかもしれませんが、
$text = '(abc)'
$text = mb_ereg_replace("[\(\)]*","",$text));
というふうに原因追及のため簡単に書き直して試してみましたが
やっぱりパースエラーが出ちゃいます。
parse error, unexpected ')'
var_dump($text)でabcと出したいのですが、
どこを間違えているのでしょうか。
PHP Version 4.4.1です。
0922nobodyさん
2006/02/23(木) 14:36:59ID:???助かりました、マジでありがとうございます。
こんなことに何時間も悩んで、
なんかすごくバカらしくて涙が出てきました。
0923nobodyさん
2006/02/23(木) 15:30:20ID:???mb_ereg_replace errorとか関数名がきちんと出てくるしな。
>>922
そうやって成長してくもんさ。
オメデトウ。
0926nobodyさん
2006/02/23(木) 16:08:03ID:???自ホストを取得するには
どうしたらよいでしょうか?
0927nobodyさん
2006/02/23(木) 16:13:05ID:???PHPeclipse
CVSとエディタしか使ってないから使いこなせてるとは言い難いんだけどね('A`)
ロースペックマシンだと動作の重さで涙が増えるかも。
統合開発環境スレだともっといろいろ教えてくれるんでないでしょか。
0928nobodyさん
2006/02/23(木) 16:49:23ID:???個人的にあるとうれしいのはHTMLのタグ間ジャンプ。
閉じタグを確認するというより編集範囲を探し出すのに重宝するって感じだけどね。
0929nobodyさん
2006/02/23(木) 17:00:38ID:???0931nobodyさん
2006/02/23(木) 17:12:12ID:???<form action="index.php">
<input type="text" name="moji" size="40" value="<?echo "<a href="database.cgi?keys2=" . $moji . "">" . $moji . "</a>" ?>">
<input type=submit value=sub>
</form>
こんな感じでフォームに文字を入れてsubmitすると
$moji の部分が置き換わるようにしてるんですが、
これを
<input type="text" name="moji" size="40" value="<?echo "<a href="database.cgi?keys2=" . $moji . "">" . $moji2 . "</a>" ?>">
として、
「$moji」は入力した通りの文字, 「$moji2」は全角カナがある場合は半角カナに置き換えて表示するようにしたいのですが。
0932nobodyさん
2006/02/23(木) 17:17:40ID:???<?echo "&lt;A href=&quot;database.cgi?keys2=" . $moji . "&quot;&gt;" . $moji . "&lt;/A&gt;" ?>">
↓
<?echo "&lt;A href=&quot;database.cgi?keys2=" . $moji . "&quot;&gt;" . $moji2 . "&lt;/A&gt;" ?>">
0933nobodyさん
2006/02/23(木) 17:22:24ID:???まぁカタカナなんて50種類ぐらいしかないんだから、
悩むより全通りやったほうがはやいとおもう^^;
0934nobodyさん
2006/02/23(木) 17:22:32ID:???preg_replaceで地道に
$zenkaku = array ("ア", "イ", "ウ"...);
$hankaku = array ("ア", "イ", "ウ"...);
とやる。
0937nobodyさん
2006/02/23(木) 18:00:27ID:???0939nobodyさん
2006/02/23(木) 20:11:35ID:???CLIからWebとかftpのバーチャルホストかどうかなんて判んないから取得できないよ。
CGIのI/Fのように環境情報が渡されてないから。
0941nobodyさん
2006/02/23(木) 20:16:24ID:???0942nobodyさん
2006/02/23(木) 20:30:32ID:???で、そのCLIってのはどうやって起動されるんだ?
Web上のPHPやCGIからsystemで呼び出し?
それとも手動またはcronで実行?
前者なら子プロセスに環境変数が継承されるかもしれないが、
後者なら「ホスト名というもの自体が存在しない」よ。
無い物は取得不可能。
0943nobodyさん
2006/02/23(木) 20:52:38ID:aYPvtFuR$fp = @fsockopen('www.example.xxx', 80, $errno, $errstr, $timeout);
ってやっています。
できるだけ素早く判別してもらいたいんですが$timeoutの値の目安ってありますか?
0944nobodyさん
2006/02/23(木) 20:55:27ID:???0945nobodyさん
2006/02/23(木) 21:23:39ID:???それ以上は死んでいるも同然
0949nobodyさん
2006/02/23(木) 23:04:53ID:???0950nobodyさん
2006/02/23(木) 23:29:27ID:???0951nobodyさん
2006/02/23(木) 23:53:06ID:???0952nobodyさん
2006/02/24(金) 00:42:35ID:???0953nobodyさん
2006/02/24(金) 02:01:19ID:???$hoge = $_POST['hoge'];
をextractを使って表現するとどのように書けばいいのでしょうか?
特に何もしないとXSSの原因になるそうなので、
わからないうちは使うつもりはありませんが、気になるので・・・
0955nobodyさん
2006/02/24(金) 02:30:53ID:???extract($_POST, EXTR_SKIP);
か
extract($_POST, EXTR_PREFIX_ALL, "post");
のどっちかかな。
$hoge = $_POST['hoge'];相当なのは前者。
後者は$post_hoge = $_POST['hoge'];相当。
0956nobodyさん
2006/02/24(金) 02:36:19ID:???どうもありがとうございます。
早速実行してみたところ、
ちゃんと$hoge = $_POST['hoge'];と同じになりますね。
便利ですねえ。
どういう危険性があるか理解できるまで使わないことにします。
ひとつ謎が解けました。ありがとうございました。
0957nobodyさん
2006/02/24(金) 02:38:49ID:???レスしてる間にレスがorz
詳しくありがとうございます。
値もいろいろと指定できるんですねー
早速値に関してどういったものか調べてまいります。
0958nobodyさん
2006/02/24(金) 03:44:05ID:???extractで展開していると
予期しない変数を書き換えられる危険がある。
例えばパスワードを$passに設定している場合に
hogehoge.com?pass=〜
でアクセスされ、これをextractで展開すると…。
↑はgetの場合だけれど
ローカルでフォームを書けばpostだって送りつけられるし。
0960nobodyさん
2006/02/24(金) 04:00:42ID:???見たいに
example.com?pass=5
しか想定しないでextractすると、下のURLみたいなアクセスをされた場合に大量に変な変数作られるのが危険て事?
example.com?pass=5&user=hoge&db=example.com
予期しない変数を大量に作られるのは気持ち悪いね
でも、プログラムの一番最初にextractすれば変数の内容は上書きされないような気もするけど・・
0961nobodyさん
2006/02/24(金) 04:24:48ID:???0962nobodyさん
2006/02/24(金) 06:38:31ID:???http://jp2.php.net/manual/ja/function.extract.php
警告
extract() をユーザー入力 ($_GET, ...) のような信頼できないデータについて使用しないでください。
もし行う場合、例えば register_globals を信頼しているような古いコードを一時的に実行したい場合、
EXTR_SKIP のような extract_type の値が上書きされていないことを確認してください。そして php.ini の
variables_order で定義されたものと同じ順で展開すべきであることに留意してください。
ま、他人のサーバがどうなろうが知ったこっちゃ無いが
レス数が950を超えています。1000を超えると書き込みができなくなります。