【PHP】下らねぇ質問はID出して書き込みやがれ 96
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2010/05/28(金) 16:33:44ID:???過去スレ、関連スレ、FAQなどは>>2-10辺り
次スレは>>980が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。
◆前スレ
【PHP】下らねぇ質問はID出して書き込みやがれ 95
http://pc11.2ch.net/test/read.cgi/php/1271636105/
◆質問用テンプレ
【OS名】CentOS
【PHPのバージョン】5.3
【連携ソフトウェア】MySQL ImageMagick
【質問内容】
◆質問する時の注意
・ スレを上げて自分のIDを表示させること。(メール欄に何も記述しない。専ブラのsageチェックを外す)
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に関連リンクの公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
(PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。)
◆質問後の注意
・2回目以降は最初に質問した際のレス番号を入れて、偽者防止に必ずIDを表示させること。
・解決しなくても回答をもらった場合はお礼を言うこと。
(荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)
◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
【その他諸注意】
・SQL・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
0086nobodyさん
2010/06/02(水) 16:38:16ID:???無理、といいたいところだけど、そういうActiveX作って、PHPでそれを使うフレームを出力すればいけるのかも
0087nobodyさん
2010/06/02(水) 16:44:12ID:1gJ1/kVuそういう優先順位になってるんですね。
http://ameblo.jp/hyperdev/entry-10345093485.html
上のページを見てやってみたんですが、
「php.iniに設定した、ガベージコレクタの時間より大きくなる場合が多い」というのを防ぐために
ini_set("session.gc_maxlifetime", 18000);
っていう一行を入れてるみたいなので、問題はApacheとOSの設定ってことですかねぇ。
でも、昨日2のファイルに設定した直後はちゃんと有効だったのは何だったんだろう…。
0088nobodyさん
2010/06/02(水) 17:41:42ID:???>>75
ありがとうございます。
おっしゃられてる方法でわかったつもりで、
以下を書くとエラーで怒られてしまいました・・・。
print '<a href='."$_SERVER['PHP_SELF']".'> 削除 </a>';
ほんとは上の文章が動作していたら、
?をつけてGetで変数を送りたいのですが、
?をつける以前につまづいてしまいました・・・
お助けください。
0089nobodyさん
2010/06/02(水) 17:55:17ID:???print '<a href=' . $_SERVER['PHP_SELF'] . '> 削除 </a>';
あと$_SERVER['PHP_SELF']の部分がソース名(php名)をひっぱってきたいだけなら
$_SERVER['SCRIPT_NAME']を使った方が良い
0090nobodyさん
2010/06/02(水) 18:29:44ID:???$_SERVER['PHP_SELF'] ←これもの中身も文字列
文字列同士を結合するために . (ドット)を使われるんだよ。
正しく書くと、
print '<a href=" . $_SERVER['PHP_SELF']. "> 削除 </a>';
となる。
hrefのクォートはシングルじゃなくてダブルね。
というか、リンク先を自分と同じスクリプトにするなら $_SERVER['PHP_SELF'] すら要らんよね。
クエリ文字を付けたリンクにしたいなら↓こんな感じ。
print '<a href="?del=1"> 削除 </a>';
あと余談だけど、ダブルクォーテーションの中に変数を入れる場合は
変数を { } で囲む癖をつけておいたほうがいいよ。
009190訂正
2010/06/02(水) 18:56:09ID:???これもの中身も文字列
↓
これの中身も文字列
文字列同士を結合するために . (ドット)を使われるんだよ。
↓
文字列同士を結合するために . (ドット)が使われるんだよ。
print '<a href=" . $_SERVER['PHP_SELF']. "> 削除 </a>';
↓
print '<a href="' . $_SERVER['PHP_SELF']. '"> 削除 </a>';
hrefのクォートはシングルじゃなくてダブルね。
↓
href=の後のクォートはシングルじゃなくてダブルね。
0093nobodyさん
2010/06/02(水) 22:14:08ID:D8F23o+y何で変数を{}で囲まないといけないんですか?
0094nobodyさん
2010/06/02(水) 22:39:11ID:???0098nobodyさん
2010/06/02(水) 23:02:05ID:???>>94の言うとおり、わかりやすいっていうのが理由の一つ。
あと、{ } を付ければ前後にスペースがいらない。
例えば、次の3つを比較するとわかる。
(1) echo "ab $text cde";
(2) echo "ab$textcde";
(3) echo "ab{$text}cde";
1はOKだけど、出力結果にもスペースが入ってしまう。
2は不可。
3はOKで、スペースも入らない。
あと、速度も違うんだけど、このことはあまり知られてないのかなぁ。
ちなみに、配列でキー名に ' ' を付けるのと付けないのも速度に差が出る。
009998
2010/06/02(水) 23:03:54ID:???2は不可っていうか、エラーにはならないけど期待する表示にならないってことね。
0100nobodyさん
2010/06/02(水) 23:27:40ID:???ダブルクォートとシングルクォートを使うとでも速度は違うね。
0103nobodyさん
2010/06/02(水) 23:57:58ID:yUWMqjwoTRUE判定させるにはどうしたらいいですか?
while($num=strpos(゙あかあおしろ゙,゙あが,0))
)
で一番最初の文字列にヒットした場合弾かれてしまいます。
何かいい解決法があれば、どうかご教示をお願いします。
0104nobodyさん
2010/06/03(木) 00:03:18ID:???while (($num = strpos('あかあおしろ', 'あか', 0)) !== false) {}
0106nobodyさん
2010/06/03(木) 01:25:57ID:???>>91
ありがとうございます。
print '<a href="'.$_SERVER['PHP_SELF'].'"> 削除 </a>';
は無事動きました。
href="
の部分のダブルクオテーションは文字という考え方ということですよね?
なので、
'<a href="'
という、シングルクオテーションで囲まれている
<a href="
が文字と言う考え方であってますでしょうか?
次に、変数を""というダブルクオテーションで囲むと、
その囲まれてる変数は展開されるという認識の下、以下にしてみるとダメでした。
print '<a href="'."$_SERVER['PHP_SELF']".'"> 削除 </a>';
今回、a href=の後のクオートがもともとのHTMLの仕様では、
ダブルクオテーションであり、そのあとに、変数を囲むダブルクオテーションが続くと
何か問題が出てしまうのでしょうか?
さらに、{}で変数を囲めるということでためしてみました。
print '<a href="'{$_SERVER['PHP_SELF']}'"> 削除 </a>';
も、
print '<a href="'.{$_SERVER['PHP_SELF']}.'"> 削除 </a>';
も動きませんでした。
書き方がまちがっていますでしょうか?
0107nobodyさん
2010/06/03(木) 01:26:34ID:???HTMLの中に書くって事でスタートしてるからこうなってるんだと思うよ
つまりビュー層のハナシ
zend のコーディング規約でもシングルクオートで変数は連結しろとかなかったっけ?
他言語の使い手にも読みやすいって事まで考えてそうなってると思うんだけどな
0108nobodyさん
2010/06/03(木) 01:35:04ID:???<a href="
が文字と言う考え方であってますでしょうか?
あってる
print '<a href="'."$_SERVER['PHP_SELF']".'"> 削除 </a>';
では,"$_SERVER['PHP_SELF']" のパースができない(だったような
print '<a href="' . "{$_SERVER['PHP_SELF']}" . '"> 削除 </a>';
なら動くと思う。
素直に
print '<a href="' . $_SERVER['PHP_SELF'] . '"> 削除 </a>';
でいいじゃんかよ
ちゃんとエスケープもしろよ?歯も磨けよ?
0109nobodyさん
2010/06/03(木) 01:35:14ID:???> '<a href="'
> という、シングルクオテーションで囲まれている
> <a href="
> が文字と言う考え方であってますでしょうか?
あってる。
> 次に、変数を""というダブルクオテーションで囲むと、
> その囲まれてる変数は展開されるという認識の下、以下にしてみるとダメでした。
> print '<a href="'."$_SERVER['PHP_SELF']".'"> 削除 </a>';
print '<a href="'."{$_SERVER['PHP_SELF']}".'"> 削除 </a>';
にしてみて。
> print '<a href="'{$_SERVER['PHP_SELF']}'"> 削除 </a>';
.が無いし、{}が不要。
> print '<a href="'.{$_SERVER['PHP_SELF']}.'"> 削除 </a>';
{}が不要。
0110nobodyさん
2010/06/03(木) 01:36:35ID:???$_SERVER['PHP_SELF']はセキュリティ上の問題があるのでHTMLとして出力する物には使わない
$_SERVER['SCRIPT_NAME']またはbasename(__FILE__)で代用
0111nobodyさん
2010/06/03(木) 01:40:41ID:???<a href=""> 削除 </a>
でいけるやん
0112nobodyさん
2010/06/03(木) 03:47:38ID:???0113nobodyさん
2010/06/03(木) 05:12:55ID:???//ダブルの場合
echo "こんにちわ、{$name}さん。";
//シングルの場合
echo 'こんにちわ、' . $name . 'さん。';
0114nobodyさん
2010/06/03(木) 05:28:29ID:XbPCpr1kありがとうございます。
もうひとつお伺いしたいのですが、文字列の指定位置に文字列を挿入する場合の関数はありますか?
substr_replaceの使用を考えたのですが、置き換え文字数を0に指定するとうまくいきません。
1以上にして置き換え後の文字列に消した文字を含ませるのもスマートではない気がします。
どうかよろしくお願いします。
0116nobodyさん
2010/06/03(木) 07:28:03ID:???0117nobodyさん
2010/06/03(木) 07:36:18ID:LdZGbuVn文字化けせずに表示できているのはどういった仕組みなのでしょうか。
よろしくお願いいたします。
0119nobodyさん
2010/06/03(木) 08:12:37ID:LdZGbuVnmb_convert_encoding autoとかででしょうか?
0120nobodyさん
2010/06/03(木) 08:26:57ID:???0122nobodyさん
2010/06/03(木) 12:10:17ID:???おめ。
どうやって勉強してるかわからないけど、
今の知識だとセキュリティ対策が十分にできないと思うから
本とか読んで学んだほうがいいよ。
0123nobodyさん
2010/06/03(木) 15:18:39ID:???元の質問者とは別人ですが、便乗して質問させてください
$_SERVER['PHP_SELF']より$_SERVER['SCRIPT_NAME']のほうが安全ということですが、
$_SERVER['SCRIPT_NAME']を使ってもエスケープは必要なんでしょうか?
0125nobodyさん
2010/06/03(木) 16:51:43ID:???なぜ危険/安全なのか理解してる?
「php_self script_name」で検索すれば比較してるサイトがいっぱいでてくるよ
0126nobodyさん
2010/06/03(木) 16:55:55ID:???>第1章 総論
>より良いWebアプリケーション設計のヒント
>(1) プログラミング言語の選択
>1) 例えば、PHPを避ける
0127nobodyさん
2010/06/03(木) 17:15:09ID:???> 誰にレスをしたんだ?
主に>>108の「ちゃんとエスケープもしろよ」へのレスです。
>>125
はい、$_SERVER['PHP_SELF']のほうをそのまま出力すると
JavaScriptを仕込まれてしまう可能性があるということですよね?
なので、エスケープする理由はわかります。
お尋ねしたいのは、_SERVER['SCRIPT_NAME']でもエスケープする必要があるのかということです。
SCRIPT_NAMEにはPHP_SELFのようなXSSの脆弱性はないと思ってたんですが、
何か特殊な方法による攻撃の対象になることがあるんでしょうか?
0128nobodyさん
2010/06/03(木) 17:55:31ID:???http://www.php.net/manual/ja/reserved.variables.server.php
'PHP_SELF'
現在実行しているスクリプトのファイル名です。
ドキュメントルートから取得されます。
例えば、http://example.com/test.php/foo.bar というアドレス上にあるスクリプトでは
$_SERVER['PHP_SELF'] は /test.php/foo.bar となります。
'SCRIPT_FILENAME'
現在実行されているスクリプトの絶対パス
0129nobodyさん
2010/06/03(木) 17:57:58ID:OUHRb8myクライアントにバイナリデータを送るときに
fopenとfreadをとechoを使ってるんですが、
クライアント側からはバイナリデータが壊れていると
言われたりしています。
freadってバイナリセーフな関数なんですよね?
何か他に注意すべきところがありますか?
0131nobodyさん
2010/06/03(木) 18:13:58ID:iSHgRF9v.soをextension_dirで登録する動的?タイプのモジュール。
後者はコンパイルなんかのコスト分遅いっていう認識はあってますか?
0132nobodyさん
2010/06/03(木) 18:15:38ID:iSHgRF9v○前者はコンパイルなんかのコスト分遅いっていう認識はあってますか?
×後者はコンパイルなんかのコスト分遅いっていう認識はあってますか?
0135nobodyさん
2010/06/03(木) 20:02:16ID:???requireやincludeは外部ファイルのスクリプトを読み込むもの。
extension_dirなどの拡張モジュールは、
Cなどの低級言語で書かれているのでPHPより高速で、当然にコンパイルされているので速い。
0136nobodyさん
2010/06/03(木) 20:22:42ID:???PHPスクリプトにBOMが付いてないかい
こういう問題はHTTPをモニタリングするツールを入れて
実際に送られたヘッダとデータを確認するのがいいんだが
0137nobodyさん
2010/06/03(木) 21:00:55ID:???先ほど自己解決しました。
おそらく・・なんですが。
サーバ側のファイルとクライアントでダウンロードしたファイルを
比較したところ、クライアント側には行頭に改行コードが入ってました。
そのせいでファイルサイズも1バイト分差異がありました。
対策としてサーバ側のスクリプトファイルの
不要な改行コードを削除しました。
<?
--色々なロジック--
?>
←この辺りの不要な改行コードを削除。
そうしたところ、こちらが意図するとおりにファイルを
送ることが出来ました。
どうもありがとうございました。
0139nobodyさん
2010/06/03(木) 21:30:19ID:???ttp://jp2.php.net/manual/ja/function.php-sapi-name.php
0140nobodyさん
2010/06/03(木) 21:56:52ID:???XML吐く時に同じ事食らったよ
以来終了タグ ?> は書かなくなった
zend framework のコーディング規約でも書くなってなってる
0142nobodyさん
2010/06/04(金) 02:08:52ID:???コード補完してくれて,定義済みのうユーザー定義関数もアシストしてくれるような定番があれば是非知りたいです
MySQLのクエリも同時に書くのでそれも補完アシストしてくれたりしたら最高ですがそんなのってあるんでしょうか?
開発効率が格段にあがるのでしたら有料でも全然かまいませんので お願いします
ちなみに今は秀丸で書いてます
0143nobodyさん
2010/06/04(金) 02:19:59ID:???0144nobodyさん
2010/06/04(金) 02:26:29ID:???0145nobodyさん
2010/06/04(金) 02:36:38ID:???早いうちから使っといた方がいいよ
秀丸でもマクロで多少のカスタムはできるんじゃなかったっけ
使ったことないから知らないけど
0146nobodyさん
2010/06/04(金) 02:51:45ID:???デバッグまでする場合 netbeans
0147nobodyさん
2010/06/04(金) 03:35:38ID:???0149nobodyさん
2010/06/04(金) 10:31:22ID:???たしかにzend frameworkには?>が書かれていないですね。
規約だったとは・・・。
ということは、皆さんの開発現場でも
?>は書かないようにされているのでしょうか?
?>を書かないことでのデメリットはないのでしょうか?
もしデメリットがあればそれを認識した上で
私も活用したいと考えておりますので
教えていただけないでしょうか。
0150nobodyさん
2010/06/04(金) 10:48:26ID:???書いてはいけない理由はこのあたりを参考に
http://d.hatena.ne.jp/fbis/20090716/1247714151
http://d.hatena.ne.jp/Kiske/20100128/1264643384
0151nobodyさん
2010/06/04(金) 10:53:50ID:???ありがとうございます。
拝見いたしました。
色々と危険があるようですね。
今回私もそれで苦労したので、
ひとまず、?>は削除したいと思います。
0152nobodyさん
2010/06/04(金) 10:55:12ID:???0153nobodyさん
2010/06/04(金) 11:06:10ID:???【PHPのバージョン】5.2
クラスの静的メンバに設定ファイル(xml)を読み込みたいのですが、
Javaでいう static句 みたいなものってあるのでしょうか?
静的関数にして初回時に読み込むみたいな処理にすれば
実現はできるなーと思っているのですが。
よろしくお願いします。
0154nobodyさん
2010/06/04(金) 14:21:33ID:???NetBeans6.9 Betaを導入してみました
ですが、これまで作っていたPHPファイルの
日本語によるコメント部分がすべて文字化けします。
NetBeans上で文字を打ち直して保存して、
それを今度テキストエディタで開くと、
今度はテキストエディタの表示が文字化けしているという状態です。
PHPの文字コードは
UTF-8のBOM無し
で開発したらいいのでしょうか。
根本的なところでミスってますか?
0155nobodyさん
2010/06/04(金) 14:38:19ID:???スタティックなメンバは「PHP static」とかでググればすぐ見つかるはずだけど、
初回時ってどういうこと?
コンストラクタを使うのとは意味が違うの?
あとスレタイ読んでね。
0157nobodyさん
2010/06/04(金) 14:54:59ID:???PHPはBOM付きはダメだと俺は認識してた。
BOM付きのスクリプトでHTMLを出力すると崩れたりすると思う。
BOMを消したらNetBeans 6.9 Betaの文字化けしないかどうかは知らないけど。
それより、6.9はひと月ほど前に使ったらめっちゃ不安定だったけど
もうだいぶ改善されてるのか?
正式版の時期が近づいてるから、そろそろ良くなってなきゃまずい頃だとは思うが。
0158nobodyさん
2010/06/04(金) 15:04:56ID:AnXEBzRW0159nobodyさん
2010/06/04(金) 15:09:53ID:???http://www.google.co.jp/
0160158
2010/06/04(金) 15:12:27ID:???PHPのリフレクションを使って、どうやってクラス毎のメソッド一覧、シグネチャ一覧を取得できますか?
0163nobodyさん
2010/06/04(金) 15:21:59ID:???http://www.php.net/manual/ja/book.reflection.php
0164nobodyさん
2010/06/04(金) 15:35:00ID:???単純に、ファイルの文字コードとエディタの文字コードが違うんじゃないか?
上書き保存じゃなくて変換とかすればできるはず
0166nobodyさん
2010/06/04(金) 22:05:06ID:???プロジェクトのプロパティに文字コードの設定がある
netbeans は指定の文字コードで読もうとするので
プロジェクト内は統一する必要がある
変換もできないので他のエディターで変更しとかないといけない
0168nobodyさん
2010/06/04(金) 23:40:28ID:???> PHPの文字コードは
> UTF-8のBOM無し
> で開発したらいいのでしょうか。
うん、それでいいよ。
PHPの設定も一応見直すとよいです。
なんか的外れなレスが多くね?
0169nobodyさん
2010/06/04(金) 23:48:40ID:XmC1Ur85【PHPのバージョン】5.2
CORESERVERを使用しています。
DB使わずにファイルでデータを管理しているのですが、
ファイルロックの方法が間違っているのかデータが飛びまくって困っています。
上書きする際の流れは
・ロック用ファイルをwでオープン
・ロック用ファイルを排他ロック
・変更ファイルをrでオープン
・共有ロック
・データを変数に格納&指定部分を変更
・ファイルロック解除
・ファイルクローズ
・変更ファイルをwでオープン
・排他ロック
・さっきの変数をfwriteで上書き
・ファイルロック解除
・ファイルクローズ
・ロック用ファイルのロックを解除
・ロック用ファイルをクローズ
って感じです。
他にも同じファイルを呼び出す処理がいくつかあって、
それらではrのときは共有ロック、aのときは排他ロックをかけています。
ご指摘お願いします。
ソース必要でしたら貼ります。
0170nobodyさん
2010/06/05(土) 00:03:29ID:UzvzEjBpHTMLで以下のコード書いてみた。
<form method="GET" action="index.php?sex=man">
<input type=hidden name=myname value="maiko">
<input type=submit value="regist">
</form>
このフォームだと、myname="maiko"はサーバに渡るんだけど、
actionに指定しているsex=manの部分がサーバにわたらない。
method="POST"の場合だと、両方サーバにわたるんだけど、
なんで駄目なんでしょうか?
htmlの仕様?
0171nobodyさん
2010/06/05(土) 00:33:54ID:???0172nobodyさん
2010/06/05(土) 00:34:22ID:???うん。君が的外れ。
>>169
PHPのファイルロックはダメダメ
アクセスカウンターが飛ぶとか過去スレ(かなり前)にあったと思う
ロック用のディレクトリやファイルを使ったりしてる人もいる
よく読んでないけど設計は合ってると思う
>>170
ブラウザのアドレス見たら分からんかな
0173nobodyさん
2010/06/05(土) 00:35:42ID:WrJc7rsMすみません、文字コードのことで困っています。
今現在、外部ファイルを読み込むプログラムを作成しているのですが、
一部の文字コードにおいて文字化けが発生してしまいます。
UTF-8 => o, EUC-JP => x
具体的には、片方の文字コードにしか対応できないということです。
EUC-JPに対応させようとしたら、今度はUTF-8が駄目に。。。
php.ini の設定内容についてアドバイスもらえると助かります。
よろしくお願いします。
0175173
2010/06/05(土) 00:41:13ID:WrJc7rsMどうもありがとうございます。
対象の外部ファイルについてですが、任意の一般的なサイトです。
また、日本語については全て化けてしまっています。
自動的に文字コードを判別して切り替えることはできないでしょうか?
0176nobodyさん
2010/06/05(土) 00:48:46ID:???「PHPの文字コードはUTF-8のBOM無しで開発したらいいのでしょうか。」とか
「根本的なところ」とか聞かれてるんだから、>>157と>>168が的確なレスでしょ。
文字コードの変換方法やNetBeansの設定が知りたいわけじゃないと思う。
0177173
2010/06/05(土) 01:04:39ID:WrJc7rsM下らねぇ質問失礼しました。
0178nobodyさん
2010/06/05(土) 01:09:02ID:???mb_detect_order でぐぐってみてくれ。
>>176
問題はdocblockの文字化けじゃないの?
そらすまんかった
0179nobodyさん
2010/06/05(土) 02:53:33ID:???読み込みと書き込みの間でトランザクションが途切れているのが不整合の原因
$f = fopen('file', 'r+');
if (!flock($f, LOCK_EX)) die 'ロックできなかった';
/* ここで読み込み&書き込み */
fclose($f);
flock($f, LOCK_UN) は書き込みバッファの関係上、理由がなければ使わない
flock()自体はシステムコールのflock(),fcntl(),LockFileEx()を呼んでるだけなので
よっぽど古いファイルシステムや処理系じゃなきゃ信頼していい
0180179
2010/06/05(土) 03:04:11ID:???1行目の指摘は無視してくれ
0181nobodyさん
2010/06/05(土) 03:07:11ID:???別にBOMつきのエンコードでうまく動作するなら文字化けの対処方法を書いてもいいよ。
けどそれじゃだめじゃん。
0182nobodyさん
2010/06/05(土) 05:26:44ID:???ロックファイルは存在してるかどうかだと思ってたんだが
file_exsists で true なら待機みたいな
0183nobodyさん
2010/06/05(土) 05:33:06ID:???0184nobodyさん
2010/06/05(土) 05:34:29ID:???UTF8Nはいいけど彼の文字化けはどうすんだよw
つまり >>164 だろ
PHPの設定とか完全に意味不明
■ このスレッドは過去ログ倉庫に格納されています