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

【PHP】下らねぇ質問はここに書き込みやがれ 31

レス数が950を超えています。1000を超えると書き込みができなくなります。
0001nobodyさん2006/10/25(水) 08:45:46ID:???
PHPに関するくだらねぇ質問用スレです。ここならお前の下らない質問に回答があるかも知れません。

まず読め→【PHP マニュアル】http://www.php.net/manual/ja/
PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。
過去スレ、関連スレ、FAQなどは>>2-10辺り

【前スレ】
 【PHP】下らねぇ質問はここに書き込みやがれ 30
 http://pc8.2ch.net/test/read.cgi/php/1159979905/

◆質問する時の注意
・ 自分のIDを表示させること。(メール欄に何も記述しない)
・ サーバーのOS、WebサーバーとPHPの種類やバージョン等を明記すること。
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。

◆質問後の注意
・偽者防止に必ずIDを表示させること。(メール欄に何も記述しない)
・2回目以降は最初に質問した際のレス番号を名前欄に入れること。
・解決しなくても回答をもらった場合はお礼を言うこと。
 (荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)

◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。

【その他諸注意】
・正規表現・PEAR・テンプレート(Smarty等)・フレームワークはそれぞれの該当スレへ
・SQLについての質問はデータベース板(PCカテゴリ)の各スレで
・速さについては自分でベンチをとってここに書け(違う環境の人も調べてくれるかも)
0855nobodyさん2006/11/04(土) 13:07:49ID:???
国際化のためにdefineや巨大配列でテキストを外出ししてるケースは結構あるよ。
やっぱgettextのほうが速いのかな。
0856nobodyさん2006/11/04(土) 13:12:20ID:???
大規模なサイトを運営しているケースで
クライアントが入力した値をデータベースに書き込む場合、
データを壊さないためにもロックをかけて処理を行うことが無難でしょうか?
0857nobodyさん2006/11/04(土) 13:15:09ID:???
ttp://blog.poyo.jp/archives.php/categ-1/year-2006/month-4/id-1145244732
0858nobodyさん2006/11/04(土) 13:16:34ID:???
>>854
でもdefiner使わずに連想配列に突っ込んでも同じなんでしょ?
0859nobodyさん2006/11/04(土) 13:18:09ID:???
>>856
RDBMSにおけるロックの機能を勘違いしてるように思える。
データ間に不整合が出るケースはロックしないとそりゃダメだし(規模関係ない)、
そうでないならロックなどする必要はない。(これも規模関係ない)
というか、そういう話はデータベース板で聞いた方がいいと思うよ。
0860nobodyさん2006/11/04(土) 13:19:24ID:???
>>858
だから事前定義がダメなんだってば。
効率を意識するなら必要時に取得する方法が賢明。
0861nobodyさん2006/11/04(土) 13:26:06ID:???
>>859
ありがとうございました。データベース板で聞いてきます。
0862nobodyさん2006/11/04(土) 13:46:27ID:UuLfn9RK
トラックバックをブログフォームからではなく、自分で作成した管理ツールから
送信したいと思っています。
下記のスクリプトを作成しましたが、エラーは出ないのですが、XMLの返答メッセージ
が返ってこず、トラックバックしてくれません。
どうすればよいでしょうか?
<?php
$sock = fsockopen("app.f.cocolog-nifty.com", 80, $errno, $errstr, 60);
if (!$sock) die("$errstr ($errno)\n");

$data = "title=".urlencode("test送信");
$data .= "&url=".urlencode("http://www.yahoo.co.jp";);
$data .= "&blog_name=".urlencode("PHPからトラバをする");
$data .= "&excerpt=".urlencode("PHPモジュールから送ってます");

$tburl="t/trackback/3950899";

fputs($sock, "POST ".$tburl." HTTP/1.1\r\n");
fputs($sock, "Host: blog.seesaa.jp\r\n");
fputs($sock, "Content-type: application/x-www-form-urlencoded\r\n");
fputs($sock, "Content-length: " . strlen($data) . "\r\n");
fputs($sock, "\r\n");
fputs($sock, "$data\r\n");


$body =" ";
while (!feof($sock))
$body .= fgets($sock, 4096);
fclose($sock);
print "test";
?>
0863nobodyさん2006/11/04(土) 14:36:07ID:???
>>858
同じじゃない段違い
0864nobodyさん2006/11/04(土) 14:39:34ID:???
>>862
$bodyをエコーすればHTTPエラーが返ってきてるはずだが
0865nobodyさん2006/11/04(土) 14:42:37ID:???
その程度の用途ならHTMLにフォームを書いてしまえってのは禁句ですか?
0866nobodyさん2006/11/04(土) 14:42:53ID:e0EPAzx7
ユーザ関数のことで質問させてください。
環境:
Redhat ES3
PHP4.3.9

参照渡しのところを省略可能な関数を作りたいのですが、可能なんでしょうか?
一応公式マニュアルの関数の項目には目を通し、ググっても見たのですが・・・。
もしやり方をご存知の方はご教授お願いします。

具体的に、
preg_match(string pattern, string subject [, array &matches [, int flags [, int offset]]] ) のarray &matches,
ftp_alloc(resource ftp_stream, int filesize [, string &result]) のstring &result
ようなことがしたいんです。

よろしくお願いします。
0867nobodyさん2006/11/04(土) 14:53:14ID:???
こちらこそよろしくお願いします。
0868nobodyさん2006/11/04(土) 14:53:37ID:???
>>866
function hoge(& $var = null) {
}

PHP5を使おう
0869nobodyさん2006/11/04(土) 14:55:52ID:UuLfn9RK
>>864
今、トラックバックスパムではないんですが、トラックバックを一度で複数送る
研究をしていて、それで作成したいんです。
フォームだと複数送れません。
>>863
echo してみたら、Bad requestと表示されました。
プログラムが間違っているということですかね?
でしたら、どこが間違っているか教えていただけますでしょうか?
0870nobodyさん2006/11/04(土) 14:58:15ID:???
>>869
> fputs($sock, "$data\r\n");

Content-lengthが実際のデータ長より2バイト短い
0871nobodyさん2006/11/04(土) 14:58:58ID:UuLfn9RK
>>869
上記のエラーメッセージです。
HTTP/1.1 400 Bad Request Date: Sat, 04 Nov 2006 05:53:46 GMT Server: Apache Content-Length: 226 Connection: close Content-Type: text/html; charset=iso-8859-1
Bad Request
Your browser sent a request that this server could not understand
0872nobodyさん2006/11/04(土) 15:02:15ID:e0EPAzx7
>>867
>>868
ありがとうございます。やはりphp5でないと無理ですか…。
0873nobodyさん2006/11/04(土) 15:02:43ID:???
>>869
あと、相対パスでPOST
0874nobodyさん2006/11/04(土) 15:14:53ID:UuLfn9RK
>>873
思ったんですけど、このスクリプトでレンタルブログ(ココログ)などにトラックバック
って送れないですよね?
0875nobodyさん2006/11/04(土) 16:14:05ID:Z4GrE+jA
PHP で処理系に使われている文字コードを取得するにはどうしたらいいでしょうか?
環境の都合で i18n_loc_get_default は使えそうに無いです.

PHP を bamcompile で exe を作っているのですが,
ファイルを出力するときに OS(Windows)が使っている文字コードが分からないと
都合が良くないからです.
どうせ日本でしか使われないから Shift-JIS 決め打ちでいいやっていうわけにもいかないし
0876nobodyさん2006/11/04(土) 16:47:39ID:???
まず、$_SERVERで取得できることをすべてためしてみろ。話はそれからだ。
0877nobodyさん2006/11/04(土) 17:19:53ID:Z4GrE+jA
>>876
Windows と Linux の両方で見てみましたけど
使えそうなのはありませんでした...
つか CPU 名とか分かるくせに何で文字コードとかわらないんだ...
08788752006/11/04(土) 17:23:39ID:Z4GrE+jA
おっと名前を忘れてた
0879nobodyさん2006/11/04(土) 17:42:39ID:???
>>875
クライアントから入力→文字コード判定→振り分け
08808282006/11/04(土) 17:44:26ID:???
>>846
詳しくわかりやすい解説ありがとうございます!

define()はそんなに使わないので、高速でなくともまあいいのですが、
それよりも連想配列が遅いというのは、あんまりいい気分ではないですね。
連想配列、便利なだけに。
0881nobodyさん2006/11/04(土) 17:51:01ID:???
>>880
というか、連想配列に限らずPHPの変数は全部遅いんだよ。
0882nobodyさん2006/11/04(土) 17:55:22ID:+mcy38xB
http://www.exsample.com/?test

というURLがあります。このURLの?test部分を
$_GETで受け取りたいのですが、記述がわかりません

普通に$_GETとしても取得できませんし、$_GET[]とやるとエラーがでます。
どなたかアドバイスお願いいたします。
0883nobodyさん2006/11/04(土) 17:55:33ID:???
重箱の隅突付く程度のパフォーマンス知識自慢はもうウンザリ
0884nobodyさん2006/11/04(土) 17:58:02ID:???
>>882
$_SERVER['QUERY_STRING']
>>883
まぁ、元々の質問がAPC関連=PHPのパフォーマンスに不満のある人、の場合だし
08858752006/11/04(土) 18:05:17ID:Z4GrE+jA
>>879
スクリプトを変換した EXE にファイルを D&D する程度なんで
ユーザに入力を求めるのは少し不自然かもしれないです.
けどほかに考え付かないので使ってみようかな.
0886nobodyさん2006/11/04(土) 18:12:54ID:???
>>885
どっちかっつーとWindowsAPIな話の気がするんだが…
0887nobodyさん2006/11/04(土) 18:23:47ID:???
>>885
ファイル受け取ってどうこうするんだったらその中身調べて
キャラクタセットをdetectするのが妥当じゃないのか?
0888nobodyさん2006/11/04(土) 18:25:40ID:???
おれは、Dungeons&Dragonsかとオモタ
0889nobodyさん2006/11/04(土) 18:28:00ID:Z9X2uAOu
セッション管理の外部ファイルを作成したところ、自身のファイルをうまく
呼び出せず困っています。なにかヒントがあればお願いします。

WIN XP + Apache 2.0.50 + PHP 4.3.7

[表示用ファイル test.php]
require("session.php");
<!-- セッション部 -->
<?= $session ?>
[session.php]
//セッションが開始されていなければ、フォームを表示
$session = "<form action=" . $thisfile . " method='post'>....."

$thisfile = $_SERVER["SERVER_NAME"] . $_SERVER["PHP_SELF"];

を指定すると <print>文では、localhost//test/test.php と正しく表示されるのですが
アドレスバーの表示は http://localhost//test/localhost//test/test.php となって
しまします。ちなみに

$thisfile = $_SERVER["PHP_SELF"];

だけだと、<print>文表示は //test/test.php アドレスバーは
http://test/test1.php となってともに not found です。
0890nobodyさん2006/11/04(土) 18:36:05ID:???
>>887
中身がテキストだなんて誰も書いてないと思う
0891nobodyさん2006/11/04(土) 18:39:21ID:???
>>889
> を指定すると <print>文では、localhost//test/test.php と正しく表示されるのですが
ホスト名とパスの間が「//」なのは全然正しくないと思う。

> $thisfile = $_SERVER["PHP_SELF"];
> だけだと、<print>文表示は //test/test.php
なんかApacheの動作が変だと思う。再インストールしてダメならバージョン変えてみては?
0892nobodyさん2006/11/04(土) 18:42:34ID:???
>>889
> アドレスバーの表示は http://localhost//test/localhost//test/test.php となって
元々の呼び出し方自体がおかしいんじゃないの?
http://localhost/test/test.phpで実行したらちゃんと動かないか?
ちなみに通常は$_SERVER["PHP_SELF"]だけでOK。
$_SERVER["SERVER_NAME"]もつけてフルURLにするなら頭にhttp://も足さなきゃダメ。
0893nobodyさん2006/11/04(土) 18:42:49ID:Z9X2uAOu
>>891
ありがとうございます。Apache 側の設定の問題でしたかっ!
Apache の設定の方を調べてみます
0894nobodyさん2006/11/04(土) 18:47:42ID:Z9X2uAOu
>>892
http://localhost/test/test.php で動作します。
http://localhost//test/test.php アドレスバーに打ち込んでも
表示されるので、これでもよいのか?と...(汗)すみません...
0895nobodyさん2006/11/04(土) 20:42:43ID:???
>>881
そんなおまえにこれをやろう。使い道は聞くな。
function php_internal_hash_func($key)
{
$hash = 5381;
for ($i = 0; $i < strlen($key); $i++) {
$hash = 0xFFFF & (($hash << 5) + $hash + ord($key{$i}));
}
return $hash;
}

function check_symbols_hash($arr)
{
for ($mask = 8; $mask < count($arr); $mask <<= 1);
$mask--;

$ret = array();
foreach ($arr as $val) {
$ret[php_internal_hash_func($val) & $mask][] = $val;
}
ksort($ret);
return $ret;
}
0896nobodyさん 2006/11/04(土) 20:42:46ID:DqH0rqVh
指定したURLのWebページのhtmlソースの取得についてお聞きしたいのですが。
PHP-Manualの例を引用すると・・
<?php
// この例ではHTTPを通してURL上のHTMLソースを取得します。
$lines = file('http://www.yahoo.co.jp');
// 配列をループしてHTMLをHTMLソースとして表示し、行番号もつけます。
foreach ($lines as $line_num => $line) {
echo "Line #<b>{$line_num}</b> : " . htmlspecialchars($line) . "<br />\n";
}
?>
これで、htmlのソースが表示できるのですが、file_get_contents()を
使った場合どのように記述すれば良いのかわかりません。
よろしければ、お教え願えませんか?
0897nobodyさん2006/11/04(土) 21:03:06ID:???
$lines = explode("\n",file_get_contents('http://www.yahoo.co.jp'));
foreach ($lines as $line_num => $line) { 
echo "Line #<b>{$line_num}</b> : " . htmlspecialchars($line) . "<br />\n"; 
} 
0898nobodyさん 2006/11/04(土) 21:35:36ID:DqH0rqVh
>>897
なるほど。ありがとうございました。
あと、file_get_contents()を使う場合は配列に読み込むわけでは
ないですよね?それで、foreachを使わずにするために、fileでは
なく、file_get_contents()はどうかと思ったんですが、他の記述
方法はないでしょうか?
0899nobodyさん2006/11/04(土) 21:41:16ID:???
foreachを何で使いたくないの? forならいいの?
0900nobodyさん2006/11/04(土) 21:55:48ID:???
>>898
ようするにループでやらずに行番号付けたいってこと?
そうなると改行コードを置換とかしないといけないと思うけど、
連番付けながら置換ってちょっと面倒くさいよ?
なんでわざわざループが必要な処理をループ使わないでやりたいなんて思うのさ。
0901nobodyさん2006/11/04(土) 21:59:54ID:???
下らない質問で申し訳ありません。

PHPでWebを作る際に出力を全てprintやecho等でやっています。
こうして動的に出力される「ページのソース」を見ると無駄な改行がたくさん入っています。
何故改行が入ってしまうのでしょうか?原因不明の問題が出ないか心配です。



と書きながら原因思いつき&判明したフォー

----------------チラシの裏----------------
\n←この部分とか
\n
<?php
\n
function example()
{
\n
}
\n
\n
?>←これ以下の
\n←この部分
\n
----------------チラシの裏----------------

が出力されてたとです。
PHPが埋め込みスクリプトだと再認識したとです。
良い子のみんなはこんな質問しちゃだめですよ(´・ω・`)
09028752006/11/04(土) 22:07:42ID:Z4GrE+jA
>>886
そうですね自分もそんな気がしてたんですがWin32apiのことは全然知らなくて...
windowsに直接ロケールとか調べるコマンドあったらsystem()とか使おうと思ったんですけど
それもちょっと分からなかったんです

>>887
>>890さんが言うとうり扱うファイルはバイナリファイルなんで文字コードを特定できないです.
0903nobodyさん2006/11/04(土) 22:16:19ID:???
>>902
もう出力ファイルは全部英語で吐き出してしまえ。
09048982006/11/04(土) 22:47:49ID:DqH0rqVh
>>899,900
いやぁ、forならいいかなぁって。すいません。foreachの使い方
がいまいち馴染めなかったので、言ってみただけです。
09058982006/11/04(土) 22:52:44ID:DqH0rqVh
連続ですいません。
>>900
行番号は別にいりません。ただhtmlのソースコードを取得したい
だけです。それで、file_get_contents()を使って、もっと
あっさりできないものかと思いまして。
0906nobodyさん2006/11/04(土) 23:01:24ID:???
普通に表示するだけなら
echo htmlspecialchars(file_get_contents('http://www.yahoo.co.jp'));

取得するなら変数に格納
$data = file_get_contents('http://www.yahoo.co.jp');

いまいち何がしたいのかわからんけど
0907nobodyさん2006/11/04(土) 23:01:58ID:???
>>905
echo file_get_contents("URL");
というか、おまえサンプルのソースの内容を全く把握できてないだろう。
09088982006/11/04(土) 23:06:09ID:DqH0rqVh
みなさまありがとうございました。
もう少し建設的なやりとりを交わせるようにがんばります。
0909nobodyさん2006/11/05(日) 00:07:28ID:bwOCiosn
PDOでDBにファイルを保存したり取り出したりする場合の質問です。
create table files (
  id int not null auto_increment,
  file longblob,
  primary key (id)
);
で作ったテーブルにファイルを格納するところまでできたのですが、以下のコードで$fpにファイルハンドルが入らず、データがそのまま文字列として入ってしまいます。
$db = new PDO('mysql:host=localhost;dbname=hogehoge', 'user', 'pass');
$stmt = $db->prepare('select id, file from files where id = 1');
if (! $stmt->execute()) {
  $info = $stmt->errorInfo(); echo $info[2];
}
$stmt->bindColumn('id', $id);
$stmt->bindColumn('file', $fp, PDO::PARAM_LOB);
$stmt->fetch(PDO::FETCH_BOUND);
var_dump($fp);
//fpassthru($fp);
//fclose($fp);
http://www.php.net/manual/ja/ref.pdo.phpの例12の通りだと思うのですが、どのように直したら$fpにファイルハンドルが入るかわかる方いますか?
0910nobodyさん2006/11/05(日) 00:14:46ID:???
>>905
<?php
readfile('http://www.yahoo.co.jp');
?>
0911nobodyさん2006/11/05(日) 00:15:22ID:???
なあ、eAcceleratorって5.2で動かしてるひといる?



0912nobodyさん2006/11/05(日) 00:39:08ID:???
>>909
ファイルハンドラを保存できてんの?
保存したコード解らんからなんとも言えんけど
09139092006/11/05(日) 00:47:00ID:bwOCiosn
>>912
ファイルハンドラを保存というか、保存されているものは文字列(というかバイナリ)です。
以下、スクリプト自身をDBに保存する摩訶不思議なスクリプトです。
よろしければ、試してもらえるたら幸いです。
(インデントは全て全角スペースで書いてあるので、置換してください)
$fp = fopen(__FILE__, 'rb');
$db = new PDO('mysql:host=localhost;dbname=hogehoge', 'user', 'pass');
$stmt = $db->prepare('insert into files set file=:file');
$stmt->bindParam('file', $fp, PDO::PARAM_LOB);
  // 挿入時はちゃんとファイルハンドラが使える。
if (! $stmt->execute()) {
  $info = $stmt->errorInfo(); echo $info[2];
}
0914nobodyさん2006/11/05(日) 01:02:22ID:ByyhjYSA
すいません、10円ハゲを隠すコードのサンプルか何か書いてもらえますか?
10円 ハゲ PHP エロス
辺りでググッたのですが見つかりません。
0915nobodyさん2006/11/05(日) 01:29:17ID:???
hiddenで隠すやつは素人
セッションで隠すやつは玄人
09169092006/11/05(日) 01:47:57ID:bwOCiosn
試しにスクリプト自身ではなく、5MBくらいのファイルを913のコードで保存しようとすると、エラーメッセージで、
MySQL server has gone away
(MySQLサーバーが消えました???)
と言われます。
もう何かPDOでLOB扱うのは諦めるかもしれません。
他にMySQLでファイルを保存する方法にはどんなものがありますか?
0917nobodyさん2006/11/05(日) 02:24:39ID:???
mysql_query("insert into file_table values( $id, $file ) );
0918nobodyさん2006/11/05(日) 03:37:58ID:???
>>869
> 今、トラックバックスパムではないんですが、トラックバックを一度で複数送る研究を・・・
それがトラックバックスパムなんです。研究だろうと何だろうと。

>>874みたいに興味持っちゃうお子さんがいるでしょ。
だから公共の場で教えてあげることはできないんです。
0919nobodyさん2006/11/05(日) 04:10:54ID:???
>>869はseo対策の業者
0920nobodyさん2006/11/05(日) 04:16:13ID:???
>>911
動かしてますが何か御用でも・・・?
0921nobodyさん2006/11/05(日) 08:32:35ID:???
天下の高木浩光タンが、
ttp://takagi-hiromitsu.jp/diary/20061104.html#p01
で、
> こんなのは PHPのバグでしょ。エンコーディングがShift_JISの文字列を addslashes() するときに、
> Shift_JISとして処理していない addslashes() のバグ。
といってるが、バグなのか?
マニュアルにも、SHift_JISは"PHP で動作しないと思われる文字エンコーディング"になってるのに。
0922nobodyさん2006/11/05(日) 09:03:11ID:???
こんな晴れた日曜の朝に動かないものに対して
バグだろうがバグじゃなかろうか議論なんて問答無用な話だ
0923nobodyさん2006/11/05(日) 10:25:46ID:???
>>921
そんなやつ知らんw
0924nobodyさん2006/11/05(日) 11:38:10ID:???
>>921
そもそもmb以外の関数にマルチバイトの動作を求められても困る。
0925nobodyさん2006/11/05(日) 11:48:25ID:???
>>921
PHP始めたばかりの初心者だけどC/C++経験者のおいらから言わせてもらえば

×バグ
△仕様
○未実装

他の文字列関数にmb系関数がある以上日本語にはmb系関数を使うのが正しい。
しかしmb_addslashesは無いので未実装扱いが正統。
Shift_JISなんぞ国個別(今回は日本語)の個別コードに過ぎないので解釈不能で仕方が無いと思う。

ついでに言うとmb_addslashesが無いのであればmb_addslashesと同等の動作の物を自分で作成するか
PHPマニュアルにもあるようにSQLサーバ固有のエスケープ関数を使用するのが正しいと思う。
それでも問題が起こるのであれば、それはまた別の話

つづく

0926nobodyさん2006/11/05(日) 12:02:32ID:???
>>921
それはバグでもなければひろみちゅの勘違いでもなくて、
指摘された元々の文章を書いた人が
「PHPではSJIS日本語のエスケープにaddslashes()を使う」
と大嘘を書いたせい。
0927nobodyさん2006/11/05(日) 12:22:05ID:???
日記やブログを書く時は、十分に吟味しないと大恥書くよ。
0928nobodyさん2006/11/05(日) 12:35:09ID:???
件の記事のリンクが繋がらないので記事の全文が見れずはっきりとは言えないが。
「今夜分かるSQLインジェクション対策,」であるのならば記事の方が正しい。
>>921のリンク先で批判している人が間違い。

>対策に「準備された文」(prepared statement) のことを書かないのは、どういうつもりなわけ?
確かに書くべきだと思うが
1:prepared statementはDBや上位インターフェイスによっては未実装かもしれない。(そういう)意味ではエスケープもアレだが
2:prepared statementはインジェクション対策というよりプログラムからSQL文作成をする場合の簡略化に本質があるとはず。
 つまりprepared statementに対応していたとしても問題文字を埋め込んだ場合に必ずしもインジェクション対策にはならないのではないかという疑問がある?

>そんな方法が「一般的になっている」なんて書くなって。そんなのは、はじめっから間違ってるって書くべきこと。
「今夜分かるSQLインジェクション対策,」、つまり分かっていない人用だし、実際にそのような対策例が多いので=一般的で良いと思われる。
というかprepared statementが正しいという前提の元で批判しているこの人が間違い。

>「方向性は正しい」と言いながら「理解していないため」というのはどういう了見なわけ? 「方向性」って何? 方向性からして間違ってるんだって。
prepared statementが正しいという前提の元で(ry
記事はエスケープをするという方向性は正しいが本質を理解していないと完全な対策が取れないという事が言いたいのであろう。
すなわち文字列やaddslashesを理解していない人には完全な対策が取れな(ry 自爆(ry

>「HTMLを生成する段階でエスケープすればよいと考えている人」って何それ?
これは記事の説明が悪い。
記事は初心者にクロスサイトスクリプティングと一緒くたにしないように注意を喚起したかったのであろう。あれもエスケープするしね。
0929925 9282006/11/05(日) 12:37:59ID:???
「SQLインジェクション対策,」を説明するのが目的である以上、
SQLインジェクションとは何故起こるのかを説明しなければならない。

説明する上では文字列やエスケープについての記述が必須になる。
何故起こるのかの本質を理解せずに「prepared statementを使用すれば良い」等という書き方になると.
(全てのDB,SQL,インターフェイスで対策になっているか疑問だが)
addslashesがバグとかいう誤解をする人が増えてしまうのではないかと思う。

また、別の件で本質が同じである同様の間違いをおかす人も増えてしまうのではないかと思う。
SQLインジェクションの本質を理解していれば単純なクロスサイトスクリプティング脆弱性は生まれないが、
prepared statementだけでは同じ間違いをおかしかねない。

------------ここまでチラシの裏-----------
0930nobodyさん2006/11/05(日) 12:45:24ID:???
一応貼っておきますね
【PHPアクセラレータで一番高速なのはどれか?】
ttp://gigazine.net/index.php?/news/comments/20061103_php_accelerator/
0931nobodyさん2006/11/05(日) 12:51:06ID:???
安定性重視のXCacheか…ちょっといいな。
うちでもAPCを使ってるが、月1くらいで再起動かけないと
どうも動作が不安定になることが多くてちょっと困ってる…
0932nobodyさん2006/11/05(日) 13:12:38ID:???
>>928-929
別に高木は「prepared statementを使用すれば良い」っていう
書き方をしろなんて書いてないでしょ

Webアプリケーション対策のところにprepared statementを始めとする
セキュリティが考慮された上位DB抽象インターフェイスを使う事が
説明されてないっていう事がダメって言ってるわけで

何故起こるのかを書く事は必要だけどその対策方法が
低レベルAPIの対策方法しか書かれてなくて
しかもそれらがさも「一般的な対策」であるかのように
書かれてるっていうのが問題だってのが高木の言い分だろ

@ITの記事が説明不足だっていうのは正しい指摘だと思うよ
高木の「addslashesはバグだ」ってのもちょwおまwって感じだけど
0933925 928 9292006/11/05(日) 13:43:48ID:???
>>932
まあ、そうですね。
そんなおいらも >>901 みたいなアフォな事やってるフォー
901=925,928,929なんです(`・ω・´)シャキーン

高木氏の文に説明書いてあるけど顔見知りみたいだし(?)書いているのは個人日記みたいだし、
高木氏本人も自分専用チラシの裏程度の感覚で書いてるのかもしれないですしね。
0934nobodyさん2006/11/05(日) 13:59:56ID:???
>>933
901はかなりバカすぎると思いまっす!w
0935nobodyさん2006/11/05(日) 14:27:01ID:???
うにこーどなら問題は発生しないからこんな感じの関数作れば解決

function mb_stripslashes($str)
{
  $enc = mb_detect_encoding($str, 'UTF-8,EUC-JP,SJIS');
  $str = mb_convert_encoding($str, 'UTF-8', $enc);
  $str = stripslashes($str);
  $str = mb_convert_encoding($str, $enc, 'UTF-8');
  return $str;
}
0936nobodyさん2006/11/05(日) 14:38:59ID:???
>>935
そこでstripslashesするってことはaddslashes済みのデータってことだよね?
SJISデータにaddslashesするとデータが破壊されるから正常なUTF-8には変換できないよ。
それ、addslashesの間違いなんじゃ…
0937nobodyさん2006/11/05(日) 18:29:10ID:???
結局phpをSJISなんかで動かすヤツがバカってことでおk? >件の記事の件
まぁ俺は元々UFT-8使ってるから関係ないけど。
0938nobodyさん2006/11/05(日) 18:41:22ID:???
UFT-8ね、、、
釣られたよ俺の負けだ
09399372006/11/05(日) 19:02:15ID:???
うはwww orz
0940nobodyさん2006/11/05(日) 22:10:07ID:???
てか、mb てのもウザい。ちゃんと国際化設計やってほしいよな。
0941nobodyさん2006/11/05(日) 22:14:31ID:???
日本語であるために浪費した時間、プライスレス。
0942nobodyさん2006/11/05(日) 22:43:56ID:???
マルチバイト実装やってるのって誰なの?
0943nobodyさん2006/11/05(日) 22:54:54ID:???
パートのおばちゃん
0944nobodyさん2006/11/05(日) 23:11:20ID:???
>>940
php6はネイティブでunicodeサポートされる予定
0945nobodyさん2006/11/06(月) 00:13:36ID:???
PHP6っていつ出るんだ?
0946nobodyさん2006/11/06(月) 00:54:45ID:???
まだ仕様をどうするかについて議論してる最中だよ。
0947nobodyさん2006/11/06(月) 02:10:13ID:NtdVX8J9
PHPでPOSTのデータを動的に作る方法を教えてください。
受け側で $_POST['a'] == 'b'; なるようなソースを教えてください。
0948nobodyさん2006/11/06(月) 02:30:15ID:???
<?php
$_POST['a'] == 'b';
?>
0949nobodyさん2006/11/06(月) 02:31:12ID:???
(´ロ`)
0950nobodyさん2006/11/06(月) 02:31:34ID:???
ああごめん、=は1個
これで以下のスクリプトでどこでも$_POST['a']がbとして使えるよ
0951nobodyさん2006/11/06(月) 02:36:04ID:NtdVX8J9
(´ロ`) ありがとう。
0952nobodyさん2006/11/06(月) 03:27:09ID:mhsSMHja
ちょっと笑った
0953nobodyさん2006/11/06(月) 04:35:02ID:???
>>945
もうでてるよ。評価版だけど。
0954nobodyさん2006/11/06(月) 04:38:56ID:???
PHP6もがらっとかわってるの?
4→5はオブジェクト周りがかなりJavaっぽくなったが、
また6で覚えなおすこと多くなるのかな。
レス数が950を超えています。1000を超えると書き込みができなくなります。