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

【PHP】下らねぇ質問はID出して書き込みやがれ 82

レス数が950を超えています。1000を超えると書き込みができなくなります。
0001nobodyさん2009/03/09(月) 02:14:28ID:HyrthkeE
質問者はまず>>1を良く読むこと(必須!)
過去スレ、関連スレ、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を表示させること。
・解決しなくても回答をもらった場合はお礼を言うこと。
 (荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)

◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
0853nobodyさん2009/04/03(金) 15:49:16ID:???
>>851
前者でおk
08548272009/04/03(金) 16:12:12ID:???
>>852
>>853
返信ありがとうございます。
今後、配列を元に何か条件をつけるなどの機会がある場合は
関数にしておく方が好ましいという事ですね。
例文まで書いていただき本当にありがとうございました!
0855nobodyさん2009/04/03(金) 18:24:43ID:ZpjcrZDP
文字列のシングルクォーテーションのみを
エンティティに変換したいのですが、どうすればいいのでしょうか?
htmlspecialcharsはダブルクォーテーションも変換しますし・・。
0856nobodyさん2009/04/03(金) 18:32:47ID:???
vs php(VS2005評価版)でデバッグ実行しようとすると
次のエラーが出てしまいます。
何が原因なのでしょうか?

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("テスト");
?>


0857nobodyさん2009/04/03(金) 19:08:16ID:???
>>855
strtr
0858nobodyさん2009/04/03(金) 19:44:58ID:2mI6CRy6
【OS名】debian linux
【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:???
>>858
&$vのとき、参照を張るには、参照される側のアドレスが必要だから、そこで定義される。値はNULL

&$vにしなければよい。
0860nobodyさん2009/04/03(金) 20:14:47ID:???
return ''; を return $v=''; でよくね?

定義されてないからNULLだぜ?
0861nobodyさん2009/04/03(金) 20:15:15ID:2mI6CRy6
>>859
やはりそんな感じだったんですね。
関数はエラーレベルによっては出る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:???
フレームワークには用意されてたりするけどね
0865nobodyさん2009/04/03(金) 22:15:46ID:???
>>856
文字コードがUTF-8でBOMが入っているとか?
UTF-8Nにしてみたら?
0866nobodyさん2009/04/03(金) 22:53:01ID:???
>>863
> $flag = '';
> if (isset($_POST['flag'])) {
>   $flag = $_POST['flag'];
> }
自分はそうしてる
変数が増えてくるとコードがのびがちなので
三項演算子使って
$flag = isset($_POST['flag'])?$_POST['flag']:null;
といった感じにしてる
0867nobodyさん2009/04/03(金) 23:35:31ID:???
>838-840
クォートで処理していると、インジェクションが無いか処理を注視しないといけない。
プリペアドステートメントは、インジェクションが無い事が一目で分かる。
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:???
Zend_Request使えよ
0869nobodyさん2009/04/03(金) 23:49:57ID:???
宗教上の理由によりお断りします
0870nobodyさん2009/04/04(土) 01:03:53ID:???
PHPを勉強し始めたのですがphpではクラスを宣言する場合に、
public private とかって宣言する事は出来ないのでしょうか?

public class Test
{
  public function TestMessage()
  {
    print("あいうえお");
  }

}
0871nobodyさん2009/04/04(土) 01:54:48ID:???
>>870
classはできない。functionや変数は可能。
0872nobodyさん2009/04/04(土) 01:54:55ID:???
>>870
他言語の素養があるおまいさんはまずマニュアルを読みなはれ。
0873nobodyさん2009/04/04(土) 02:00:30ID:???
privateなclassってどんなん?
08748702009/04/04(土) 02:00:58ID:???
>>871
サンクス

>>872
.Net(C# / VB.net) & C++とかでこれまで開発をして来ましたが何かばれちゃいましたか。
マニュアルをちょっと読む事にします。

というより一つ疑問なんですけどC#とかC++とかだと次のパターンAでみんな記述しているのに
PHPとかだとパターンAの書き方をする人が多いのはなぜでしょうか?
C#だと今まで私が関わって来たプロジェクトは100%パターンAで記述されています。


【パターン@】
if( 1 == 1)
{

}

【パターンA】
if(1 == 1{

}
0875nobodyさん2009/04/04(土) 02:04:36ID:???
>>874
両方ともパターン1かよ
0876nobodyさん2009/04/04(土) 02:05:23ID:???
まちがえた
両方ともパターン2かよ
0877nobodyさん2009/04/04(土) 02:08:21ID:???
VisualStudioのコード補完のデフォルトがそうなってるだけだろ
JavaやPHP使いはMSみたいに無駄に行数消費するのを嫌うよ
0878nobodyさん2009/04/04(土) 02:09:00ID:???
@とAに見える俺は目がおかしい・・・?
てかA括弧閉じてないけど、スペースのことを言ってるのか・・・?
08798742009/04/04(土) 02:11:43ID:???
ああすまん俺の頭が混乱してた

>>874がどちらのこと言ってるのか良く分からないけど
俺は@はメソッドの時に使う。
一応Zendのコーディング規約に則ってやってるけど
個人の作業なら別にそんなの君の価値観でやればいいだろ
08808782009/04/04(土) 02:13:15ID:???
あああ俺は874じゃなくて878
0881nobodyさん2009/04/04(土) 02:14:37ID:???
>874
PHPの「標準」なコーディング規約には2つの流儀がある。ひとつはZend、ひとつはPEAR。
で、どっちも1番の括弧スタイルを採用してるんだ。
C++で言えば、MSDNの規約とGNUの標準スタイルが一致しているような状況をイメージすればいいかな。そりゃ合わせるだろ?
PHPが初めての言語です、って奴が多いのも影響していると思う。

勿論、PHP以前に他の言語を学んでいた奴の中には別のスタイルで書く奴もいる。
俺も2番のK&Rスタイルで書くしな。
0882nobodyさん2009/04/04(土) 02:16:56ID:???
>>881
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:???
>882
悪い、寝ぼけてた。
関数定義とクラス定義の箇所を読んでたわ。
PEARもifはそのスタイルだな。

if ((condition1) || (condition2)) {
action1;
} elseif ((condition3) && (condition4)) {
action2;
} else {
defaultaction;
}
0884nobodyさん2009/04/04(土) 02:21:18ID:???
MS厨はfunction名を大文字で始めとけ
0885nobodyさん2009/04/04(土) 02:25:13ID:???
classの修飾子にはpublic、final、abstractが使えるよ
08868702009/04/04(土) 02:37:49ID:???
>>878 >> 879 >> 880

【パターン@】
if( 1 == 1)
{

}

【パターンA】
if(1 == 1){

0}

の間違いです。括弧が抜けてましたね。


>>877
そう言われれば確かに勝手に整形されちゃいますね。

>>881
なる程2通りの書き方があったんですね。
いずれにせよ@番で統一されているみたいなのでちょっと安心しました。
今後も@で書いて行こうと思います。
(C#)と同じなのでこちらの方が気分的に見やすいです。

PHPでの実務経験が無いので実際の開発現場ではどちらが主に使われているのでしょうか?

08878702009/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; }
0890nobodyさん2009/04/04(土) 02:48:19ID:???
>>889
うげぇー
0891nobodyさん2009/04/04(土) 02:51:50ID:???
>>889
オナニーコード
0892nobodyさん2009/04/04(土) 02:53:10ID:???
>887
そのスタイルはないな。見づらい。

インデントスタイルでガタガタ抜かすお前にはPythonが合っていると思う。
Pythonにはどのインデントスタイルが見やすいとかいう議論が一切存在しないぞ。
0893nobodyさん2009/04/04(土) 03:03:22ID:???
>>887
視点移動が多くなって見づらい
0894nobodyさん2009/04/04(土) 03:25:39ID:???
>>892 >>893
本気で言ってますか?
コードを詰めまくって書くよりゆとりを持たせたコードの方が見易いし、
メンテナンス性もあがる気がするのですが。
0895nobodyさん2009/04/04(土) 03:30:54ID:???
それはひらがなだけで書かれた文章の方が読みやすいってのと同じレベルの主張だと思う。
まぁコーディングスタイルは宗教論争なんで、不毛なダケなんだけどさ。
0896nobodyさん2009/04/04(土) 03:31:20ID:???
ZendとかPEARとか使ってるなら、逆効果だろ
統一させた方が見やすい
0897nobodyさん2009/04/04(土) 04:00:44ID:???
見やすいのはいいけどスクロールしないと下のほうが見えなくなるのが無理
0898nobodyさん2009/04/04(土) 04:11:29ID:???
>>887
そんなとこより括弧と条件式の間のスペースを空けろってな
0899nobodyさん2009/04/04(土) 05:30:26ID:???
オレ竜で書くのがいちばんさ
0900nobodyさん2009/04/04(土) 05:58:30ID:???
>>887
EclipseでJavaとPHPをやってる俺からいうと
if (condition) {
}
のほうが見やすい
他の人も同じようなこといってるが
最初に使い慣れたIDEの標準の補完機能によって
どちらが使いやすいか分かれるんだろう
あとはコーディング規約の問題
0901nobodyさん2009/04/04(土) 07:35:04ID:+rg3YxkW
fopenってロックの引数がないんですが
ちゃんとロックされるんですか?
同時書き込みでファイル壊れたりしませんか?
0902nobodyさん2009/04/04(土) 07:37:06ID:???
fopenはリソースを指定してるだけ
書き込みを行う関数はfwrite
0903nobodyさん2009/04/04(土) 07:39:05ID:???
マニュアルのちょっと上にflockってあるだろ
0904nobodyさん2009/04/04(土) 07:43:24ID:???
ロックは別にするんですね
ありがとうございました。
0905nobodyさん2009/04/04(土) 11:05:08ID:UT159Z4L
winでは動かない関数があるのでこのさい仮想マシン上にlinuxを入れることにしました
ノートPCなので容量を抑えたいのですが、linuxしてる方でおすすめのものがございましたら教えて下さい
0906nobodyさん2009/04/04(土) 11:16:09ID:???
俺、クラスや関数は>>874でいう@、条件文なんかはAで書いてる・・・・
0907nobodyさん2009/04/04(土) 11:42:14ID:???
@の書き方って、昔ならではのC言語の関数書くときの引数の型宣言の名残なのかね
0908nobodyさん2009/04/04(土) 12:46:42ID:???
現在Apache+PHP5+MySQL5を使用してWEBサイトを作る練習をしているのですが、

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にしたいと思っています。
0909nobodyさん2009/04/04(土) 12:47:32ID:???
php関係ない
apacheのdocument root
あと>>1
09109082009/04/04(土) 13:04:00ID:???
>>909
ありがとうございます。

document root を
【httpd.conf】
DocumentRoot "C:/htdocs"
に変更しApacheを再起動したのですが
Web サイトによってこのページの表示を拒否されました
というエラーが出て一向にページを見る事が出来ません。
なぜでしょうか?
0911nobodyさん2009/04/04(土) 13:13:06ID:???
ファイルをC:/Workにおいてるのになんでhttpd.confのほうは「C:/htdocs」にしたん?
0912nobodyさん2009/04/04(土) 13:41:34ID:???
>>910
>>1読め糞野郎
0913nobodyさん2009/04/04(土) 13:43:54ID:???
ていうかPHP関係ないって言ってんだろカス
0914nobodyさん2009/04/04(土) 13:58:00ID:???
DocumentRoot を C:/Work にすればいいんじゃねーの。
あとID出せよ
0915nobodyさん2009/04/04(土) 15:00:42ID:???
documentrootだけ変えても意味ないよ
documentrootのディレクトリ設定のパスも書き変えないと意味ないよ
09169082009/04/04(土) 15:19:05ID:???
>>911 ファイルは、C:/htdocsに配置しました。

>>914
IDを出す、 というのは所謂 fusianasan ですか?

>>915
ありがとうございました。

設定ファイル系を色々といじってみたところ無事動作する様になりました。
ありがとうございました。
0917nobodyさん2009/04/04(土) 15:27:18ID:???
ルールも守れないような奴は二度と来んな
09188582009/04/04(土) 15:39:59ID:Q5CHJrya
遅レスすみません。
>>866>>867氏他皆様ありがとうございます。
いろいろ試してみたいと思います。
0919nobodyさん2009/04/04(土) 20:31:48ID:???
慇懃無礼なやつだなw
0920220x151x2x6.ap220.ftth.ucom.ne.jp2009/04/04(土) 20:44:31ID:???
◆質問用テンプレ
【OS名】WindowsXP
【PHPのバージョン】php5.26
【連携ソフトウェア】mysql5
【質問内容】
セッションが破棄されるタイミングがいまいち分かりません。
セッションファイルの数を数える事により、現在サイトにアクセスしている人の
大まかな数を数えているのですが、ブラウザを終了してもセッションファイルは残ったままです。

理想を言えば、ユーザにログインボタンを押してもらい  session_destroy を呼ぶ
事によりセッションファイルを削除するのが良いとは思いますが、

如何せんブラウザなのでログアウトボタンが必ず押される保障はありません。
ブラウザが閉じられてから5分したらセッションファイルを削除する、といった事は可能なのでしょうか?

通常セッションは一定時間経てば破棄されるらしいのですが、phpの場合はどこで設定すれば良いのでしょうか?
0921nobodyさん2009/04/04(土) 20:48:04ID:???
>>920
>>1
0922nobodyさん2009/04/04(土) 21:11:33ID:???
>>920
頑張ってfusianasanしたのはいいんだが君が表示してるのはIPだ
IDを出してくれたまえ
0923nobodyさん2009/04/04(土) 21:12:45ID:???
ID出てないが一応マジレスするとブラウザが閉じられたという情報は送られません
0924nobodyさん2009/04/04(土) 21:39:31ID:???
ttp://jp2.php.net/manual/ja/session.configuration.php
いつ消えるかはsession.gc_maxlifetimeで決まる。

集計は、閉じられた情報は取得できないので、セッション変数に「最終利用日時」を記録しておく。
画面を表示するたびにこれを更新して、集計時はその数字を見て判別する、という手がある。
例えば、5分以内にサイトにアクセスした人の人数を「現在サイトにいる人数」と見なすとかな。
ファイルだと大変なので、DBなどの集計しやすい場所にセッション情報を格納するとやりやすい。
0925nobodyさん2009/04/04(土) 22:06:27ID:???
>>924
荒らすな
0926nobodyさん2009/04/04(土) 22:18:43ID:???
俺はセッション使わないでアクセスログでオンラインカウンターをやってる
0927920 ◆gRDEQwu9i2 2009/04/04(土) 22:21:55ID:???
>>922
これの事だったんですねw
勘違いしてました。

>>923
そうですよね。


>>924
ちょっと色々といじってみます。

>>925
別に荒らしてはいない気がしますが・・・

>>926
DBにアクセス情報を記録させてそこで判定した方が確実で簡単かもしれませんね。
0928nobodyさん2009/04/04(土) 22:25:35ID:???
死ねカス
0929nobodyさん2009/04/04(土) 22:34:25ID:???
春だなw
0930nobodyさん2009/04/04(土) 22:34:35ID:???
>>927
まじれすすると、それはトリップ
ID表示はメール欄を空白にするかageと書く
0931nobodyさん2009/04/04(土) 23:03:22ID:???
てst
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.jp2009/04/04(土) 23:30:26ID:UHDnoHcu
私を笑いものにするがいい
0935nobodyさん2009/04/04(土) 23:40:07ID:???
>>932
>>1
0936fusianasa‎n2009/04/04(土) 23:40:52ID:???
俺はfusianasanを制御できるから書きこんでもIP表示されないんだけどさ
0937nobodyさん2009/04/04(土) 23:43:27ID:???
>>936
それってどうやってやってんの?
0938f‎usianasan2009/04/04(土) 23:46:28ID:???
>>937
いや、おれ2ちゃんのボランティアやってるからこのぐらいの特権は持ってるよ
0939nobodyさん2009/04/04(土) 23:48:52ID:???
f&lrm;usianasan
なにがボランティアだつまらん
0940nobodyさん2009/04/04(土) 23:52:00ID:???
釣れたw
0941f&lrm;usianasan2009/04/04(土) 23:57:19ID:???
テスト
0942f‎usianasan2009/04/04(土) 23:58:04ID:???
>>939
どうすれば出来るですか?

あいうえお
0943f‎usianasan2009/04/05(日) 00:00:02ID:???
てす
0944nobodyさん2009/04/05(日) 00:06:15ID:???
>>932
ローカルとさくらのphp.iniのmbstringの設定が違う
0945nobodyさん2009/04/05(日) 00:30:10ID:???
>>901
fopenはファイルのポインタを獲得するだけ。
ロックはその後で、別の関数で行う。
0946nobodyさん2009/04/05(日) 00:31:03ID:???
http://ameblo.jp/tondemonight/entry-10178347889.html
クラスメソッドをabstractにしようと思いまして、abstractをつけて関数定義したところ、以下のようなエラー。

Class SampleClass contains 1 abstract method and must therefore be declared abstract or implement the remaining methods

エラーの原因がわからず、30分も調べてしまいました。
原因はclassの定義で本来なら「abstract class SampleClass」 としなくてはいけないところを
「class SampleClass」と定義していたことでした。

エラーメッセージからでは気づきにくいことでした・・・

だとさ
0947nobodyさん2009/04/05(日) 00:42:58ID:???
ポインタって言うな
0948nobodyさん2009/04/05(日) 00:45:11ID:???
SampleClassには1つのabscractメソッドが含まれます。
だからこのクラスはabstractとして宣言されるか、残りのメソッドを実装しなければいけません。

このメッセージで分かりづらいってなら、どう出せばいいんだろう。
0949nobodyさん2009/04/05(日) 00:48:33ID:???
MSもSUNもやってるんだから
ZendJapanもエラーメッセージを日本語化すべきだな
0950nobodyさん2009/04/05(日) 01:35:51ID:???
日本語化したら分かるんかい?
0951nobodyさん2009/04/05(日) 02:02:56ID:???
>>944
ありがとうございます。ローカルのphp.iniと設定をあわせたところ
正常に表示される様になりました。

ちょっとphp.iniについて質問があるのですが
ローカルだと
C:\WINDOWS\php.ini
という具合にphp.iniファイルを配置しているのですが
レンタルサーバ(さくらインターネット)の場合には
/home/street-fighter/www/php.ini
という具合にphp.iniを自前で用意するのが普通なのでしょうか?

※今後、さくらインターネット以外のサーバを借りるかもしれないのですが、
さくらインターネット以外の場合にも、*/www/直下にphp.iniファイルは保存
するのでしょうか?

/home/street-fighter/www/php.ini

0952nobodyさん2009/04/05(日) 02:07:24ID:???
>>951
自分が借りているレンタルサーバーの場合、

(1)そもそもユーザーがphp.iniを編集できない
(2)php.iniがpublic_htmlの外に置いてあった

この2パターンがありました。
レス数が950を超えています。1000を超えると書き込みができなくなります。