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

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

■ このスレッドは過去ログ倉庫に格納されています
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を表示させること。
・解決しなくても回答をもらった場合はお礼を言うこと。
 (荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)

◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
0574nobodyさん2009/03/23(月) 22:33:45ID:???
連続書き込みスマソ

>>573訂正
じゃないと、ID(もしくはメールアドレス)を更新する際に、'<'が'&lt;'って保存されてしまうからっていうことかな。
0575nobodyさん2009/03/23(月) 22:38:01ID:???
そうやって保存されてしまうからっていうのと、
保存されてしまうことによって再利用するとき不便になるからだね
0576nobodyさん2009/03/23(月) 22:58:16ID:???
test
0577nobodyさん2009/03/23(月) 23:07:14ID:???
>>575
なるほど、いい勉強になった。
ありがとう。
0578nobodyさん2009/03/23(月) 23:45:08ID:uVBii4+5
サーバを再起動したらapacheのerr.logに
PHP Warning: PHP Startup: Unable to load dynamic library 'C:\\PHP\\ext\\php_curl.dll'
と同じようなログがたくさん出ます。
でも、該当のファイルは存在します
何が原因でしょうか?
0579nobodyさん2009/03/23(月) 23:53:02ID:???
>>573-575
でもさ、ID・メールアドレスを更新する時に<を使う場合ってあるの?
IDはだいたい半角英数字だし、メールアドレスもそうでしょ?
0580nobodyさん2009/03/24(火) 00:01:55ID:???
どこでサニタイズするかは勝手だが、
100%ってことはないので出口でサニタイズしろってエロい人が言ってた
0581nobodyさん2009/03/24(火) 00:17:34ID:???
サニタイズニダ!
0582nobodyさん2009/03/24(火) 00:41:05ID:???
>>578
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:???
すいません。PHP勉強して半年になります。順調に進んでいたのですが
echo $a[0] = 'aaa';
echo $a[0][0] = 'news';
こうすると、なぜかバグルのですが、なぜですか?
0584nobodyさん2009/03/24(火) 04:25:00ID:???
そりゃechoですからね
出力だけしてくださいよ
0585nobodyさん2009/03/24(火) 04:25:16ID:???
それは、君が>>1を読めない子ちゃんだから。
0586nobodyさん2009/03/24(火) 04:26:30ID:???
すいません、なぜこれでバグになるかわからないんです
echo $a[0] = 'aaa';
echo $a[0][0] = 'news';
print_r($a);
↓結果
Array ( [0] => jaa )
0587nobodyさん2009/03/24(火) 04:26:58ID:???
>>584
おまいさんは、輪をかけてドアホーみたいだけどな
0588nobodyさん2009/03/24(火) 04:28:52ID:???
>>586
バグってないじゃん。仕様通り
文字列の1文字目を置換してる
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:???
>>589
バグじゃないよ。
$a[0]は文字列
$a[0][1]はその2文字目を代入しようとしてる文字列の1文字目で置換せよ
だから、$aは1要素配列のまま。
そんだけ。
0591nobodyさん2009/03/24(火) 04:34:04ID:???
>>590
そうなるんですか。知りませんでした。今までやってきて
そんな配列あったんですか 適当に使ってました
0592nobodyさん2009/03/24(火) 04:34:50ID:???
>>591
マニュアルに書いてあるよ。
0593nobodyさん2009/03/24(火) 04:35:22ID:???
自分は初心者なので、配列=箱としか書いてあるものをみたことが
なかったんです。助かりました>>1-589
0594nobodyさん2009/03/24(火) 04:39:30ID:???
変数を array で初期化しないで、いきなり配列として使うのは、どうも生理的・本能的にダメ。
0595nobodyさん2009/03/24(火) 04:42:07ID:???
arrayで初期化しても置き換えられますよ
自分初心者だったのでこんなのあったんだとびっくりしました
0596nobodyさん2009/03/24(火) 04:46:27ID:???
残念ながら>>594が言ってるのは次元の違う話だ
PHP使いは適当がモットーだから気にしなくていい
0597nobodyさん2009/03/24(火) 04:49:11ID:???
>>596
そうですか。今まで掲示板とブログ作ったんですか
そのような配列の使い方を書いてあるのがみたことなくて
気になりました
0598nobodyさん2009/03/24(火) 07:45:46ID:???
2重配列って呼び方であってる?
0599nobodyさん2009/03/24(火) 07:53:32ID:???
2次元配列じゃないよ。そのケース。
単に、1次元配列の要素が文字列で
その文字列にstring offsetでアクセスしてるだけ
06005862009/03/24(火) 08:34:05ID:???
難しいなあそんなの出てこなかった
初心者本には、
あくまで 配列は個々の箱だと意識してました
データ型を指定しなくていいように、箱も好きに使っていいと
思ってました。
0601nobodyさん2009/03/24(火) 08:34:37ID:???
そりゃ初心者本だからだろ
0602nobodyさん2009/03/24(火) 08:52:05ID:???
>>589
バグ

>>590は下のコードと勘違いしてるんじゃないのかね
$str = "12345";
$str[0] = "a";
echo $str; // a2345
0603nobodyさん2009/03/24(火) 08:55:32ID:???
>>602
いや、だからそれとやってることは一緒だろ
0604nobodyさん2009/03/24(火) 08:56:49ID:???
602が勘違いしてるんじゃないのかね
0605nobodyさん2009/03/24(火) 09:01:48ID:???
コンパイラ言語はデータ型ちゃんと指定するから
静的な変数(配列)の型定義というのは
型に応じたメモリ領域を確保するということ(Javaでint型なら4バイトlong型なら8バイト等)
PHPはインタプリタだからその辺を動的にやってるわけ
この辺をちゃんと理解してないと正しいイメージはわかない
配列は箱ではなく連続したデータというイメージが正しい
メモリ上ではそのように配置されている
0606nobodyさん2009/03/24(火) 09:45:45ID:VfITkfEn
>>582
versionは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の中にちゃんと存在してるんですが、、
06075862009/03/24(火) 19:06:44ID:???
誰かプロの人
$aiueo[0] = "a";
$aiueo[0][0] = "aa";
とPHPで入れると置き換わったりする理由を書いて下さい
0608nobodyさん2009/03/24(火) 19:09:04ID:???
>>606
記憶違いかも知れんが、依存関係の都合でライブラリを読み込む順序によって、
そんなメッセージがでたかも。

以前、Windows版のPHPってサンプルのphp.iniの順番だとエラーが出てずいぶん
悩んだことがある。
0609nobodyさん2009/03/24(火) 20:03:31ID:???
>>607
>>1
0610nobodyさん2009/03/24(火) 20:04:24ID:???
>>606
書いてないから確認しとくけどinclude_pathの設定は?
0611nobodyさん2009/03/24(火) 20:09:50ID:???
>>607
置き換わる理由は仕様だから。それだけ。

$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";
0612nobodyさん2009/03/24(火) 20:14:05ID:???
>>606
併せて、php.iniで、extension_dirがC:¥PHP¥extになってるか確認してみて。
0613nobodyさん2009/03/24(火) 20:15:53ID:???
すまんinclude_path関係ないね
0614nobodyさん2009/03/24(火) 20:36:16ID:???
>>606
phpinfo()を実行してみて、php.iniをどこから読み込んでいるのかも確認してみて。

以前、WINDOWSディレクトリと、phpの展開先の両方に異なる設定のphp.iniを置いていて、はまったことがあるので。
0615nobodyさん2009/03/24(火) 20:37:10ID:???
始めの頃ありがちw
0616nobodyさん2009/03/24(火) 21:07:22ID:/zsLtnA9
クラスの数が多くなってきたので(__autoloadで読み込み)
複数クラスを一つのファイルにまとめたら速くなるのではと
思うのですが、それって実際どの程度の効果があるでしょうか?
まとめなくても、元来OSがファイルキャッシュするので、
あんまり変わらない気もします
0617nobodyさん2009/03/24(火) 21:09:24ID:???
計れば良いのでは?
0618nobodyさん2009/03/24(火) 21:18:30ID:???
>複数クラスを一つのファイルにまとめたら速くなるのではと
再利用とか無視して一人で使うんだろうから別にいいとは思うけど
それでも基本どおり1クラス1ファイルにしときな
06196062009/03/25(水) 00:12:15ID:4yhBz/QX
みなさんたくさんのレスありがとうございます

>>612
そうなってました
>>614
C:\WINDOWS  でした。正しいですよね…

>>608さんの書いてる原因かなぁ
もうwindowsで作るの自体やめよっかな
0620nobodyさん2009/03/25(水) 00:32:37ID:???
>616
ボトルネックがわかっていない状態でチューニングをしてはいけない。
まずは測定。

ファイル数云々というより、__autoload()の呼び出し回数が減ることによる高速化は一応期待できるかな。
マジックメソッドの類は総じて重い。
まあ、DBやファイルへのアクセスがあるならそっちがボトルネックになってるとは思うけど。
0621nobodyさん2009/03/25(水) 01:59:46ID:???
>>616
環境いじれるなら、APCとか使うのが良いんじゃないかなぁと思う。
ソースコードは扱いやすい単にしておいた方が、いろいろ良いし。

自分ははクラスはモジュールぐらいの単位の方が扱いやすいんで、
1クラス1ファイルにはしてないけど。
0622nobodyさん2009/03/25(水) 11:16:26ID:yQlt60AA
PDOで永続接続を使っている場合、prepareを使うと2回目以降の実行が効率化するんでしょうか
それとも実行のたびに毎回prepareステートメントを発行するから意味無いんでしょうか
0623nobodyさん2009/03/25(水) 11:18:39ID:???
prepareって接続してんの?
0624nobodyさん2009/03/25(水) 15:06:05ID:Ijn9qBql
htmlspecialchars($var, ENT_QUOTES, 'utf-8')
でhtmlエスケープしていたのですが、
アンパサンドがエスケープされるので、
数値実体参照が「&#〜;」という文字列として表示される
ということが分かりました。
数値実体参照の場合は生で表示するにはどうしたらいいですか?
0625nobodyさん2009/03/25(水) 15:15:24ID:???
出力するときに&に置換すればいいじゃん
0626nobodyさん2009/03/25(水) 16:45:47ID:???
フォームの処理でmethodがpostの場合、
一度submitで送信した後、更新ボタンを押すと
再度送信するようなアラートが出ますが、
これを出さないようにする方法はないでしょうか?

header関数で送信元のページにリダイレクトして戻す方法以外で教えて下さい。
06276262009/03/25(水) 16:47:05ID:7ip+uIiL
すみません、ID隠してました・・・
0628nobodyさん2009/03/25(水) 17:24:35ID:???
>>626
ブラウザの仕様なのでPHPでどうこうできる問題じゃない
0629nobodyさん2009/03/25(水) 19:52:08ID:Ut4OfJaE
俺のマシンはwinXPの32ビットで4Gのメモリを積んでます。
システムのプロパティで見ると3.25GB認識してるのですが
PHPでどんなに重い処理をしてもタスクマネージャで見ると700MB位しか使っていません。
PHPのメモリリミットは-1の無制限にしてるのに何で?
もっとメモリ使ってくれたら速くなりそうなんだが。

スペックはアパッチ、PHP5
0630nobodyさん2009/03/25(水) 20:13:46ID:???
>>629
んなこたーない
0631nobodyさん2009/03/25(水) 20:38:00ID:???
メモリ使ったら速くなる?
0632nobodyさん2009/03/25(水) 20:47:09ID:???
>>626
「リロード対策」というキーワードでググると
情報が出てくる。

だが、自分には複雑すぎて理解できなかったが。
0633nobodyさん2009/03/25(水) 21:30:14ID:POBIuYee
問題の切り分けレベルですいませんが
http://kokusan.syokuryo.jp/blog_parts.html
このblogパーツですが中身のjs↓
http://kokusan.syokuryo.jp/blogparts/kokusanParts.js
を機能丸ごと再現してみたいのですが(用途は勉強、兼遊びで)

再現するのに
■サーバサイドの技術は何が必要か
■ローカル側は.jsだからとりあえずはコピペで十分?
という所で(入口ですが)詰まってます。
どなたかご助言plz
0634nobodyさん2009/03/25(水) 21:32:29ID:???
まずJavaScriptの基礎から学ぶといいかと
0635nobodyさん2009/03/25(水) 21:50:38ID:???
>>629
画像データをメモリ上に読み込んだりしない限り
そんな使うことはないだろ
重い処理なんていってもPHPの場合たかがしれてる
0636nobodyさん2009/03/25(水) 23:08:42ID:???
>>625
そうですね
そもそも&までエスケープする仕様はやりすぎのような・・
2chでも&はエスケープしてないし。googleも。
0637nobodyさん2009/03/25(水) 23:23:27ID:???
>>636
xmlデータにおいては、&は実体参照必須だけどね。
0638nobodyさん2009/03/26(木) 00:04:21ID:???
>636
気に食わないなら文句言ってないで自分で実装すりゃいいじゃん。
単純に置換するだけだから、str_replace一発でできるぞ。

俺はやりすぎとは思わないな。入力文字列をそのまま画面に出力したいなら、&の置換もしたほうがいい。
0639nobodyさん2009/03/26(木) 00:25:15ID:l1PHOXdz
数値を0.5刻みでフォーマットしたいのですが、
何かスマートな方法はありますでしょうか?

(例)

1.0以上1.5未満 => 1.0
1.5以上2.0未満 => 1.5
2.0以上2.5未満 => 2.0

よろしくお願いします。
0640nobodyさん2009/03/26(木) 00:35:55ID:???
>>639
2倍にして切り捨てて半分にする
0641nobodyさん2009/03/26(木) 00:39:42ID:???
>>639
四捨五入じゃなくて?
0642nobodyさん2009/03/26(木) 00:39:59ID:???
>>638
安全にこしたことはないですが、今回は実体参照を頃されてしまうのが問題なので・・
それにしても、エンコードを意識せず、単に置換したらいいだけなんですか?
だとしたら、htmlspecialcharsのエンコード指定は何に使われているんだろう
0643nobodyさん2009/03/26(木) 00:55:11ID:???
>>639
round
0644nobodyさん2009/03/26(木) 01:05:32ID:fG8U3yBv
MySQLのSQL文のWHEREを
$where_ary = array("id"=>"1","name"=>"あああ");
foreach($where_ary as $key=>$value){
$array[] = $key."='".$value."'";
}
$where = join("&",$array);

と言うように連想配列を使って生成しています。
上記のようにすると、変数に値が入っている場合は大丈夫なのですが、
MySQLの関数(NOWやDATE_FORMATなど)を使いたい時、使えません。
かといって値の部分に関数を記述しても文字列となります。

もっと効率よく生成するには、どのようにすれば良いのでしょうか?
0645nobodyさん2009/03/26(木) 01:07:24ID:???
>>642
指定はできるけど、何も使われていない、って情報が
どっかのブログに書いてあった
0646nobodyさん2009/03/26(木) 01:23:03ID:???
>>644
Zend_Dbの実装はこんな感じ
http://framework.zend.com/manual/ja/zend.db.html#zend.db.adapter.quoting
0647nobodyさん2009/03/26(木) 01:52:56ID:???
http://framework.zend.com/manual/ja/zend.db.select.html#zend.db.select.building.columns-expr
06486442009/03/26(木) 02:06:29ID:???
>>646-647
これは非常に参考になります。
実際に自分もSQL文の生成にはクラスを使っているので
Zend Dbを参考に、独自の仕様にしてみます。
0649nobodyさん2009/03/26(木) 11:39:12ID:p1YkL4wy
WindowsにCLIでインストールされたPHPでphp -a ではなく、
ある程度インラインで入力してからまとめて実行したいのですが、
どうすればできますか?
0650nobodyさん2009/03/26(木) 13:22:22ID:???
>>649
C:\>php
0651nobodyさん2009/03/26(木) 18:55:54ID:JIscrcVE
phpで、「何時間毎に」とか、「何月何日に」とかいう指定で、プログラムを走らせたりメールおくったりするにはどうすればいいでしょうか?
0652nobodyさん2009/03/26(木) 19:01:47ID:???
>>651
cron
0653nobodyさん2009/03/26(木) 19:02:58ID:???
>>651
それか、そのファイルに対する最終アクセス時刻を記録しておいて、
「前回のアクセスは3日前だな、、、
だったらよし、今回は3日分の処理を一気にやればいいんだな」
とかってプログラムで判断させて、アクセスするたびに
その処理を実行するとか。

もちろん、この場合、アクセスがなければ処理も実行されない。
0654nobodyさん2009/03/26(木) 19:03:41ID:???
Windowsだったら、タスク スケジューラ
それがUNIXのcronと同じ。
0655nobodyさん2009/03/26(木) 19:08:12ID:???
>>651
こういうこと?
ttp://phpspot.org/blog/archives/2005/11/croncronphp_pse.html
0656nobodyさん2009/03/26(木) 19:31:31ID:???
クソサイトの宣伝すんなや
web cron
0657nobodyさん2009/03/26(木) 20:06:05ID:???
すぐ吠えるDQNって・・・どこまで底辺なんだよ
0658nobodyさん2009/03/26(木) 20:59:43ID:JIscrcVE
ありがとう、普通にcronすればよかった、トンクス
0659nobodyさん2009/03/26(木) 21:05:33ID:???
>>649
STDINを使えという話ではなくて?
http://jp.php.net/manual/ja/features.commandline.php
0660nobodyさん2009/03/26(木) 21:23:14ID:ih4lRG32
PHPのソースを読んでコメントを抽出する正規表現を書きたいのですが
どうにもうまくヒットさせることができません
/**  */  */
の時に長い方がマッチされてしまいます
どう書けばいいですか?
0661nobodyさん2009/03/26(木) 21:32:53ID:???
"!/\*(.*?)\*/!s"
0662nobodyさん2009/03/26(木) 21:48:28ID:???
>>661
できました!ありがとうございました。
*?で最短にマッチさせられるんですね
0663nobodyさん2009/03/26(木) 23:16:05ID:46RAjvuH
fgetcsv関数って基本的にwhileとセットで使うの?
0664nobodyさん2009/03/26(木) 23:23:56ID:???
retunr値が配列なだけだろ
0665nobodyさん2009/03/27(金) 07:08:11ID:viybN2w6
symfonyにあるような、
ディレクトリを再帰的にさらってクラスをリストアップする機能が欲しいのですが
どうしたらいいですか?
PEARのPHP Parserを使ってみたのですが
エラーが出まくって使い物になりませんでした
0666nobodyさん2009/03/27(金) 08:05:52ID:???
>>665
既に検討したとは思うが、クラス名を取得する程度なら、Tokenizerで処理しても、
大した手間でもなんじゃないの。

http://jp.php.net/manual/ja/book.tokenizer.php
0667nobodyさん2009/03/27(金) 09:19:56ID:DtOzsPN+
rename関数でフィアルを移動するプログラムを書いています
移動先に同名のファイルがある場合に上書きさせたいのですが
一度unlinkしてからrenameしないと駄目なのでしょうか?
0668nobodyさん2009/03/27(金) 09:23:54ID:???
うん
0669nobodyさん2009/03/27(金) 15:04:57ID:???
>>666
こんな便利そうなものがあったとは!
まさに欲しかったものです
ありがとうございました
0670nobodyさん2009/03/27(金) 15:35:49ID:LbT/oMC/
ただ今MVCにてアプリケーションを作成していて
モデル部分にデータベース関係の処理(selectやdelete)を全てまとめてますが
フォームの項目チェックなどのバリデーション関係は
モデルではなくコントローラーに記述するべきですかね?
0671nobodyさん2009/03/28(土) 00:29:13ID:???
>670
MとCならばC。Cからバリデーション専用クラスを呼び出せ。
ただし、Cにベタ書きで実装するのはオススメできない。Visitorパターンで実装するのが割と良く見る形。
バリデートはほぼ全てのフレームワークに存在する機能なので、おとなしくフレームワークのマニュアルを読んで構成をパクったほうが速いけどな。
0672nobodyさん2009/03/28(土) 00:34:00ID:???
バリデーションがC??
0673nobodyさん2009/03/28(土) 02:42:46ID:???
画面やテーブルごとにチェックする項目が異なるのに
バリデーションがCはありえない
■ このスレッドは過去ログ倉庫に格納されています