【PHP】下らねぇ質問はID出して書き込みやがれ 82
at PHP
[前50を表示]
550:nobodyさん
09/03/22 18:45:54
いやそういうことをいってんじゃないんだけど
まあいいや
551:nobodyさん
09/03/22 19:52:51
普通はログはテキストのまま、つまり記事本文だけを保持する。
例えば2chは、以下のようなテキスト形式でデータを保存している(本当は違うんだが、まあ割愛)。
nobodyさん<><>2009/03/22(日) 18:34:08 ID:XWTxCtFo<> はい。htmlにさせて頂きました... <>
そのログファイルの内容を読み込んで、HTMLとして整形して書き出すPHPで本文を表示させるわけだ。
HTMLで保持しない理由はいくつかある。パッと思いつくのは
柔軟性
例えば、表示されるHTMLを別の形にしたいとか、RSSも書き出したい、という時に再利用しづらい。
記事削除passをつけたいとか、データ保持先をDBにしたいとか、色んな拡張性が失われたりもする。
セキュリティ
本文に<script>alert('うけけけけけ');</script>と書かれたらどうなる?とか。
どちらにせよ対策は必要なのだが、ログをHTMLとして持っていると、どこで対策すりゃいいのかが曖昧になりやすい。
容量
無駄にデカくなる。大した問題じゃないが。
552:nobodyさん
09/03/22 20:56:06
実体参照化してからHTML化すれば?
553:nobodyさん
09/03/22 23:17:35
やり方にもよるかな
ログをhtmlとして書き出す掲示板はkentも作ってたな
554:nobodyさん
09/03/22 23:23:17
やり方にもよるって・・
ログをHTMLとして書き出しておくのは
論外といったら失礼かもしれないけど、
明らかに保守性なさすぎじゃないか?
555:554
09/03/22 23:29:53
書き出しておく・・じゃなくて
保持しておくだった
556:nobodyさん
09/03/22 23:30:00
テンプレートとログを分けておいて、記録するときにテンプレートを元にhtml化すればおkだけどな
557:nobodyさん
09/03/22 23:30:47
XMLみたいなもんと思えば、アリじゃないかとも思う。
一件一行で、ヘッダとフッタを除いた状態で保存するなら、そんなに保守性もわるくないと思うが。
558:nobodyさん
09/03/22 23:34:55
閲覧が多くて書き込みが少ないのならhtml化してもいいかな
559:nobodyさん
09/03/22 23:43:37
あめぞうスクリプト見れ
560:nobodyさん
09/03/22 23:49:52 cLpptsUH
現在自分が作成しているPHPとMySQlを使ったログイン認証システムで
穴がないか不安になってきたので、質問します。
要点のみを記載します。
・ID(又はメールアドレス)とパスワードをフォームに入力して、
MySQL内の情報を照合
・正しければトークン用のコードを発行し、ユーザ情報を更新
(テーブルのtokenフィールドに作成した値を追加)
・その他、セッション変数にはログイン時のUAとIPアドレスを代入
・各ページアクセス毎にセッション情報が正しいかをIFで調べる
(会員情報編集などの場合、ユーザIDとトークンコードが正しいか照合)
・パスワードはmd5で保存
と言うことをしています。他に「これもしろ」と言うことはありますでしょうか?
561:nobodyさん
09/03/22 23:50:51
ソースを見せるのが早い
562:nobodyさん
09/03/22 23:51:39
ID(又はメールアドレス)とパスワードをフォームに入力して、
MySQL内の情報を照合
(1)この時に、SQLインジェクション対策はされているのか?
563:nobodyさん
09/03/22 23:52:30
md5は破られるのでsha2にしたほうが無難
564:nobodyさん
09/03/22 23:52:40
>>560
そういうしつもんすると>>562みたいな質問がきりがなく出てくるのでソース出したほうが早い
565:nobodyさん
09/03/23 00:10:54
>>533
やっぱり再帰ですね
ありがとうございました
566:560
09/03/23 00:16:39
>>562
しています。まず入力値にhtmlspecialcharsをかけて
DBアクセス時にmysql_escape_stringをしています。
ソースに関してですが、莫大な量になるので掲載を控えます。
それにソースや構文の組み立てを聞きたいのではなく、
自分の足りない知識・誤っている知識を指摘していただきたく思い、質問しました。
567:nobodyさん
09/03/23 00:29:46
( ゚д゚)
568:nobodyさん
09/03/23 01:02:57
>>566
>まず入力値にhtmlspecialcharsをかけて
らめぇええええ
569:nobodyさん
09/03/23 01:35:27
>>565
否。ただのループ。
570:nobodyさん
09/03/23 02:53:59 RPfvHZ0v
test.txt
> 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って事?
571:nobodyさん
09/03/23 05:27:55
flushされるタイミングの都合で、たまたまじゃないかなぁ。
572:nobodyさん
09/03/23 05:29:12
良く見たら明示的にflush は、してるのか。
ごめん。
573:nobodyさん
09/03/23 22:30:27
>>560とは別人で悪いんだけど、気になったからよこやり入れさせて。
>>568
ID(もしくはメールアドレス)は、必ずしもブラウザで表示するわけじゃないから、
・DB内の情報と照合する時 → mysql_escape_string(mysql_real_escape_string)
・ブラウザに表示する時 → htmlspecialchars
みたいにする、ってことでおk?
じゃないと、ID(もしくはメールアドレス)を更新する際に、'<'が'<'って保存されてしまうからっていうことかな。
見当違いだったらすまん。
574:nobodyさん
09/03/23 22:33:45
連続書き込みスマソ
>>573訂正
じゃないと、ID(もしくはメールアドレス)を更新する際に、'<'が'&lt;'って保存されてしまうからっていうことかな。
575:nobodyさん
09/03/23 22:38:01
そうやって保存されてしまうからっていうのと、
保存されてしまうことによって再利用するとき不便になるからだね
576:nobodyさん
09/03/23 22:58:16
test
577:nobodyさん
09/03/23 23:07:14
>>575
なるほど、いい勉強になった。
ありがとう。
578:nobodyさん
09/03/23 23:45:08 uVBii4+5
サーバを再起動したらapacheのerr.logに
PHP Warning: PHP Startup: Unable to load dynamic library 'C:\\PHP\\ext\\php_curl.dll'
と同じようなログがたくさん出ます。
でも、該当のファイルは存在します
何が原因でしょうか?
579:nobodyさん
09/03/23 23:53:02
>>573-575
でもさ、ID・メールアドレスを更新する時に<を使う場合ってあるの?
IDはだいたい半角英数字だし、メールアドレスもそうでしょ?
580:nobodyさん
09/03/24 00:01:55
どこでサニタイズするかは勝手だが、
100%ってことはないので出口でサニタイズしろってエロい人が言ってた
581:nobodyさん
09/03/24 00:17:34
サニタイズニダ!
582:nobodyさん
09/03/24 00:41:05
>>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.
ってニュースが出てたけど、関係しそうなとこある?
583:nobodyさん
09/03/24 04:21:02
すいません。PHP勉強して半年になります。順調に進んでいたのですが
echo $a[0] = 'aaa';
echo $a[0][0] = 'news';
こうすると、なぜかバグルのですが、なぜですか?
584:nobodyさん
09/03/24 04:25:00
そりゃechoですからね
出力だけしてくださいよ
585:nobodyさん
09/03/24 04:25:16
それは、君が>>1を読めない子ちゃんだから。
586:nobodyさん
09/03/24 04:26:30
すいません、なぜこれでバグになるかわからないんです
echo $a[0] = 'aaa';
echo $a[0][0] = 'news';
print_r($a);
↓結果
Array ( [0] => jaa )
587:nobodyさん
09/03/24 04:26:58
>>584
おまいさんは、輪をかけてドアホーみたいだけどな
588:nobodyさん
09/03/24 04:28:52
>>586
バグってないじゃん。仕様通り
文字列の1文字目を置換してる
589:nobodyさん
09/03/24 04:30:23
バグって増すよ
<?php
$a[0] = 'aaa';
$a[0][1] = 'jjjjk';
print_r($a);
Array ( [0] => aja )
590:nobodyさん
09/03/24 04:32:35
>>589
バグじゃないよ。
$a[0]は文字列
$a[0][1]はその2文字目を代入しようとしてる文字列の1文字目で置換せよ
だから、$aは1要素配列のまま。
そんだけ。
591:nobodyさん
09/03/24 04:34:04
>>590
そうなるんですか。知りませんでした。今までやってきて
そんな配列あったんですか 適当に使ってました
592:nobodyさん
09/03/24 04:34:50
>>591
マニュアルに書いてあるよ。
593:nobodyさん
09/03/24 04:35:22
自分は初心者なので、配列=箱としか書いてあるものをみたことが
なかったんです。助かりました>>1-589
594:nobodyさん
09/03/24 04:39:30
変数を array で初期化しないで、いきなり配列として使うのは、どうも生理的・本能的にダメ。
595:nobodyさん
09/03/24 04:42:07
arrayで初期化しても置き換えられますよ
自分初心者だったのでこんなのあったんだとびっくりしました
596:nobodyさん
09/03/24 04:46:27
残念ながら>>594が言ってるのは次元の違う話だ
PHP使いは適当がモットーだから気にしなくていい
597:nobodyさん
09/03/24 04:49:11
>>596
そうですか。今まで掲示板とブログ作ったんですか
そのような配列の使い方を書いてあるのがみたことなくて
気になりました
598:nobodyさん
09/03/24 07:45:46
2重配列って呼び方であってる?
599:nobodyさん
09/03/24 07:53:32
2次元配列じゃないよ。そのケース。
単に、1次元配列の要素が文字列で
その文字列にstring offsetでアクセスしてるだけ
600:586
09/03/24 08:34:05
難しいなあそんなの出てこなかった
初心者本には、
あくまで 配列は個々の箱だと意識してました
データ型を指定しなくていいように、箱も好きに使っていいと
思ってました。
601:nobodyさん
09/03/24 08:34:37
そりゃ初心者本だからだろ
602:nobodyさん
09/03/24 08:52:05
>>589
バグ
>>590は下のコードと勘違いしてるんじゃないのかね
$str = "12345";
$str[0] = "a";
echo $str; // a2345
603:nobodyさん
09/03/24 08:55:32
>>602
いや、だからそれとやってることは一緒だろ
604:nobodyさん
09/03/24 08:56:49
602が勘違いしてるんじゃないのかね
605:nobodyさん
09/03/24 09:01:48
コンパイラ言語はデータ型ちゃんと指定するから
静的な変数(配列)の型定義というのは
型に応じたメモリ領域を確保するということ(Javaでint型なら4バイトlong型なら8バイト等)
PHPはインタプリタだからその辺を動的にやってるわけ
この辺をちゃんと理解してないと正しいイメージはわかない
配列は箱ではなく連続したデータというイメージが正しい
メモリ上ではそのように配置されている
606:nobodyさん
09/03/24 09:45:45 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の中にちゃんと存在してるんですが、、
607:586
09/03/24 19:06:44
誰かプロの人
$aiueo[0] = "a";
$aiueo[0][0] = "aa";
とPHPで入れると置き換わったりする理由を書いて下さい
608:nobodyさん
09/03/24 19:09:04
>>606
記憶違いかも知れんが、依存関係の都合でライブラリを読み込む順序によって、
そんなメッセージがでたかも。
以前、Windows版のPHPってサンプルのphp.iniの順番だとエラーが出てずいぶん
悩んだことがある。
609:nobodyさん
09/03/24 20:03:31
>>607
>>1
610:nobodyさん
09/03/24 20:04:24
>>606
書いてないから確認しとくけどinclude_pathの設定は?
611:nobodyさん
09/03/24 20:09:50
>>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";
612:nobodyさん
09/03/24 20:14:05
>>606
併せて、php.iniで、extension_dirがC:¥PHP¥extになってるか確認してみて。
613:nobodyさん
09/03/24 20:15:53
すまんinclude_path関係ないね
614:nobodyさん
09/03/24 20:36:16
>>606
phpinfo()を実行してみて、php.iniをどこから読み込んでいるのかも確認してみて。
以前、WINDOWSディレクトリと、phpの展開先の両方に異なる設定のphp.iniを置いていて、はまったことがあるので。
615:nobodyさん
09/03/24 20:37:10
始めの頃ありがちw
616:nobodyさん
09/03/24 21:07:22 /zsLtnA9
クラスの数が多くなってきたので(__autoloadで読み込み)
複数クラスを一つのファイルにまとめたら速くなるのではと
思うのですが、それって実際どの程度の効果があるでしょうか?
まとめなくても、元来OSがファイルキャッシュするので、
あんまり変わらない気もします
617:nobodyさん
09/03/24 21:09:24
計れば良いのでは?
618:nobodyさん
09/03/24 21:18:30
>複数クラスを一つのファイルにまとめたら速くなるのではと
再利用とか無視して一人で使うんだろうから別にいいとは思うけど
それでも基本どおり1クラス1ファイルにしときな
619:606
09/03/25 00:12:15 4yhBz/QX
みなさんたくさんのレスありがとうございます
>>612
そうなってました
>>614
C:\WINDOWS でした。正しいですよね…
>>608さんの書いてる原因かなぁ
もうwindowsで作るの自体やめよっかな
620:nobodyさん
09/03/25 00:32:37
>616
ボトルネックがわかっていない状態でチューニングをしてはいけない。
まずは測定。
ファイル数云々というより、__autoload()の呼び出し回数が減ることによる高速化は一応期待できるかな。
マジックメソッドの類は総じて重い。
まあ、DBやファイルへのアクセスがあるならそっちがボトルネックになってるとは思うけど。
621:nobodyさん
09/03/25 01:59:46
>>616
環境いじれるなら、APCとか使うのが良いんじゃないかなぁと思う。
ソースコードは扱いやすい単にしておいた方が、いろいろ良いし。
自分ははクラスはモジュールぐらいの単位の方が扱いやすいんで、
1クラス1ファイルにはしてないけど。
622:nobodyさん
09/03/25 11:16:26 yQlt60AA
PDOで永続接続を使っている場合、prepareを使うと2回目以降の実行が効率化するんでしょうか
それとも実行のたびに毎回prepareステートメントを発行するから意味無いんでしょうか
623:nobodyさん
09/03/25 11:18:39
prepareって接続してんの?
624:nobodyさん
09/03/25 15:06:05 Ijn9qBql
htmlspecialchars($var, ENT_QUOTES, 'utf-8')
でhtmlエスケープしていたのですが、
アンパサンドがエスケープされるので、
数値実体参照が「&#〜;」という文字列として表示される
ということが分かりました。
数値実体参照の場合は生で表示するにはどうしたらいいですか?
625:nobodyさん
09/03/25 15:15:24
出力するときに&に置換すればいいじゃん
626:nobodyさん
09/03/25 16:45:47
フォームの処理でmethodがpostの場合、
一度submitで送信した後、更新ボタンを押すと
再度送信するようなアラートが出ますが、
これを出さないようにする方法はないでしょうか?
header関数で送信元のページにリダイレクトして戻す方法以外で教えて下さい。
627:626
09/03/25 16:47:05 7ip+uIiL
すみません、ID隠してました・・・
628:nobodyさん
09/03/25 17:24:35
>>626
ブラウザの仕様なのでPHPでどうこうできる問題じゃない
629:nobodyさん
09/03/25 19:52:08 Ut4OfJaE
俺のマシンはwinXPの32ビットで4Gのメモリを積んでます。
システムのプロパティで見ると3.25GB認識してるのですが
PHPでどんなに重い処理をしてもタスクマネージャで見ると700MB位しか使っていません。
PHPのメモリリミットは-1の無制限にしてるのに何で?
もっとメモリ使ってくれたら速くなりそうなんだが。
スペックはアパッチ、PHP5
630:nobodyさん
09/03/25 20:13:46
>>629
んなこたーない
631:nobodyさん
09/03/25 20:38:00
メモリ使ったら速くなる?
632:nobodyさん
09/03/25 20:47:09
>>626
「リロード対策」というキーワードでググると
情報が出てくる。
だが、自分には複雑すぎて理解できなかったが。
633:nobodyさん
09/03/25 21:30:14 POBIuYee
問題の切り分けレベルですいませんが
URLリンク(kokusan.syokuryo.jp)
このblogパーツですが中身のjs↓
URLリンク(kokusan.syokuryo.jp)
を機能丸ごと再現してみたいのですが(用途は勉強、兼遊びで)
再現するのに
■サーバサイドの技術は何が必要か
■ローカル側は.jsだからとりあえずはコピペで十分?
という所で(入口ですが)詰まってます。
どなたかご助言plz
634:nobodyさん
09/03/25 21:32:29
まずJavaScriptの基礎から学ぶといいかと
635:nobodyさん
09/03/25 21:50:38
>>629
画像データをメモリ上に読み込んだりしない限り
そんな使うことはないだろ
重い処理なんていってもPHPの場合たかがしれてる
636:nobodyさん
09/03/25 23:08:42
>>625
そうですね
そもそも&までエスケープする仕様はやりすぎのような・・
2chでも&はエスケープしてないし。googleも。
637:nobodyさん
09/03/25 23:23:27
>>636
xmlデータにおいては、&は実体参照必須だけどね。
638:nobodyさん
09/03/26 00:04:21
>636
気に食わないなら文句言ってないで自分で実装すりゃいいじゃん。
単純に置換するだけだから、str_replace一発でできるぞ。
俺はやりすぎとは思わないな。入力文字列をそのまま画面に出力したいなら、&の置換もしたほうがいい。
639:nobodyさん
09/03/26 00:25:15 l1PHOXdz
数値を0.5刻みでフォーマットしたいのですが、
何かスマートな方法はありますでしょうか?
(例)
1.0以上1.5未満 => 1.0
1.5以上2.0未満 => 1.5
2.0以上2.5未満 => 2.0
よろしくお願いします。
640:nobodyさん
09/03/26 00:35:55
>>639
2倍にして切り捨てて半分にする
641:nobodyさん
09/03/26 00:39:42
>>639
四捨五入じゃなくて?
642:nobodyさん
09/03/26 00:39:59
>>638
安全にこしたことはないですが、今回は実体参照を頃されてしまうのが問題なので・・
それにしても、エンコードを意識せず、単に置換したらいいだけなんですか?
だとしたら、htmlspecialcharsのエンコード指定は何に使われているんだろう
643:nobodyさん
09/03/26 00:55:11
>>639
round
644:nobodyさん
09/03/26 01:05:32 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など)を使いたい時、使えません。
かといって値の部分に関数を記述しても文字列となります。
もっと効率よく生成するには、どのようにすれば良いのでしょうか?
645:nobodyさん
09/03/26 01:07:24
>>642
指定はできるけど、何も使われていない、って情報が
どっかのブログに書いてあった
646:nobodyさん
09/03/26 01:23:03
>>644
Zend_Dbの実装はこんな感じ
URLリンク(framework.zend.com)
647:nobodyさん
09/03/26 01:52:56
URLリンク(framework.zend.com)
648:644
09/03/26 02:06:29
>>646-647
これは非常に参考になります。
実際に自分もSQL文の生成にはクラスを使っているので
Zend Dbを参考に、独自の仕様にしてみます。
649:nobodyさん
09/03/26 11:39:12 p1YkL4wy
WindowsにCLIでインストールされたPHPでphp -a ではなく、
ある程度インラインで入力してからまとめて実行したいのですが、
どうすればできますか?
650:nobodyさん
09/03/26 13:22:22
>>649
C:\>php
651:nobodyさん
09/03/26 18:55:54 JIscrcVE
phpで、「何時間毎に」とか、「何月何日に」とかいう指定で、プログラムを走らせたりメールおくったりするにはどうすればいいでしょうか?
652:nobodyさん
09/03/26 19:01:47
>>651
cron
653:nobodyさん
09/03/26 19:02:58
>>651
それか、そのファイルに対する最終アクセス時刻を記録しておいて、
「前回のアクセスは3日前だな、、、
だったらよし、今回は3日分の処理を一気にやればいいんだな」
とかってプログラムで判断させて、アクセスするたびに
その処理を実行するとか。
もちろん、この場合、アクセスがなければ処理も実行されない。
654:nobodyさん
09/03/26 19:03:41
Windowsだったら、タスク スケジューラ
それがUNIXのcronと同じ。
655:nobodyさん
09/03/26 19:08:12
>>651
こういうこと?
URLリンク(phpspot.org)
656:nobodyさん
09/03/26 19:31:31
クソサイトの宣伝すんなや
web cron
657:nobodyさん
09/03/26 20:06:05
すぐ吠えるDQNって・・・どこまで底辺なんだよ
658:nobodyさん
09/03/26 20:59:43 JIscrcVE
ありがとう、普通にcronすればよかった、トンクス
659:nobodyさん
09/03/26 21:05:33
>>649
STDINを使えという話ではなくて?
URLリンク(jp.php.net)
660:nobodyさん
09/03/26 21:23:14 ih4lRG32
PHPのソースを読んでコメントを抽出する正規表現を書きたいのですが
どうにもうまくヒットさせることができません
/** */ */
の時に長い方がマッチされてしまいます
どう書けばいいですか?
661:nobodyさん
09/03/26 21:32:53
"!/\*(.*?)\*/!s"
662:nobodyさん
09/03/26 21:48:28
>>661
できました!ありがとうございました。
*?で最短にマッチさせられるんですね
663:nobodyさん
09/03/26 23:16:05 46RAjvuH
fgetcsv関数って基本的にwhileとセットで使うの?
664:nobodyさん
09/03/26 23:23:56
retunr値が配列なだけだろ
665:nobodyさん
09/03/27 07:08:11 viybN2w6
symfonyにあるような、
ディレクトリを再帰的にさらってクラスをリストアップする機能が欲しいのですが
どうしたらいいですか?
PEARのPHP Parserを使ってみたのですが
エラーが出まくって使い物になりませんでした
666:nobodyさん
09/03/27 08:05:52
>>665
既に検討したとは思うが、クラス名を取得する程度なら、Tokenizerで処理しても、
大した手間でもなんじゃないの。
URLリンク(jp.php.net)
667:nobodyさん
09/03/27 09:19:56 DtOzsPN+
rename関数でフィアルを移動するプログラムを書いています
移動先に同名のファイルがある場合に上書きさせたいのですが
一度unlinkしてからrenameしないと駄目なのでしょうか?
668:nobodyさん
09/03/27 09:23:54
うん
669:nobodyさん
09/03/27 15:04:57
>>666
こんな便利そうなものがあったとは!
まさに欲しかったものです
ありがとうございました
670:nobodyさん
09/03/27 15:35:49 LbT/oMC/
ただ今MVCにてアプリケーションを作成していて
モデル部分にデータベース関係の処理(selectやdelete)を全てまとめてますが
フォームの項目チェックなどのバリデーション関係は
モデルではなくコントローラーに記述するべきですかね?
671:nobodyさん
09/03/28 00:29:13
>670
MとCならばC。Cからバリデーション専用クラスを呼び出せ。
ただし、Cにベタ書きで実装するのはオススメできない。Visitorパターンで実装するのが割と良く見る形。
バリデートはほぼ全てのフレームワークに存在する機能なので、おとなしくフレームワークのマニュアルを読んで構成をパクったほうが速いけどな。
672:nobodyさん
09/03/28 00:34:00
バリデーションがC??
673:nobodyさん
09/03/28 02:42:46
画面やテーブルごとにチェックする項目が異なるのに
バリデーションがCはありえない
674:nobodyさん
09/03/28 06:25:24 xuBHT5om
newしたオブジェクトを変数に代入せずにメソッドを呼びたいのですが
そういう書き方ありますか?
{new Hoge()}->method()
みたいなイメージです
675:nobodyさん
09/03/28 06:46:27
>>674
URLリンク(74street.ddo.jp)
これかな?
ちなみに、インスタンス化せずメソッドを使う場合、宣言時にメソッドに「static」を付け、「クラス名::メソッド名」で呼び出す。。
class SampleClass {
public static function func($a,$b){
return $a + $b;
}
}
$ans = SampleClass::func(1,2);
676:nobodyさん
09/03/28 08:45:03
>>674
それは不可能
677:nobodyさん
09/03/28 08:49:24
>>676
お前、馬鹿だろ
前のレスで完結してるのにわざわざくだらん横槍を入れる必要はない
678:nobodyさん
09/03/28 08:56:18
静的メソッドしか呼び出せないじゃん
679:nobodyさん
09/03/28 08:58:31
>>676じゃないが、>>675 は別モンだと思うけどな。
>>674は何でそんなことしたいんかナゾだけど。目的も書くべきだろ。
ただの興味ということなら、それはそれで良いけど。
680:nobodyさん
09/03/28 11:44:19
というか何の意味があるんだろう
681:nobodyさん
09/03/28 12:52:45 0oeFWAvW
マニュアルを見てもいまいちわからないのですが
$a = 2;
$b = $a * 2;
echo $b;
$a = 4;
echo $b;
期待する結果は48ですが実際は44になります。($bには2行目の結果が入ったままってことでしょう)
2行目を$b = &$a * 2;のようにすると24になります。(*2は無視?)
期待する結果を表示するにはどのように記述すればいいのでしょうか。
PHP5.2.6
682:nobodyさん
09/03/28 14:13:07
>>681
言いたい事は理解できた
$b は常に $aに入れた値を2倍にする変数にしたいという事だな
2行目の $b = $a * 2 は $bに$aの値を2倍した値を入れるという命令だ
だから2行目では$bで$a(2)*2で4が入って3行目で4が出力、
4行目で$aに4を代入しているが5行目では$bは変化無しの4が表示されるから44となる
そして $b =& $a * 2 は変数の参照という事になって $b に入れた値は $a にも反映されるという事だ
2行目で変数&bは$aを参照しているとしているから3行目で2が表示されて
4行目で$aに4を入れているが$aと$bは参照の関係にあるから$bは4となり24となる
変数でそんな事が出来るか記憶を辿ってみたが…出てこない
件を解決する簡単な方法は関数を作ることだと思うんだが?
683:nobodyさん
09/03/28 14:21:32
>>681
掛け算の結果にまで参照変数を反映させるのは無理。もう一回掛け算するしかない
$a = 2;
$b = $a * 2;
echo $b;
$a = 4;
$b = $a * 2;
echo $b;
684:nobodyさん
09/03/28 14:30:41 jCCBzDpK
pChartを使ってレーダーチャートを描いています。
デフォルトでは縦軸にラベル(目盛?10、20、30...など)が表示されるのですが、
これを表示しないようにするにはどうすればよいのでしょうか?
公式のドキュメントを読んだのですが、わかりませんでした。
どなたか分かる方がいましたら、よろしくお願いします。
685:681
09/03/28 15:12:28 0oeFWAvW
>>682-683
ありがとうございます。
変数のみでは求めることは無理なんですね。関数で処理することにします。
686:nobodyさん
09/03/28 15:25:27
多分681がイメージしているような、「$aを2倍して返す処理」自体を$bに変数として格納するような仕組みはクロージャという。
関数をその場で組み立てるイメージだな。普通に関数を使う場合と違い、「2」の部分を$bの生成時に動的に組み込める。
JavaScriptやRubyでは可能、JavaやPHPでは不可能。PHPでは次のバージョンには盛り込まれる見込み。
これもまあ、関数を作っているわけだけど。
クラスを使ったりグローバル変数を使ったりしていいなら、今のPHPでも同じ処理は一応可能。
687:nobodyさん
09/03/28 16:48:33 y1nm6eda
POSTされた各フォーム毎の項目チェックをする時に、
$_POSTを直接チェックするのは何か問題がありますか?
例
if(!isset($_POST["name"])){
echo "未記入です";
}
それか全て一旦POSTを変数に代入してチェックした方がいいですかね?
688:nobodyさん
09/03/28 17:15:52
まったく問題ない
689:687
09/03/28 17:25:52
>>688
返信ありがとうございます。
なんとなく自信がなく聞いてみたんですが安心しました。
ありがとうございました。
690:nobodyさん
09/03/28 19:01:42
このスレを見ている人はこんなスレも見ています。(ver 0.20)
【ショタ】3次専ショタスレ 12【女装・美少年】 [Download]
このスレに変態がいる!!
691:nobodyさん
09/03/28 19:31:18
phpの関数名でググった時
公式のドキュメントじゃなくて
phpspotのアフィドキュメントが上位に来るのがむかつくんだけど
どうしたらいい?
googleで除外urlを指定できたらいいんだけど
692:nobodyさん
09/03/28 19:36:20
>>691
>>1
693:nobodyさん
09/03/28 22:31:41
>>690
呼んだ?
694:nobodyさん
09/03/28 22:48:03
URLリンク(journal.mycom.co.jp)
695:nobodyさん
09/03/28 22:52:21
GOTO文wwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
696:nobodyさん
09/03/28 23:16:06
GOTOを否定する奴は例外も使うなよ
697:nobodyさん
09/03/28 23:27:52
gotoよりはfinallyが欲しかったねぇ。
なんか都合があるんか知らんが。
698:nobodyさん
09/03/29 05:04:23
gotoってどういうときにつかうの?
699:nobodyさん
09/03/29 06:25:15
帰ってきてほしくない時
700:nobodyさん
09/03/29 09:35:20
人生をやり直したいとき
701:nobodyさん
09/03/29 13:21:29 EDw1f4T+
define("TEST",realpath("."));
という定数があったとして、TESTの中身が「/home/test/public_html」だとします。
通常は、定数指定して
include_once(TEST.'/test.php');
としてディレクトリ指定代わりに出来ますが、
定数の中身で表示する事って出来ませんでしょうか?上の例で言うと
include_once('/home/test/public_html」'.'/test.php');
と言うように書き出せればと思っています。
702:nobodyさん
09/03/29 13:28:04
表示ってどこに?ソースコード中に?
703:701
09/03/29 13:29:17
>>702
fopenでファイル作成する時に、その出力側のファイル上に
include_once('/home/test/public_html'.'/test.php');
という形で記述されて欲しいのです。
704:nobodyさん
09/03/29 13:31:15
意味が分からない
fopenでtest.phpを作成するってこと?
705:nobodyさん
09/03/29 19:34:50
fopenはファイル開くだけだろ。PHPとしては動かないよ
PHPスクリプトをファイルとして開く理由がわからんが
706:nobodyさん
09/03/29 20:07:08 g6t/L+Oe
URLリンク(atelier-ps3.jp)
このサイトいくらぐらい掛かってると思いますか?
707:nobodyさん
09/03/29 20:07:18 A+4tAAtu
配列で存在しないキーにアクセスするとnoticeが出るはずですが、
以下のようにすると出ません。
これは何故ですか?
error_reporting(E_ALL | E_STRICT);
class Hoge {
protected $_value = array();
public function & getEntity($key){
return $_value[$key];
}
}
$hoge = new Hoge();
var_dump($hoge->getEntity('no_key'));
708:nobodyさん
09/03/29 20:08:51
return $this->_value[$key];
でした
結果は同じですが
709:nobodyさん
09/03/29 20:18:24
参照だから。
710:nobodyさん
09/03/29 20:20:00
リファレンス返してるからだろ
711:nobodyさん
09/03/29 20:23:38
リファレンスだと何故noticeが出ないのですか?
712:nobodyさん
09/03/29 20:34:22
リファレンスって何か知らんで使ってんの?
713:nobodyさん
09/03/29 21:07:35
>>711
参照を張るとzvalが増えて変数を定義したのと同じことになるからな。
計算機の基礎だと思うが。
714:nobodyさん
09/03/29 22:45:02
>>696
強盗みたいだから否定してるのであって例外は問題ない、というのが今の反GOTO派の主流
715:nobodyさん
09/03/29 23:05:06 lmZMeLkn
【OS名】CentOS 5.1
【PHPのバージョン】php5.16
【連携ソフトウェア】mysql
【質問内容】
print'<tr>';
while ($row = mysql_fetch_object($res)){
print'<td>'."$row->NAME".'</td>';
}
MySQL から 特定のフィールドを取得し,HTML のテーブルに5列ずつ表示しようとしております。
5列毎にprint'</tr>';を挿入して
テーブルの行数をかえたいのですが,どのようにすればよろしいでしょうか?
【求める結果】MySQL テーブルのの行数が8行の場合
<tr>
<td>NAME1</td>
<td>NAME2</td>
<td>NAME3</td>
<td>NAME4</td>
<td>NAME5</td>
</tr><td>
<td>NAME6</td>
<td>NAME7</td>
<td>NAME8</td>
</tr>
お手数ですがよろしくお願いします。
716:nobodyさん
09/03/29 23:19:48
pager?
717:nobodyさん
09/03/29 23:21:58
>>713
なるほど、参照を張ると変数定義と同じになるんですね。
718:nobodyさん
09/03/29 23:22:53
雑だけど。
$i = 1;
while ($row = mysql_fetch_object($res)){
print'<td>'."$row->NAME".'</td>';
if($i == 5){
print'</tr>';
$i = 1;
}else{
++$i;
}
}
719:nobodyさん
09/03/29 23:28:38
>715
HTMLマークアップが不正な件。
8個の場合、2行目3列目までで終わるが、余った2セルはどう埋めるんだ?
>718
<tr>がない。
720:715
09/03/29 23:39:03 lmZMeLkn
ご回答ありがとうございます。
>>718 を参考にして,
$i = 1;
while ($row = mysql_fetch_object($res )){
if($i == 1){
print'<tr>';
}
print'<td>'."$row->NAME".'</td>';
if($i == 5){
print'</tr>';
$i = 1;
}else{
++$i;
}
}
としてみました。
>>719 の件については,とりあえず暫定的に MySQL 内の行数を5の倍数にしておきます。
皆様ありがとうございました。
721:nobodyさん
09/03/30 05:37:45 Sq1DK82P
DBなどすべてUTF-8で構築しております。
そのうえで、xmlWriter()をつかって「EUC-JP」で
XMLを書き出したいのですがどうしたらよいのでしょうか?
単にstartDocumentでEUC-JPを指定するだけでエンコードを変更できるのでしょうか?
Firefoxでは表示され、safariだとエラーになってしまいます。
$writer = new xmlWriter();
$writer->openMemory();
$writer->startDocument('1.0', 'EUC-JP');
$writer->startElement('root');
(略)
$writer->endElement();
$writer->endDocument();
return simplexml_load_string($writer->outputMemory(TRUE));
ちなみに各Directiveの値もメモしておきます。
mbstring.http_input auto
mbstring.http_output pass
mbstring.internal_encoding UTF-8
mbstring.script_encoding no value
※もうひとつのスレッドでは答えがわからずじまいで、
どうしたらよいかヒントだけでもつかめたらと思います。
どうぞお願いいたします。
722:nobodyさん
09/03/30 08:22:50
マルチ乙
723:nobodyさん
09/03/30 12:12:19 ObvykTsh
初心者ですが質問させて下さい。
URLリンク(www.gen-x-design.com)
このサイトのthumbnail.inc.phpを使って画像をリサイズしてサムネイルを生成したのですが
いまいち仕組みがわからずにいます。
リサイズされた画像はどこかに保存されているんでしょうか?
724:nobodyさん
09/03/30 12:16:26
スクリプトの仕組み解らなくてもOSのファイル検索くらいは使えるだろ
725:nobodyさん
09/03/30 12:28:05 ObvykTsh
OSのファイル検索?
実際にサイトにアップして表示させてみました。
そしたらリサイズされた画像が表示されたんですが
サイトのどこをみても画像が増えた形跡がありません。
リサイズした画像を別に保存するわけではないのですか?
726:nobodyさん
09/03/30 12:41:43
いやだからファイル探したいならファイル検索すればいいじゃん
727:nobodyさん
09/03/30 12:49:44 ObvykTsh
検索したくても、どんな形式でどんなファイル名で保存されてるかわからないので
画像のアドレスをみても
show_image.php?filename=sample.jpg&width=250&height=250
と書いてあるだけなんです
728:nobodyさん
09/03/30 13:07:26
別に保存されてないんじゃねーの?
729:nobodyさん
09/03/30 13:09:40
これしてねーんだろ
$thumb->save('path/to/file.jpg',80);
730:nobodyさん
09/03/30 13:13:48 ObvykTsh
あ、それしてないですね
それをしないとただ大きい画像を縮小してるだけで意味ないんでしょうか?
731:nobodyさん
09/03/30 13:26:05
サムネで表示しただけで保存されるほうがうっとうしいわ
732:nobodyさん
09/03/30 13:53:38
っということは、大きい画像を元に
サイズも容量も小さくして表示ができるってことでいいのでしょうか。
サムネイル画像の保存をせずに
733:nobodyさん
09/03/30 14:28:36 Nai97eUH
頭がこんがらがってしまったので質問させて下さい。
データベースを用いてアプリケーションを作る際
例えば該当するIDを選んでupdate、deleteする時に、
該当するIDがある時は正しく削除され、削除されました。
とメッセージを返すんですが何らかの形で該当しないIDが
投げ込まれた時は一般的にはどのような処理をされていますか?
まず該当するIDがあるかselectで調べて、ある場合はupdateもしくは
deleteで処理みたいな形ですかね?
アドバイスよろしくお願いします。
734:nobodyさん
09/03/30 14:50:52
それでいいよ
735:nobodyさん
09/03/30 15:01:56
>>733
URLリンク(jp.php.net)
とか類似関数で。
736:733
09/03/30 15:12:04
>>734-735
返信ありがとうございます。
これまでなんとなくしか理解できてなかったのですが
今スッキリしました。
本当にありがとうございました。
737:nobodyさん
09/03/30 18:45:52 Gjy/ZAJ6
【OS名】Ubuntu 8.10
【PHPのバージョン】5.2.6-2ubuntu4.1
【連携ソフトウェア】Apache/2.2.9
【質問内容】
PHPをさわり初めて一日目の初心者です。
header ( "HTTP/1.0 404 Not Found" , true , 404 );で、.htaccessで指定した404エラーページを
表示させたいのですが、ブランクページになって表示されません。
確かに404エラーページはファイル自体が存在していない場合のみ表示されますので、Location:で
存在しないファイルにリダイレクトさせて見たところ、見事404エラーページが表示されました。
しかし、この方法はアドレスが変更されてしまうので、できればそのPHPのアドレスで、404エラー
を表示させたいのですが、何か方法はございませんでしょうか。
よろしくお願いします。
738:nobodyさん
09/03/30 23:26:09
>>737
readfileでエラーページの内容をそのまま流しちゃダメなの?
URLリンク(jp.php.net)
739:nobodyさん
09/03/31 06:15:24
クラスについて質問です。
URLリンク(www.m-fr.net)
このサイトで、
>で、こうします。
>
>obj = new 三角クラス;
>適当な変数 = obj->get_1辺の長さ(); // データの取得
>obj->set_1辺の長さ(適当な値); // データの設定
とあるのですが、下の二行は順序が逆の方がよいのでは?と思いました。
setしてからそのsetした結果得られる値をgetする、みたいに。
その方がしっくりくるというか・・
もしかしたら、何か理由(もしくは自分の勘違い)があって、
getをまず書いておいて、そのsetする一行を書く、という形式にしてるのか
よくわからないので、教えていただけないでしょうか
よろしくお願いします。
740:nobodyさん
09/03/31 08:44:30
2行目で得た値を3行目で使っているわけではないと思うぞ?
getとsetの別々の事例かと
あとスレタイ
741:nobodyさん
09/03/31 10:26:43 MdY2FCLh
WindowsXP上で開発を行っているのですが、
Windowsの絶対パスでrequireで読み込むとエラーになります。
require_once("C:\htdocs\test.php");
↓
failed to open stream: Invalid argument
どうしたら読み込めるようになるのでしょうか?
742:nobodyさん
09/03/31 10:35:59
echo "C:\htdocs\test.php"; やってみそ
743:nobodyさん
09/03/31 10:53:51
>>683
今コード用意しますのでちょっと待っててくださいね
744:nobodyさん
09/03/31 11:14:25
アンカ間違えましたね^^;
>>681さんおすきなほうどうぞ
その1
function cale($a,$b) {echo "<p>" .($a * $b). "</p>";}
$a = 2;
$b = 2;
cale($a,$b);
$a = 4;
cale($a,$b);
その2
function cale($a,$b) {echo "<p>" .($a * $b). "</p>";
}
// $aと$bはそれぞれ別の値を持てる
$a = 2;
$b = 2;
$cale($a,$b);
// $aと$bは常に同じ値になる
$b = &$a;
$a = 100;
cale($a,$b);
$a = 5;
cale($a,$b);
745:nobodyさん
09/03/31 11:20:52
>>737
rewrite
746:nobodyさん
09/03/31 12:20:45
>>737
あなたのやろうとしてることはおすすめできない
747:nobodyさん
09/03/31 13:58:39
>>737
アパッチ「俺の仕事はもう終わってんだからバックパスすんな」
748:nobodyさん
09/03/31 15:08:08 H7khy467
+食べ物
++りんご
++バナナ
++ぶどう
↑の4行を↓のようにhtmlタグとして出力したいのですが
wikiみたいなことがやりたいのですがどなたかヒント頂けないでしょうか?
<ul>
<li>食べ物</li>
<ul>
<li>りんご</li>
<li>バナナ</li>
<li>ぶどう</li>
</ul>
</ul>
749:nobodyさん
09/03/31 15:12:34
wikiのソース見ればいいのでは?
750:nobodyさん
09/03/31 15:19:27
>>749
HTMLソース見てもしょうがないだろw
751:nobodyさん
09/03/31 15:27:10
>>749
そんなんで片付くならこのスレが82代まで行かないでしょw
答えてやればいいじゃんwww
752:nobodyさん
09/03/31 15:27:12 qal8dqXu
>>738,745
ありがとうございます。
>>746-747
本当はファイルが存在しているのに無理矢理サーバーにファイルが存在していないことにして、エラーページを表示させるところが
でしょうか。それとも、「header ( "HTTP/1.0 404 Not Found" , true , 404 );」がおすすめできないのでしょうか。
もし、そうであれば、「header("HTTP/1.0 301 Moved Permanently") ;header("Location: URLリンク(www.example.com)") ;」
などのリダイレクトであれば大丈夫ですか。
753:nobodyさん
09/03/31 15:27:13 WkuOnscP
【OS名】TurboLinux
【PHPのバージョン】4.3.11
【連携ソフトウェア】Apache2
【質問内容】
auto_prepend_fileで指定したファイルが動いてくれません。
.htaccessで、「php_value auto_prepend_file "ap.php"」と記述しました。
ap.phpの中身は「<? echo("test"); ?>」です。
これでURLリンク(hostname)を開くと、
画面上部に「test」と表示されることを期待しているのですが、
TurboLinux + PHP4.3.11のサーバーでは実際は何も表示されませんでした。
もうひとつUbuntu + PHP5.2.4のサーバーがあるのですが、
そちらに同様のコードを設置したところ、意図したとおりに動きました。
何か設定の問題だとは思うのですが、何が問題なのか分からずに困っています。
ひとまず以下のことを試しました。
・phpinfoを確認 ⇒ auto_prepend_fileのLocal Valueは「ap.php」になっている
・auto_prepend_fileの設定をわざと"ap2.php"にした ⇒ ファイルが読み込めないエラー
・ap.phpの中身をわざと文法エラーにした ⇒ 何のエラーも出ない(display_errorsはon)
・ap.php、index.phpの両方でWarningが出るようにした ⇒ index.phpのWarningのみが表示される
・ap.phpの一行目(<?〜?>の外側)に「aaaaa」を追加 ⇒ 何も表示されない
どうもauto_prepend_fileでap.phpを読み込んではいるものの、
ap.phpのコードが実行されていないようです。
この現象について分かる人がいらっしゃいましたらご教示下さい。
754:nobodyさん
09/03/31 15:50:33
>>753
>ap.phpの中身は「<? echo("test"); ?>」です。
<?使えるなら<?=使えよ
ていうか<?phpって書く方を推奨
755:nobodyさん
09/03/31 15:53:09
>>753
よくわかんないけど全てのページのヘッダに挿入するならmod_layout
URLリンク(d.hatena.ne.jp)
756:nobodyさん
09/03/31 19:15:21
>>748
質問に対する答じゃないけど、HTMLは
<ul>
<li>食べ物
<ul>
<li>りんご</li>
<li>バナナ</li>
<li>ぶどう</li>
</ul>
</li>
</ul>
こう書いた方がいいと思う。
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
4734日前に更新/244 KB
担当:undef