【PHP】下らねぇ質問はID出して書き込みやがれ 82
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2009/03/09(月) 02:14:28ID:HyrthkeE過去スレ、関連スレ、FAQなどは>>2-10辺り
次スレは>>980が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。
◆前スレ
【PHP】下らねぇ質問はID出して書き込みやがれ 81
http://pc11.2ch.net/test/read.cgi/php/1234958956/
◆質問用テンプレ
【OS名】vine linux
【PHPのバージョン】php5.26
【連携ソフトウェア】mysql
【質問内容】
◆質問する時の注意
・ スレを上げて自分のIDを表示させること。(メール欄に何も記述しない。専ブラのsageチェックを外す)
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に関連リンクの公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
(PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。)
◆質問後の注意
・2回目以降は最初に質問した際のレス番号を入れて、偽者防止に必ずIDを表示させること。
・解決しなくても回答をもらった場合はお礼を言うこと。
(荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)
◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
0523nobodyさん
2009/03/22(日) 11:33:37ID:???0524nobodyさん
2009/03/22(日) 11:39:35ID:???これ以上やるなら専用スレ立ててやるからそっちで共食いしてくれ
0525nobodyさん
2009/03/22(日) 11:46:58ID:???バージョン管理システムを導入するといいです
>>496
いくつかのIDEでは/**と入れて改行すると自動で作ってくれます
EclipseのPHPプラグインあたりだと
最初に関数を定義してからその上に/**を入れて改行すると
下の関数を見て引数があったら@param
返り値があったら@returnを生成してくれます
その他については必要であったら自分で記述するか
デフォルトの値として設定可能なものなら設定するしかありません
0526nobodyさん
2009/03/22(日) 11:49:05ID:dhNIUg3nどうすればいいですか?
get_multi_array($array,array('hoge','fuga','poge'))
→$array['hoge']['fuga']['poge']を取得
こういう動作をさせたいのです
0530nobodyさん
2009/03/22(日) 12:57:11ID:???いいんだよ byスレ回り先生
自作自演する若者はためが無い by湯浅誠
自作自演格差社会 〜492のレス能力格差がスレッドを引き裂く
>>528は、新自由主義者
何でも排除して、格差を作ろうとする
0532nobodyさん
2009/03/22(日) 14:07:27ID:ofSdd/CM"<a href='".$value."'>"などとしたときに
htmlspecialcharsだけでは変数にscript:〜が含まれていた場合に回避できませんが
変数の前に"http://sample.com/"とURLがあれば問題ないのでしょうか
実際Firefox,safariなどでは普通にnot foundになります
0533nobodyさん
2009/03/22(日) 14:09:38ID:???こんなのどう?連想配列でも多分問題ないと思う。
<?php
function get_multi_array(array $a, array $keys) {
$tmp = &$a;
foreach ($keys as $key) {
if (! is_array($tmp) || ! array_key_exists($key, $tmp)) return null;
$tmp = &$tmp[$key];
}
return $tmp;
}
// 以下テスト
$array =array(
array(
array(1,2,3), array(4,5,6),
),
array(
array(7,8,9), array(11,12,13), array(14,15,16)
)
);
var_dump(get_multi_array($array, array(0, 1, 2)));
0535nobodyさん
2009/03/22(日) 14:33:52ID:???0537nobodyさん
2009/03/22(日) 17:29:33ID:XWTxCtFo0538nobodyさん
2009/03/22(日) 17:35:05ID:XWTxCtFo<input type="text" name="title" value=""><br>
<textarea cols="80" rows="7" name="text"></textarea>
<input type="submit" value="send">
</form>
<?php
$title="<h2>".$_POST["title"]."</h2>";
$text='<div class="text">'.$_POST['text'].'</div>';
if ( get_magic_quotes_gpc()) {
$title = stripslashes($title);
$text=stripslashes($text);}
$text = nl2br($text);
$log = 'log/200902.htm';
$lock = 'lock.txt';
$lock_fp = fopen($lock,"w");
flock($lock_fp,LOCK_EX);
$old_log = file_get_contents($log);
$fp = fopen($log,"w");
fwrite($fp,$title);
fwrite($fp,$text);
fwrite($fp, $old_log);
fclose($fp);
flock($lock_fp,LOCK_UN);
fclose($lock_fp);
?>
これ、とあるサイトから引用してきたスクリプトなんですけど、どうやっても$_POSTの値を取得できずにlog/200902.htmの内容が<h2></h2><div class="text"></div>と内容が空になってしまいます。
POSTの値を取得するにはどうしたらいいんでしょう?どなたか知識のある方、ご教授下さい。
0539nobodyさん
2009/03/22(日) 17:37:44ID:???var_dump($_POST);exit;
0540nobodyさん
2009/03/22(日) 17:39:58ID:???自身に送るなら空白
0542nobodyさん
2009/03/22(日) 17:52:24ID:XWTxCtFoformのアクションプロパティは合ってるかと思いますが…。log/200902.htmというファイルに書き込みたいので。
0543nobodyさん
2009/03/22(日) 17:55:25ID:???データを渡すスクリプトのパスを書くんだよ
どのファイルに書き込むかとかは、
スクリプトの方で処理すること
$_POSTの中身が空の配列ってことは、
データが渡されてないってこと
0544nobodyさん
2009/03/22(日) 18:02:21ID:XWTxCtFoarray(2) { ["title"]=> string(4) "test" ["text"]=> string(4) "test" }
これはデータが渡されてるということなんでしょうか。しかしlog/200902.htmの中身は相変わらずです…。
0545nobodyさん
2009/03/22(日) 18:09:39ID:???それはそうとまずHTMLを理解しないと
0546nobodyさん
2009/03/22(日) 18:12:30ID:XWTxCtFoHTMLにも理解がありませんでした。重ね重ね恥ずかしいかぎりです…。
0547nobodyさん
2009/03/22(日) 18:17:48ID:XWTxCtFo本当に無知な私にここまで親身になってくれてありがとうございました。本当に感謝します。
また何かわからないことがあったら自分で調べて、それでもわからなかったらまたこのスレにお世話になると思います。その時はどうか暖かい目で見てやってください…
0548nobodyさん
2009/03/22(日) 18:27:06ID:???0549nobodyさん
2009/03/22(日) 18:34:08ID:XWTxCtFo0550nobodyさん
2009/03/22(日) 18:45:54ID:???まあいいや
0551nobodyさん
2009/03/22(日) 19:52:51ID:???例えば2chは、以下のようなテキスト形式でデータを保存している(本当は違うんだが、まあ割愛)。
nobodyさん<><>2009/03/22(日) 18:34:08 ID:XWTxCtFo<> はい。htmlにさせて頂きました... <>
そのログファイルの内容を読み込んで、HTMLとして整形して書き出すPHPで本文を表示させるわけだ。
HTMLで保持しない理由はいくつかある。パッと思いつくのは
柔軟性
例えば、表示されるHTMLを別の形にしたいとか、RSSも書き出したい、という時に再利用しづらい。
記事削除passをつけたいとか、データ保持先をDBにしたいとか、色んな拡張性が失われたりもする。
セキュリティ
本文に<script>alert('うけけけけけ');</script>と書かれたらどうなる?とか。
どちらにせよ対策は必要なのだが、ログをHTMLとして持っていると、どこで対策すりゃいいのかが曖昧になりやすい。
容量
無駄にデカくなる。大した問題じゃないが。
0552nobodyさん
2009/03/22(日) 20:56:06ID:???0553nobodyさん
2009/03/22(日) 23:17:35ID:???ログをhtmlとして書き出す掲示板はkentも作ってたな
0554nobodyさん
2009/03/22(日) 23:23:17ID:???ログをHTMLとして書き出しておくのは
論外といったら失礼かもしれないけど、
明らかに保守性なさすぎじゃないか?
0555554
2009/03/22(日) 23:29:53ID:???保持しておくだった
0556nobodyさん
2009/03/22(日) 23:30:00ID:???0557nobodyさん
2009/03/22(日) 23:30:47ID:???一件一行で、ヘッダとフッタを除いた状態で保存するなら、そんなに保守性もわるくないと思うが。
0558nobodyさん
2009/03/22(日) 23:34:55ID:???0559nobodyさん
2009/03/22(日) 23:43:37ID:???0560nobodyさん
2009/03/22(日) 23:49:52ID:cLpptsUH穴がないか不安になってきたので、質問します。
要点のみを記載します。
・ID(又はメールアドレス)とパスワードをフォームに入力して、
MySQL内の情報を照合
・正しければトークン用のコードを発行し、ユーザ情報を更新
(テーブルのtokenフィールドに作成した値を追加)
・その他、セッション変数にはログイン時のUAとIPアドレスを代入
・各ページアクセス毎にセッション情報が正しいかをIFで調べる
(会員情報編集などの場合、ユーザIDとトークンコードが正しいか照合)
・パスワードはmd5で保存
と言うことをしています。他に「これもしろ」と言うことはありますでしょうか?
0561nobodyさん
2009/03/22(日) 23:50:51ID:???0562nobodyさん
2009/03/22(日) 23:51:39ID:???MySQL内の情報を照合
(1)この時に、SQLインジェクション対策はされているのか?
0563nobodyさん
2009/03/22(日) 23:52:30ID:???0566560
2009/03/23(月) 00:16:39ID:???しています。まず入力値にhtmlspecialcharsをかけて
DBアクセス時にmysql_escape_stringをしています。
ソースに関してですが、莫大な量になるので掲載を控えます。
それにソースや構文の組み立てを聞きたいのではなく、
自分の足りない知識・誤っている知識を指摘していただきたく思い、質問しました。
0567nobodyさん
2009/03/23(月) 00:29:46ID:???0570nobodyさん
2009/03/23(月) 02:53:59ID:RPfvHZ0v> 0123456789
test.php
> $fp = fopen("test.txt", "r");
> while(!feof($fp)) {
> print fread($fp, 1);
> flush();
> sleep(1);
> }
> fclose($fp);
test2.php
> $fp = fopen("test.txt", "w");
> fwrite($fp, "aaaaaaaaaa");
> fclose($fp);
>
> $fp = fopen("test.txt", "r");
> print fread($fp, 10);
> fclose($fp);
test.phpが走ってる最中にtest2.php走らせても
test.phpの出力にtest2.phpの書き換えは反映されなかった。
読み出しに関してはルーズな実装してもOKって事?
0571nobodyさん
2009/03/23(月) 05:27:55ID:???0572nobodyさん
2009/03/23(月) 05:29:12ID:???ごめん。
0573nobodyさん
2009/03/23(月) 22:30:27ID:???>>568
ID(もしくはメールアドレス)は、必ずしもブラウザで表示するわけじゃないから、
・DB内の情報と照合する時 → mysql_escape_string(mysql_real_escape_string)
・ブラウザに表示する時 → htmlspecialchars
みたいにする、ってことでおk?
じゃないと、ID(もしくはメールアドレス)を更新する際に、'<'が'<'って保存されてしまうからっていうことかな。
見当違いだったらすまん。
0574nobodyさん
2009/03/23(月) 22:33:45ID:???>>573訂正
じゃないと、ID(もしくはメールアドレス)を更新する際に、'<'が'&lt;'って保存されてしまうからっていうことかな。
0575nobodyさん
2009/03/23(月) 22:38:01ID:???保存されてしまうことによって再利用するとき不便になるからだね
0576nobodyさん
2009/03/23(月) 22:58:16ID:???0578nobodyさん
2009/03/23(月) 23:45:08ID:uVBii4+5PHP Warning: PHP Startup: Unable to load dynamic library 'C:\\PHP\\ext\\php_curl.dll'
と同じようなログがたくさん出ます。
でも、該当のファイルは存在します
何が原因でしょうか?
0579nobodyさん
2009/03/23(月) 23:53:02ID:???でもさ、ID・メールアドレスを更新する時に<を使う場合ってあるの?
IDはだいたい半角英数字だし、メールアドレスもそうでしょ?
0580nobodyさん
2009/03/24(火) 00:01:55ID:???100%ってことはないので出口でサニタイズしろってエロい人が言ってた
0581nobodyさん
2009/03/24(火) 00:17:34ID:???0582nobodyさん
2009/03/24(火) 00:41:05ID:???PHPのバージョンは?
DOS窓から、php -mや、php -iって打っても、エラー出る?
5.2.9-1なら
> Please note that the cURL related function is disabled when open_basedir or safe_mode enabled.
ってニュースが出てたけど、関係しそうなとこある?
0583nobodyさん
2009/03/24(火) 04:21:02ID:???echo $a[0] = 'aaa';
echo $a[0][0] = 'news';
こうすると、なぜかバグルのですが、なぜですか?
0584nobodyさん
2009/03/24(火) 04:25:00ID:???出力だけしてくださいよ
0586nobodyさん
2009/03/24(火) 04:26:30ID:???echo $a[0] = 'aaa';
echo $a[0][0] = 'news';
print_r($a);
↓結果
Array ( [0] => jaa )
0589nobodyさん
2009/03/24(火) 04:30:23ID:???<?php
$a[0] = 'aaa';
$a[0][1] = 'jjjjk';
print_r($a);
Array ( [0] => aja )
0590nobodyさん
2009/03/24(火) 04:32:35ID:???バグじゃないよ。
$a[0]は文字列
$a[0][1]はその2文字目を代入しようとしてる文字列の1文字目で置換せよ
だから、$aは1要素配列のまま。
そんだけ。
0594nobodyさん
2009/03/24(火) 04:39:30ID:???0595nobodyさん
2009/03/24(火) 04:42:07ID:???自分初心者だったのでこんなのあったんだとびっくりしました
0597nobodyさん
2009/03/24(火) 04:49:11ID:???そうですか。今まで掲示板とブログ作ったんですか
そのような配列の使い方を書いてあるのがみたことなくて
気になりました
0598nobodyさん
2009/03/24(火) 07:45:46ID:???0599nobodyさん
2009/03/24(火) 07:53:32ID:???単に、1次元配列の要素が文字列で
その文字列にstring offsetでアクセスしてるだけ
0600586
2009/03/24(火) 08:34:05ID:???初心者本には、
あくまで 配列は個々の箱だと意識してました
データ型を指定しなくていいように、箱も好きに使っていいと
思ってました。
0601nobodyさん
2009/03/24(火) 08:34:37ID:???0602nobodyさん
2009/03/24(火) 08:52:05ID:???バグ
>>590は下のコードと勘違いしてるんじゃないのかね
$str = "12345";
$str[0] = "a";
echo $str; // a2345
0604nobodyさん
2009/03/24(火) 08:56:49ID:???0605nobodyさん
2009/03/24(火) 09:01:48ID:???静的な変数(配列)の型定義というのは
型に応じたメモリ領域を確保するということ(Javaでint型なら4バイトlong型なら8バイト等)
PHPはインタプリタだからその辺を動的にやってるわけ
この辺をちゃんと理解してないと正しいイメージはわかない
配列は箱ではなく連続したデータというイメージが正しい
メモリ上ではそのように配置されている
0606nobodyさん
2009/03/24(火) 09:45:45ID:VfITkfEnversionは5.2.3だったと思います
C:\php>php -m としたら、「isqlt09a.dllが見つからなかったため、このアプリケーションを開始できませんでした。
インストールし直すと解決する場合があります」 とアラートが出ました
C:\php>php -m
PHP Warning: PHP Startup: Unable to load dynamic library 'C:\PHP\ext\php_ifx.dl
l' - 指定されたモジュールが見つかりません。
in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library 'C:\PHP\ext\php_oci8.d
ll' - 指定されたモジュールが見つかりません。
in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library 'C:\PHP\ext\php_pdo_oc
i.dll' - 指定されたモジュールが見つかりません。
in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library 'C:\PHP\ext\php_pdo_oc
i8.dll' - 指定されたモジュールが見つかりません。
in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library 'C:\PHP\ext\php_pspell
.dll' - 指定されたモジュールが見つかりません。
in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library 'C:\PHP\ext\php_sybase
_ct.dll' - 指定されたモジュールが見つかりません。
C:\php>php -pでも同じ結果です
見つからないって言われてるモジュール、extの中にちゃんと存在してるんですが、、
0607586
2009/03/24(火) 19:06:44ID:???$aiueo[0] = "a";
$aiueo[0][0] = "aa";
とPHPで入れると置き換わったりする理由を書いて下さい
0608nobodyさん
2009/03/24(火) 19:09:04ID:???記憶違いかも知れんが、依存関係の都合でライブラリを読み込む順序によって、
そんなメッセージがでたかも。
以前、Windows版のPHPってサンプルのphp.iniの順番だとエラーが出てずいぶん
悩んだことがある。
0611nobodyさん
2009/03/24(火) 20:09:50ID:???置き換わる理由は仕様だから。それだけ。
$a[0] = 'abc';
$as = 'abc';
if ($a[0][0] === $as[0]) {
echo ' $a[0][0] equal $as[0]' . " <br />\n";
}
echo "target :" . $as . " = " . $a[0] . " <br />\n";
echo "offset0:" . $as[0] . " = " . $a[0][0] . " <br />\n";
echo "offset1:" . $as[1] . " = " . $a[0][1] . " <br />\n";
echo "offset2:" . $as[2] . " = " . $a[0][2] . " <br />\n";
$as[1] = $a[0][1] = 'xxxxxxx';
if ($a === array($as)) {
echo ' $a is array of $as' . "<br />\n";
}
echo "replaced:" . $as . " = " . $a[0] . " <br />\n";
echo "offset0 :" . $as[0] . " = " . $a[0][0] . " <br />\n";
echo "offset1 :" . $as[1] . " = " . $a[0][1] . " <br />\n";
echo "offset2 :" . $as[2] . " = " . $a[0][2] . " <br />\n";
0613nobodyさん
2009/03/24(火) 20:15:53ID:???0614nobodyさん
2009/03/24(火) 20:36:16ID:???phpinfo()を実行してみて、php.iniをどこから読み込んでいるのかも確認してみて。
以前、WINDOWSディレクトリと、phpの展開先の両方に異なる設定のphp.iniを置いていて、はまったことがあるので。
0615nobodyさん
2009/03/24(火) 20:37:10ID:???0616nobodyさん
2009/03/24(火) 21:07:22ID:/zsLtnA9複数クラスを一つのファイルにまとめたら速くなるのではと
思うのですが、それって実際どの程度の効果があるでしょうか?
まとめなくても、元来OSがファイルキャッシュするので、
あんまり変わらない気もします
0617nobodyさん
2009/03/24(火) 21:09:24ID:???0618nobodyさん
2009/03/24(火) 21:18:30ID:???再利用とか無視して一人で使うんだろうから別にいいとは思うけど
それでも基本どおり1クラス1ファイルにしときな
0619606
2009/03/25(水) 00:12:15ID:4yhBz/QX>>612
そうなってました
>>614
C:\WINDOWS でした。正しいですよね…
>>608さんの書いてる原因かなぁ
もうwindowsで作るの自体やめよっかな
0620nobodyさん
2009/03/25(水) 00:32:37ID:???ボトルネックがわかっていない状態でチューニングをしてはいけない。
まずは測定。
ファイル数云々というより、__autoload()の呼び出し回数が減ることによる高速化は一応期待できるかな。
マジックメソッドの類は総じて重い。
まあ、DBやファイルへのアクセスがあるならそっちがボトルネックになってるとは思うけど。
0621nobodyさん
2009/03/25(水) 01:59:46ID:???環境いじれるなら、APCとか使うのが良いんじゃないかなぁと思う。
ソースコードは扱いやすい単にしておいた方が、いろいろ良いし。
自分ははクラスはモジュールぐらいの単位の方が扱いやすいんで、
1クラス1ファイルにはしてないけど。
■ このスレッドは過去ログ倉庫に格納されています