【PHP】下らねぇ質問はID出して書き込みやがれ 82
レス数が900を超えています。1000を超えると表示できなくなるよ。
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を表示させること。
・解決しなくても回答をもらった場合はお礼を言うこと。
(荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)
◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
0838nobodyさん
2009/04/03(金) 07:28:49ID:b3GlDVd8一応本では読んだんですがいまいちよくわかりません 簡単に説明お願いします
0839nobodyさん
2009/04/03(金) 08:01:16ID:???繰り返し使われる場合はパフォーマンスが上がることもあるみたいだけど、一番大きいのは
SQLインジェクションみたいな攻撃を受けにくくなることじゃないの。
0840nobodyさん
2009/04/03(金) 08:43:25ID:???0841nobodyさん
2009/04/03(金) 08:45:48ID:???もうプリペアでやってるかもしれないけど
$a = "";
$var = "'".$a."'";
$query = "insert into test (id, comment) value ($val, 'test')";
0842nobodyさん
2009/04/03(金) 10:01:31ID:???0843nobodyさん
2009/04/03(金) 10:05:52ID:???0844nobodyさん
2009/04/03(金) 11:18:56ID:???http://neta.ywcafe.net/000974.html
0845nobodyさん
2009/04/03(金) 11:26:15ID:???サンプルコードにこれ見よがしにつっこむ奴なんなの
ある側面から切り取ってるんだから瑕疵がないほうがおかしいだろ
0846nobodyさん
2009/04/03(金) 11:29:51ID:???0848827
2009/04/03(金) 15:07:28ID:???フォームの件ですが色々試しましてSESSIONでいくようにしました。
色々とアドバイス本当にありがとうございます。
それでもう一つ質問なんですが、
フォームのチェックボックスの内容をhtmlに直に書かず、
config.phpなどに$val=array("aaa","bbb","ccc");
みたいな感じで記述しhtmlでforeachを使い
全て書き出すみたいな事をしたいんですが、参考書などを確認したら
配列で記述するのではなくfunctionで
function val(){
$val = array("aaa","bbb","ccc");
return $val;
}
という書かれ方がされてました。
関数にせず配列だけが記述すると何かマズイんですか?
質問が少しわかりにくいですがもしよければ
アドバイスよろしくお願いします。
0849nobodyさん
2009/04/03(金) 15:17:48ID:???$valの中身を将来的にコードからいじる可能性があるならfunction、
可能性がないなら定数のままでいい
0850nobodyさん
2009/04/03(金) 15:40:20ID:???0851827
2009/04/03(金) 15:41:11ID:???返信ありがとうございます。
例えばこれから先チェックボックスの値dddが増えた場合、
$val=array("aaa","bbb","ccc","ddd");
でも
function val(){
$val = array("aaa","bbb","ccc","ddd");
return $val;
}
でも変わらない気がするんですが・・・
素人質問本当にすいません。
今から考えてみます。
0852nobodyさん
2009/04/03(金) 15:48:11ID:???いい例が思いつかないのだけどこんな感じ。条件によって変わる場合だな
function val(){
$val = array("aaa","bbb","ccc","ddd");
// 天気が雪の場合のみ配列にeeeを追加する
if( $this->weather == "snow" ){
array_push( $val, "eee" );
}
return $val;
}
0854827
2009/04/03(金) 16:12:12ID:???>>853
返信ありがとうございます。
今後、配列を元に何か条件をつけるなどの機会がある場合は
関数にしておく方が好ましいという事ですね。
例文まで書いていただき本当にありがとうございました!
0855nobodyさん
2009/04/03(金) 18:24:43ID:ZpjcrZDPエンティティに変換したいのですが、どうすればいいのでしょうか?
htmlspecialcharsはダブルクォーテーションも変換しますし・・。
0856nobodyさん
2009/04/03(金) 18:32:47ID:???次のエラーが出てしまいます。
何が原因なのでしょうか?
Fatal error: Unknown: Failed opening required 'C:/Documents and Settings/繧イ繧ケ繝育畑縺ョ繝ヲ繝シ繧カ/My Documents/Visual Studio 2005/Projects/PHP_TEST/PHP_TEST/index.php' (include_path='.;C:\php5\pear') in Unknown on line 0
文字化けしちゃってますが
C:\Documents and Settings\ゲスト用のユーザ\My Documents\Visual Studio 2005\Projects\PHP_TEST\PHP_TEST\index.php
のところで何かエラーが発生している様です。
※phpのコード
<?php
/* TODO: Add code here */
print("テスト");
?>
0858nobodyさん
2009/04/03(金) 19:44:58ID:2mI6CRy6【PHPのバージョン】5.2.0
参照渡しで変数を送り
変数が未定義なら空の文字列を返し
変数が定義済みならそのまま返す関数を考えました。
$test = hoge_variable($v);
function hoge_variable(&$v) {
if(! isset($v) ) {
return '';
}
return $v;
}
テストに入る内容は望みのものですが、
変数$vが未定義だった場合、定義されて(?)NULLが入るようです。
この挙動について、どういった理由でそうなるのか、
また$vを未定義のままにする方法はあるのかご教示いただけませんでしょうか。
0859nobodyさん
2009/04/03(金) 20:02:31ID:???&$vのとき、参照を張るには、参照される側のアドレスが必要だから、そこで定義される。値はNULL
&$vにしなければよい。
0860nobodyさん
2009/04/03(金) 20:14:47ID:???定義されてないからNULLだぜ?
0861nobodyさん
2009/04/03(金) 20:15:15ID:2mI6CRy6やはりそんな感じだったんですね。
関数はエラーレベルによっては出るNotice: Undefined variable
の対策だったんですけど、&$vでなく$vにするとそこでUndefined variable
がでてしまう感じで…。
定義されたくない時は直接issetをしていくしかないということですかね。
というかそもそもUndefined variable回避に対するアプローチが違っているでしょうか…?
0862nobodyさん
2009/04/03(金) 20:18:37ID:???0863nobodyさん
2009/04/03(金) 20:35:14ID:2mI6CRy6$flag = $_POST['flag'];
そういう意味で先の
$flag = hoge_variable($_POST['flag']);
だったんですけど、
例えNULLでも配列に定義されてしまうと、
foreachとかする時に邪魔になったりとかそういう感じのことでした。
やはり基本的には
$flag = '';
if (isset($_POST['flag'])) {
$flag = $_POST['flag'];
}
みたいなことで行くのがいいのですかね。
0864nobodyさん
2009/04/03(金) 20:46:30ID:???0866nobodyさん
2009/04/03(金) 22:53:01ID:???> $flag = '';
> if (isset($_POST['flag'])) {
> $flag = $_POST['flag'];
> }
自分はそうしてる
変数が増えてくるとコードがのびがちなので
三項演算子使って
$flag = isset($_POST['flag'])?$_POST['flag']:null;
といった感じにしてる
0867nobodyさん
2009/04/03(金) 23:35:31ID:???クォートで処理していると、インジェクションが無いか処理を注視しないといけない。
プリペアドステートメントは、インジェクションが無い事が一目で分かる。
SQLの構文と変数が分離されるので見やすくなるって利点もある。
>863
functon getPostedVariable($key){
return isset($_POST[$key])?$_POST[$key]:null;
}
とかやると楽なのでオススメ。
プログラムの開始時に$_GETと$_POSTとかを丸ごとメンバに持つクラスのインスタンスを生成して、そいつにこの関数を定義する手もある。
メリットが思いつかないレベルならとりあえず忘れておいてもいいけどな。テストが非常にしやすくなる。
$request = new Request($_POST, $_GET);
echo $request->post('flag');
0868nobodyさん
2009/04/03(金) 23:36:22ID:???0869nobodyさん
2009/04/03(金) 23:49:57ID:???0870nobodyさん
2009/04/04(土) 01:03:53ID:???public private とかって宣言する事は出来ないのでしょうか?
public class Test
{
public function TestMessage()
{
print("あいうえお");
}
}
0873nobodyさん
2009/04/04(土) 02:00:30ID:???0874870
2009/04/04(土) 02:00:58ID:???サンクス
>>872
.Net(C# / VB.net) & C++とかでこれまで開発をして来ましたが何かばれちゃいましたか。
マニュアルをちょっと読む事にします。
というより一つ疑問なんですけどC#とかC++とかだと次のパターンAでみんな記述しているのに
PHPとかだとパターンAの書き方をする人が多いのはなぜでしょうか?
C#だと今まで私が関わって来たプロジェクトは100%パターンAで記述されています。
【パターン@】
if( 1 == 1)
{
}
【パターンA】
if(1 == 1{
}
0876nobodyさん
2009/04/04(土) 02:05:23ID:???両方ともパターン2かよ
0877nobodyさん
2009/04/04(土) 02:08:21ID:???JavaやPHP使いはMSみたいに無駄に行数消費するのを嫌うよ
0878nobodyさん
2009/04/04(土) 02:09:00ID:???てかA括弧閉じてないけど、スペースのことを言ってるのか・・・?
0879874
2009/04/04(土) 02:11:43ID:???>>874がどちらのこと言ってるのか良く分からないけど
俺は@はメソッドの時に使う。
一応Zendのコーディング規約に則ってやってるけど
個人の作業なら別にそんなの君の価値観でやればいいだろ
0880878
2009/04/04(土) 02:13:15ID:???0881nobodyさん
2009/04/04(土) 02:14:37ID:???PHPの「標準」なコーディング規約には2つの流儀がある。ひとつはZend、ひとつはPEAR。
で、どっちも1番の括弧スタイルを採用してるんだ。
C++で言えば、MSDNの規約とGNUの標準スタイルが一致しているような状況をイメージすればいいかな。そりゃ合わせるだろ?
PHPが初めての言語です、って奴が多いのも影響していると思う。
勿論、PHP以前に他の言語を学んでいた奴の中には別のスタイルで書く奴もいる。
俺も2番のK&Rスタイルで書くしな。
0882nobodyさん
2009/04/04(土) 02:16:56ID:???http://framework.zend.com/manual/ja/coding-standard.coding-style.html#coding-standard.coding-style.control-statements.if-else-elseif
if ($a != 2) {
$a = 2;
}
知ったか乙
0883nobodyさん
2009/04/04(土) 02:18:31ID:???悪い、寝ぼけてた。
関数定義とクラス定義の箇所を読んでたわ。
PEARもifはそのスタイルだな。
if ((condition1) || (condition2)) {
action1;
} elseif ((condition3) && (condition4)) {
action2;
} else {
defaultaction;
}
0884nobodyさん
2009/04/04(土) 02:21:18ID:???0885nobodyさん
2009/04/04(土) 02:25:13ID:???0886870
2009/04/04(土) 02:37:49ID:???【パターン@】
if( 1 == 1)
{
}
【パターンA】
if(1 == 1){
0}
の間違いです。括弧が抜けてましたね。
>>877
そう言われれば確かに勝手に整形されちゃいますね。
>>881
なる程2通りの書き方があったんですね。
いずれにせよ@番で統一されているみたいなのでちょっと安心しました。
今後も@で書いて行こうと思います。
(C#)と同じなのでこちらの方が気分的に見やすいです。
PHPでの実務経験が無いので実際の開発現場ではどちらが主に使われているのでしょうか?
0887870
2009/04/04(土) 02:39:20ID:???皆さんも↓の方が見やすくないですか?
>>883
if ((condition1) || (condition2))
{
action1;
}
elseif
((condition3) && (condition4))
{
action2;
}
else
{
defaultaction;
}
0888nobodyさん
2009/04/04(土) 02:39:35ID:???0889nobodyさん
2009/04/04(土) 02:41:13ID:???if ( (condition1) || (condition2) ) { action1; }
elseif ( (condition3) && (condition4) ) { action2; }
else { defaultaction; }
0892nobodyさん
2009/04/04(土) 02:53:10ID:???そのスタイルはないな。見づらい。
インデントスタイルでガタガタ抜かすお前にはPythonが合っていると思う。
Pythonにはどのインデントスタイルが見やすいとかいう議論が一切存在しないぞ。
0894nobodyさん
2009/04/04(土) 03:25:39ID:???本気で言ってますか?
コードを詰めまくって書くよりゆとりを持たせたコードの方が見易いし、
メンテナンス性もあがる気がするのですが。
0895nobodyさん
2009/04/04(土) 03:30:54ID:???まぁコーディングスタイルは宗教論争なんで、不毛なダケなんだけどさ。
0896nobodyさん
2009/04/04(土) 03:31:20ID:???統一させた方が見やすい
0897nobodyさん
2009/04/04(土) 04:00:44ID:???0899nobodyさん
2009/04/04(土) 05:30:26ID:???0900nobodyさん
2009/04/04(土) 05:58:30ID:???EclipseでJavaとPHPをやってる俺からいうと
if (condition) {
}
のほうが見やすい
他の人も同じようなこといってるが
最初に使い慣れたIDEの標準の補完機能によって
どちらが使いやすいか分かれるんだろう
あとはコーディング規約の問題
0901nobodyさん
2009/04/04(土) 07:35:04ID:+rg3YxkWちゃんとロックされるんですか?
同時書き込みでファイル壊れたりしませんか?
0902nobodyさん
2009/04/04(土) 07:37:06ID:???書き込みを行う関数はfwrite
0903nobodyさん
2009/04/04(土) 07:39:05ID:???0904nobodyさん
2009/04/04(土) 07:43:24ID:???ありがとうございました。
0905nobodyさん
2009/04/04(土) 11:05:08ID:UT159Z4LノートPCなので容量を抑えたいのですが、linuxしてる方でおすすめのものがございましたら教えて下さい
0907nobodyさん
2009/04/04(土) 11:42:14ID:???0908nobodyさん
2009/04/04(土) 12:46:42ID:???C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\
hogehoge.html
tomato.php
に各WEBページ(phpファイル)を置いて
http://localhost/
でアクセスしているのですが、これを
C:\Work
hogehoge.html
tomato.php
でアクセス出来る様にするにはどうすれば良いでしょうか・
※デフォルトのパスをC:\Workにしたいと思っています。
0910908
2009/04/04(土) 13:04:00ID:???ありがとうございます。
document root を
【httpd.conf】
DocumentRoot "C:/htdocs"
に変更しApacheを再起動したのですが
Web サイトによってこのページの表示を拒否されました
というエラーが出て一向にページを見る事が出来ません。
なぜでしょうか?
0911nobodyさん
2009/04/04(土) 13:13:06ID:???0913nobodyさん
2009/04/04(土) 13:43:54ID:???0914nobodyさん
2009/04/04(土) 13:58:00ID:???あとID出せよ
0915nobodyさん
2009/04/04(土) 15:00:42ID:???documentrootのディレクトリ設定のパスも書き変えないと意味ないよ
0916908
2009/04/04(土) 15:19:05ID:???>>914
IDを出す、 というのは所謂 fusianasan ですか?
>>915
ありがとうございました。
設定ファイル系を色々といじってみたところ無事動作する様になりました。
ありがとうございました。
0917nobodyさん
2009/04/04(土) 15:27:18ID:???0919nobodyさん
2009/04/04(土) 20:31:48ID:???【OS名】WindowsXP
【PHPのバージョン】php5.26
【連携ソフトウェア】mysql5
【質問内容】
セッションが破棄されるタイミングがいまいち分かりません。
セッションファイルの数を数える事により、現在サイトにアクセスしている人の
大まかな数を数えているのですが、ブラウザを終了してもセッションファイルは残ったままです。
理想を言えば、ユーザにログインボタンを押してもらい session_destroy を呼ぶ
事によりセッションファイルを削除するのが良いとは思いますが、
如何せんブラウザなのでログアウトボタンが必ず押される保障はありません。
ブラウザが閉じられてから5分したらセッションファイルを削除する、といった事は可能なのでしょうか?
通常セッションは一定時間経てば破棄されるらしいのですが、phpの場合はどこで設定すれば良いのでしょうか?
0923nobodyさん
2009/04/04(土) 21:12:45ID:???0924nobodyさん
2009/04/04(土) 21:39:31ID:???いつ消えるかはsession.gc_maxlifetimeで決まる。
集計は、閉じられた情報は取得できないので、セッション変数に「最終利用日時」を記録しておく。
画面を表示するたびにこれを更新して、集計時はその数字を見て判別する、という手がある。
例えば、5分以内にサイトにアクセスした人の人数を「現在サイトにいる人数」と見なすとかな。
ファイルだと大変なので、DBなどの集計しやすい場所にセッション情報を格納するとやりやすい。
0926nobodyさん
2009/04/04(土) 22:18:43ID:???0927920 ◆gRDEQwu9i2
2009/04/04(土) 22:21:55ID:???これの事だったんですねw
勘違いしてました。
>>923
そうですよね。
>>924
ちょっと色々といじってみます。
>>925
別に荒らしてはいない気がしますが・・・
>>926
DBにアクセス情報を記録させてそこで判定した方が確実で簡単かもしれませんね。
0928nobodyさん
2009/04/04(土) 22:25:35ID:???0929nobodyさん
2009/04/04(土) 22:34:25ID:???0931nobodyさん
2009/04/04(土) 23:03:22ID:???0932nobodyさん
2009/04/04(土) 23:06:05ID:???function ExecuteSanitizing(&$strSanitizing)
{
$strSanitizing = htmlentities($strSanitizing, ENT_QUOTES, mb_internal_encoding());
}
$str = "<b>あいうえお</b>";
$str = instance->ExecuteSanitizing($str);
echo $str;
として出力するとローカルでは文字化けしないのにさくらインターネットだと文字化けしちゃいます。
なぜでしょうか?
0933nobodyさん
2009/04/04(土) 23:26:21ID:???0934p7033-ipbfp405osakakita.osaka.ocn.ne.jp
2009/04/04(土) 23:30:26ID:UHDnoHcu0936fusianasan
2009/04/04(土) 23:40:52ID:???レス数が900を超えています。1000を超えると表示できなくなるよ。