【PHP】下らねぇ質問はここに書き込みやがれ 32
PHPに関するくだらねぇ質問用スレです。ここならお前の下らない質問に回答があるかも知れません。
まず読め→【PHP マニュアル】
http://www.php.net/manual/ja/ PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。
過去スレ、関連スレ、FAQなどは
>>2-10 辺り
【前スレ】
【PHP】下らねぇ質問はここに書き込みやがれ 31
http://pc8.2ch.net/test/read.cgi/php/1161733546/ ◆質問する時の注意
・ 自分のIDを表示させること。(メール欄に何も記述しない)
・ サーバーのOS、WebサーバーとPHPの種類やバージョン等を明記すること。
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
◆質問後の注意
・偽者防止に必ずIDを表示させること。(メール欄に何も記述しない)
・2回目以降は最初に質問した際のレス番号を名前欄に入れること。
・解決しなくても回答をもらった場合はお礼を言うこと。
(荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)
◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
【その他諸注意】
・正規表現・PEAR・テンプレート(Smarty等)・フレームワークはそれぞれの該当スレへ
・SQLについての質問はデータベース板(PCカテゴリ)の各スレで
・速さについては自分でベンチをとってここに書け(違う環境の人も調べてくれるかも)
【簡易FAQ】
1.文字コードは何を使えばいいの?
→1.UTF-8 2.EUC-JP のどちらか。迷うようなやつはShift_JISは使っちゃダメ。
2. このスレに書き込むときに自分のサイト名を晒したくない
→
http://example.com/が例文などのために予約されている 。hogehoge.comは使っちゃダメ。
3. ブラウザに何も表示されないんだけど・・・
→ Apacheの設定を見直せ。ファイルの拡張子は何にしてて、その拡張子でPHPを呼ぶようになっているか?
4. 記号の意味がわからないけどググりようがない
→ 「@」 エラー表示を抑制、「->」 オブジェクトのメンバにアクセス、「::」 静的なメソッド呼び出し、
「==」は暗黙の型変換をしてゆるい比較、「===」は型情報も含めた厳密な比較
5. echo "$arr['hoge']['fuga']"; と書いたらエラーになった
→ {おっぱい括弧}でくくって"{$arr['hoge']['fuga']}"にする
6. 一定時間ごとに自動的に何かしたいんだけど
→ cronかタスクスケジューラを使え。
7.extractって危険なの?
→変数上書き&初期化忘れなどで危険。楽だからという理由だけで安易に使わない。
8. include/requireに「〜.php?a=b&c=d」のようなパラメータをつけたい
→ URL呼び出しなら可能だけど、普通のファイル呼び出しではできません
9.include/requireでURLを指定しても何も起きない
→ .phpの拡張子のファイルをURLで呼び出すと、1度PHPプログラムとして実行された結果になる。
10. そもそもインストールの時点でうまくいかない
→ 確認すべきはPHPのconfigureの引数、php.iniの内容と置き場所、
Webサーバの設定(Apacheならhttpd.conf)、起動&再起動あたり
11. SQLの質問はどこで?
→ データベース板に誘導されるのが嫌ならPHPにうまく関連させて質問する
12. 文字列のなかに、英字のみとか数字のみとか記号が入っちゃいやんとかはどうしたらいいの?
→ ctype_〜()が手軽。複雑なパターンはpreg_〜()あたりで正規表現を使う。
13. $a1, $a2, $a3 ... のような変数名をうまく扱いたい
→ 可変変数で実現できるけど、むしろ配列を使って$a[1], $a[2], $a[3]等とするのがベター
14. echoとprintってどう違うの?
→ よく議論される話題であるが基本的に両者とも同じ。 以下ちょっとした議論。
http://www.faqts.com/knowledge_base/view.phtml/aid/1/fid/40 15. クッキーの情報をユーザから隠したい
→ セッション使え。ただしクッキーとセッションは仕組みが違うから同じように扱うな
16. strip_tags()で削除しないタグを複数指定したい
→ strip_tags($html, '<a><p><font>'); // htmlspecialchars()も検討すべし
17. CSVやTSVのファイルをスマートに扱いたい
→ まずはfgetcsv()。ただし日本語を含むと正常に動作しない場合があるので注意だ。
18. 値渡しと参照渡し(「&」を使う)のパフォーマンスの違い
→ C言語じゃないので、パフォーマンス目的で使いわけたらダメ。参照渡しにすると逆に遅くなったりする
参照渡しは引数に戻り値を設定したり引数を関数内で変更するなど、正しい目的に使うこと
19. ファイル入出力関数(fopen等)でリモートファイル(
http:// 〜とか)を扱う際の限界
→ fsockopen()でソケット通信 or PEARのHTTP系 or CURLで解決
必要ならHTTPをはじめとする各種プロトコル(どんなデータを送受信するか)はRFCなどで調べる
20. PHPからPOSTリクエストしたい
→19.を参照
21. 画像処理一般 or GDの限界
→ ImageMagick(PECLのやつ or シェルから実行)
22. 画像・音・動画はファイルで保存?DBに保存?
→ 好きにしてください
おつ
8 :
nobodyさん :2006/11/06(月) 22:28:41 ID:GtGInv5r
DBを使用せずに表示順番を指定の通りにする事はできませんでしょうか? 例えば、「バナナ(1)、りんご(2)、みかん(3)」とあったとします。()内は順番です。 これをechoすると バナナ りんご みかん と表示したいのです。どうすればいいかずっと悩んでいるのですが、 わかりません。アドバイスいただけないでしょうか
ttp://php.net/usort ユーザー関数で比較してソート
例文ちょっと改造して動かしてみたがこれでいけたぽいぞ
$array = array(
"みかん(3)",
"バナナ(1)",
"りんご(2)"
);
function cmp($a, $b)
{
preg_match("/\(([0-9]+)\)/", $a, $a);
preg_match("/\(([0-9]+)\)/", $b, $b);
$a = $a[1];
$b = $b[1];
if ($a == $b) {
return 0;
}
return ($a < $b) ? -1 : 1;
}
usort($array, "cmp");
10 :
8 :2006/11/06(月) 23:21:05 ID:???
>>9 表示されました!参考URLもありがとうございます。
ずっと悩んでいたのですが、だいぶ前進しました。ありがとうございました。
11 :
ご伝授下さい :2006/11/07(火) 00:13:59 ID:???
>>11 サーバーはhoge.phpがファイルであることを認識できるけど、ブラウザはhoge.phpがファイルなのかディレクトリなのか判別できない。
つまり、/hogehoge/の部分がPATH_INFOであるかどうかは、ブラウザにはわからない。
だから、imgタグのsrcに相対パスを使うと、ブラウザは/hoge.php/hogehoge/img/hoge.jpgから画像を取得しようとしてしまう。
(この場合、サーバーはhoge.phpに対して/hogehoge/img/hoge.jpgをPATH_INFOとして渡していて、テキストデータを出力しているので、当然画像は表示されない)。
srcには相対パスを使わず絶対パス(/img/hoge.jpg)にするのが無難だと思う。
"ご伝授" その発想はなかったわ
>>11 つーか、ちょっとまて。
$query = getenv ("PATH_INFO");
include("$query");
はやめとけってwww
サーバーのリソースに不正アクセスされまくるぞwww
15 :
ご伝授下さい :2006/11/07(火) 00:53:16 ID:???
>>12 ありがとうございます。無難に(/img/hoge.jpg)に変更します。
解りやすいご説明ありがとうございました。
>>14 ありがとうございます。早速修正します^^
16 :
nobodyさん :2006/11/07(火) 01:27:29 ID:x6c5yFrE
MySQLを使ってDBと連携したシステムを作ろうとしているのですが 接続するときに必要な $conn = mysql_connect('localhost','my_id','my_pass'); mysql_select_db('my_id',$conn); これを毎回書き込むのがめんどくさいと感じているのですが 別のPHPファイルに記述しておいてincludeで呼び出す方法をとればいいですかね? なんとなくセキュリティ的にまずいのではないかと思って質問してみました。 .htaccessを利用すれば問題なく動作させることができるのでしょうか?
includeしたらいいんじゃね? ドキュメントルート下に置かないってのは当然として。
>>16 DBのアクセスクラス作って、それをincludeすればいいと思う。
オレは使ってないけど、どっかのライブラリ使うのが一番いいのか?
19 :
nobodyさん :2006/11/07(火) 03:47:02 ID:Sqm+J9JF
Warning: session_start(): Cannot send session cache limiter - headers already sent というエラーがとれません。どうすればいいのでしょうか <?php session_start(); include("mysql.php"); ?> <html> とセッションを使うのに適している記述だと思うのですがエラーがとれません どうすればよろしいのでしょうか?
マニュアルよく嫁。 セッションにCookieを使うならスクリプトの先頭に置く。 文字を出力する前にsession_start()しなければならない。
<?phpの前に改行とか入ってんじゃね?
22 :
nobodyさん :2006/11/07(火) 04:38:07 ID:Sqm+J9JF
19です。 スペースなど一切入っていません 1行目に<?php 2行目にsession_start(); です。
includeしてるから
BOMがついてるとか、バッファが足りないとか Telnetかなんかで叩いて送られてきたドキュメントを確認してみたら分かるんじゃない 送信済みになってるのは間違いないんだから
回答者しかいねえのかよ!おれならもっとすばらしい回答できるぜ!
>>19 にはやくこたえろや!!!
回答とかうんぬん言う前に日本語の勉強からやり直してきてくれ
27 :
nobodyさん :2006/11/07(火) 09:41:20 ID:C4kT4pau
自鯖で SmartIRCってのを使おうとしたら socket extension not loaded なエラーが出ますがどうしたらよいでしょうか
28 :
nobodyさん :2006/11/07(火) 09:45:40 ID:qhJadrD3
まったくのPHP初心者でも基礎学べるお勧めの書籍教えてください
>>27 コンフィギャーに--enable-socketsを追加してリコンパイルしてみたらどうでしょう
すでにコンパイルされてるならphp.iniでextension=php_sockets.dllを有効にしてみるとか
dllじゃないやso
>>26 がったがたうるせーんだよ!へぼ回答者がっ!
>>29 ありがとん。
一応有効にして再起動したけど、駄目ですた。
sqlliteとかはロードできてるんですけど・・・。
get_class_methodsでクラスのコンストラクタを 返さない方法はありますか? ほかのメソッドはprotectedをつければ返されないのですが、 コンストラクタはprotectedをつけるとエラーが出てしまいます。
34 :
nobodyさん :2006/11/07(火) 10:02:32 ID:oogNIDZJ
winでpearのアンインストールがわかりません。 go-pear.phpからインストールしてapacheのhtdocsの中にpearがあります。 このままファイルごと削除するだけでクリーンにアンインストールできるでしょうか?
36 :
32 :2006/11/07(火) 10:16:57 ID:???
ごめん 自己解決です。 DL版じゃなくてpearにはいってるの使ったらだいじょぶでした。
37 :
34 :2006/11/07(火) 10:18:35 ID:oogNIDZJ
初心者は、ほむぺにスクリプト埋め込むことから始めて できること増やすしかなさそう。
40 :
nobodyさん :2006/11/07(火) 10:28:38 ID:oogNIDZJ
pearについて質問です。pearのサイトからファイルを手動でダウンロードして それをドキュメントルート下においても問題なくつかえますか? 制限のおおいレンタルサーバでもうごきますか?
問題なく使えることもあるしそうじゃないこともあるんじゃない? バージョンの問題やら、連鯖のphp仕様の問題で。
>>19 session_start()の前の行にこれ入れてどこでヘッダーが出力されてるか確認。
headers_sent($file, $line);
echo "$fileの$line行目でヘッダ送信済み";
exit;
>>40 ほとんどの場合はそれで動くと思うよ。
全部がそうとはちょっと断言できない。
45 :
40 :2006/11/07(火) 11:06:10 ID:oogNIDZJ
ありがとうございます。レンタルサーバ導入を考えていたところです。 参考にさせていただきます。
20KBほどの一時保存データ(本筋処理後にすぐ消す)をファイルに書き出すのと DBに書き出すのとどっちが早いのかな?やっぱファイル?
どう考えてもファイルでしょ
49 :
nobodyさん :2006/11/07(火) 13:24:06 ID:oogNIDZJ
1から100までの数字を1ページ5個ずつわけて表示したいのですが、 どのようにしてページをわけていいのかわかりません。 こんな感じで↓自動的にリンクを作りたいのですがご教授お願いいたします index.php?page=1&a=5 index.php?page=2&a=10 index.php?page=3&a=15
つ ENGINE=MEMORY
それって index.php?page=2&a=15 ってしたとき、何が表示されるんだろ。 aいらないんじゃ
>>49 pageかaだけでいいんじゃないの?
で、index.phpの中で
$data = range(1,100); //表示データ全体
$len = 5; //1ページ5件
$page = (isset($_GET['page']))? intval($_GET['page']): 1; //ページNo.取得
$viewdata = array_slice($data, ($page - 1 ) * $len, $len); //表示データの抽出
foreach($viewdata as $line) {
echo "<li>$line\n";
}
リンクの表示は $total_page = ceil(count($data) / $len); for ($i=1; $total_page >= $i; $i++) { echo "index.php?page=$i \n"; } みたいな感じだな ポインヨは、ページの総数は、全アイテム数を一ページあたりの表示件数で割ったものを 切り上げて出すってのと、ページに表示するアイテムの開始インデクスは (ページ数 -1) * 表示件数 で 求まるってことじゃないかな Pagerとか呼ばれてる
<?php //ポインヨかわいんよ。 for($i=0;$i<5;$i++){ echo 1+@$_GET['page']*5+$i.'<br>'; } ?>
55 :
nobodyさん :2006/11/07(火) 15:34:01 ID:xXnFQ4+N
htmlのソース取得についてお聞きしたいことが。
$html="
http://thesaurus.weblio.jp/content/IP ";
$html2=file_get_contents($html);
このようにして、txtファイルに書き出すと、きちんと出力されているの
ですが、
$mozi="ルータ";
$html="
http://thesaurus.weblio.jp/content/$mozi "; or /contents/ルータ
$html2=file_get_contents($html);
とすると、urlに格納した全角の文字をうまく解釈せず、「???[?^に該当
するページが見つかりませんでした」とテキストに出力されてしまいます。
ブラウザ上で直にurlに全角文字を入れたときは、きちんとした結果が
返ってきたのですが。。。
PHPファイルでurlに全角文字を格納した変数を使用するにはどうすれば
よいでしょうか?
よくわからんけど、日本語のところをエスケープすればいいんじゃないかな。 よくしらんけど、urlencode関数とか? 文字コードとかどうなるのかよくわからんけど。
58 :
nobodyさん :2006/11/07(火) 16:29:36 ID:bLjeWEKo
phpMyAdminでテーブルを作っているのですが、 listテーブルのTEXT型のレコード「image」の基本値を「default.jpg」 にして、特に「image」が指定されていない場合「default.jpg」が入るようにしたいのですが 基本値のところにdefault.jpgと入力してレコード追加を行うと #1101 - BLOB column 'image' can't have a default value と出ます。 解決できる方法はあるのでしょうか? 基本値を何か設定できればソースのほうで変換して対応できるのですがどうもうまくいきません・・・・ 基本値の設定の方法など特にやるべきことがありましたらよろしくお願いします。
59 :
55 :2006/11/07(火) 16:31:43 ID:xXnFQ4+N
ありがとうございました。トライしてみます。
60 :
58 :2006/11/07(火) 16:34:03 ID:bLjeWEKo
TEXT型のレコードじゃないですね・・・・ imageフィールドのフィールドタイプがTEXTだと脳内変換していただければ・・・・
BLOB column 'image' can't have a default value
62 :
nobodyさん :2006/11/07(火) 17:55:27 ID:6NR/KJfF
PHP4.0を使用しています。OSはwindowsです。今回、PHPでPOSTリクエストをしたく、 curl関数を使用したいのですが、標準だと使用できるようになっていないと 調べたところわかりました。実際、作成したスクリプトもcurl関数の ところでエラーが出てしまいます。 そこで、PHPマニュアルなど、curl関数の使用方法を調べたのですが、 どれも分かりにくくて、設定をすることができませんでした。 どなたか、わかり易く教えていただけませんでしょうか? よろしくお願いします。
Pear HTTP_Request
64 :
nobodyさん :2006/11/07(火) 18:11:00 ID:KW9fbgwt
php4で下記のような案件のプログラムを作る場合どのようになるのか教えていただけませんか? ・配列に特定の数が入っている(配列の数は、10個だったり100個だったりする) ・10桁の数字をユーザに選んでもらう。 ・その10桁の数字を元に、配列の中からランダムに5個の組み合わせが生成される (組み合わせの5個はダブってはいけない) ・数字が変わらない限りは、毎回同じ組み合わせがはき出される 毎回ランダムにはき出すパターンは、わかるのですが、逆に同じ物を毎回はき出すという 方法が思いつきません。 どなたかご教授願います。
<?php $array = range(1,100); $seed = 8594037143; srand($seed); shuffle($array); $array = array_slice($array,0,5); var_dump($array); ?> こんな感じ? ちなみに単なる興味から聞くけどそれどんなシステムなの?
67 :
nobodyさん :2006/11/07(火) 18:38:45 ID:KW9fbgwt
>>66 ありがとうございました。 ちなみに、この方法で配列の数が変わった場合もはき出す数は ものは同じになりますか? 使い方は、言葉遊びのプログラムです
68 :
55 :2006/11/07(火) 18:42:31 ID:xXnFQ4+N
>>67 ん〜ならないねぇ。
どんな条件が求められてるのか分からないから何とも言えないけど
そうしたいならsrandやrandを駆使すれば何とかなるんじゃないかなぁ
>>68 $mozi=mb_convert_encoding($mozi,'UTF-8',auto);
71 :
55 :2006/11/07(火) 19:04:03 ID:xXnFQ4+N
>>70 もし、変なことやってたらすいません。
$mozi="ルータ";
$mozi2=mb_convert_encoding($mozi,'UTF-8',auto);
$QUERY_STRING =urlencode($mozi2);
$html2="
http://thesaurus.weblio.jp/content/$html ";
$html3=file_get_contents($html2);
としたのですが、同じような結果(???[?^に該当するページ・・)
となってしまいました。
そうじゃないということでしたら、ご指摘いただきたいのですが。。。
>>67 特定の条件で同じ内容を出したいんならそれはランダムって言わないだろう。
条件から計算なりして抽出すればいいんじゃないの?
>>71 そのコードじゃ $html は空じゃね?
74 :
55 :2006/11/07(火) 19:09:21 ID:xXnFQ4+N
すいません。こちらは書く際の記述ミスです。
正しくは
mozi="ルータ";
$mozi2=mb_convert_encoding($mozi,'UTF-8',auto);
$QUERY_STRING =urlencode($mozi2);
$html=htmlentities($QUERY_STRING);
$html2="
http://thesaurus.weblio.jp/content/$html ";
$html3=file_get_contents($html2);
です。
>>68 > $html=htmlentities($QUERY_STRING);
これは余分。urlencodeだけで十分なはずだよ。
78 :
55(74) :2006/11/07(火) 19:19:38 ID:xXnFQ4+N
>>78 php.iniの設定が間違っててautoではShift_JISを検出できないんだろ。
>>76 でいいんじゃねーの
mb_convert_encoding($mozi, "UTF-8", "Shift_JIS");
>>78 文字コードの知識もないやつがソースにShift_JISを使ったらいかん。PHPでは本来使えないぞ。
ま、文字コードの知識が無いからこそそんな真似しちゃうんだろうけど。
82 :
55(74) :2006/11/07(火) 19:59:31 ID:xXnFQ4+N
できました!たくさんの参考になるご意見をいただきまして 本当にありがとうございました。
PHPでmvdirっぽい関数はありますか? 探した限りマニュアルには見当たらなかったので。 よろしくお願いします。
Apacheが2.0から2.2になったら、 <?php print($hoge); ?> というスクリプトに hoge.php?hoge=foobar とリクエストしても「foobar」が返ってこなくなってしまいました。 print($_GET['hoge']); に直せば動くことは分かったのですが、$hogeの書式で書いた スクリプトが多く、POSTなのかGETなのかを調べて書き直すのに 時間がかかりそうです。 php側の設定を変えて従来の方法で変数を参照させるようにする 方法はないでしょうか?
php.ini の register_globals = Off を register_globals = On にすればいいということで、自己解決しました。
それはApacheのバージョンとは関係ないお 大昔にPHP側で変更されたんだお
ありがとうございました。 どうやらphp4系でバイナリだけバージョンアップを続けてきたのが、 php5に入れ替わった拍子に設定ファイルまで飛んでしまったようです。 これからphpの仕様にあわせていくように作業します。。
>>86 しかしregister_globalsって
最初に作ったときに気づかなかったんかね?
90 :
82 :2006/11/07(火) 21:54:07 ID:xXnFQ4+N
>>88 76と80のどちらでもできました。ありがたいことです。
>>89 最初のPHPは「HTMLをちょっとだけ拡張した、簡単・お手軽・お手抜き言語」からスタートしてるから。
そもそもローカル関数なにそれ?くらいのレベルで。
<input>でname=hogeって書いてるんだから$hogeでアクセスできて当然!っていう。
それがいつの間にやら人気が出ちゃって、変に規模の大きなまともなプログラムを書くやつが増えたから
便利な機能も消さなきゃいけなくなっちゃったんだよ。
ローカル関数じゃない、ローカル変数。
最初は PHP = パーソナル・ホームページ だったしな
PHP6、PHP5、PHP4、PHP3、PHP/FI 2.0、Personal Home Page Construction Kit + FI (Form Interpreter)、Personal Home Page Tools センセイ、PHP4以降しか知りません
95 :
nobodyさん :2006/11/08(水) 00:53:08 ID:EFItiHAr
>>43 そのファイルの1行目で出力されています。
session_start();1を一行目にいれても同じように
1行目で出力されていますとでるのですが
includeを消してもエラーがでてしまいます。
>>95 ソースファイルってひょっとしてUTF-8で保存されてる?
97 :
nobodyさん :2006/11/08(水) 02:04:51 ID:EFItiHAr
>>96 UTF-8で保存しています。
それじゃだめなのでしょうか?
>>97 >>24 ですでに指摘されてるけどBOMだろう。
テキストエディタにBOMをつけずに保存する設定が無いか確認。
99 :
nobodyさん :2006/11/08(水) 05:57:27 ID:j+v5xEVZ
ウインドウズXPで自動返信機能のあるSMTPの立て方をおしえてください。
101 :
99 :2006/11/08(水) 06:27:03 ID:j+v5xEVZ
すいません、取り消します。 Webサーバ上でPHPを動かします。 linuxとwinとで違う動作、動かない動作を教えてください。 一ヶ月調べてわかったことはシムリンクがlinuxしか使えないことです。
>>101 ごく一般的な手法でのWeb構築の観点から言えば、ほとんどの場合両方の環境で動く。
symlinkのようにファイルシステムに関係するものや、片方のOSでしかAPIが提供されていないものも少数ながらあるけど、どちらかでしか動かないものはマニュアルに明記されているから1つ1つ確認しろ。
ひとつひとつなんて面倒なこといやですよ。 どこかに一覧表ありませんか?
一ヶ月もかけて、何をどう調べたの? 効率悪すぎ
面倒もくそも無いだろ 一ヶ月もかけたら、かなり頭の悪い奴でも一覧ピョウが出来てるはずだよ
>>103 いやですよって。。。
普通にlinuxとwinで動かしてみれば?これもいやですよって?
>>103 自分の書くコードに含まれる関数は全て、一度はマニュアルに目を通していて当然。
面倒とかそれ以前の問題だな。
たとえwin/linuxの違い云々が記憶から薄れていても、環境に依存するかどうかくらいはOSの仕組みが大雑把にでもわかっていればすぐに気付くはずなので、必要に応じてマニュアルを読み返せばいいだけ。
>>99 こいつって前スレで空メールシステムの質問してたやつじゃねえの?w
今のPHP5.x系って4で動作確認して作ったスクリプトも問題なく動くと考えておk?
classでvarとか使ってるとNOTICEのエラー吐きまくると思うがな 動作に影響を及ぼす事はあんまないんじゃないかな
112 :
110 :2006/11/08(水) 13:29:12 ID:???
そうすか。ありがとう。 そろそろ仕事も5ベースにやろうかと思います。
>>110 クラス使ってる場合は色々不具合出ると思う。
それ以外は大体そのまま動くかな。
ヒアドキュメントのIDの名づけ方についてのポリシーを設定してるひといますか? その場で適当に決めると後でわかりにくくなるのである程度決めたほうが良い感じはするけど なかなかルール化が難しい。参考までに「俺はこうしてるぞ」ってのがあれば教えてください。
↓使わない派の意見は聞いてねーよ禿
PHPでヒアドキュメントを使うメリットって何?
"などをエスケープしなくていい。 HTMLファイルからコピペするときなんか\"やら\nを挿入するのめんどい。
PHPタグとじりゃいいだけじゃないの
>>114 ポリシーってほどのポリシーはないなぁ。
HTML、FORM、TEXTのどれかを種類別に選択してる程度。
別に全部一緒でも構わないんじゃないかって思うけど。
>>116-117 単にHTMLを書きたいだけなら?>〜<?phpでHTMLモードに入っちゃうけど
それを変数に入れたい場合はヒアドキュメント使うことが多いかな。
やっぱ " をエスケープとかって読みにくくなるし後で修正しづらいしで、
HTMLモードかヒアドキュメントのどっちか以外ではHTMLは書かない。
まぁ大抵はHTMLモードだけでこと足りてるけど。
コードの途中にHTML書くこと自体が滅多にないし。
>>118 <?xml version="1.0" encoding="Shift_JIS"?>
とかの類も、あるんよ。
ショートタグ無効にしたらいいだけじゃないの
>>120 XML使っててshort_open_tagをONにするやつはバカだと思いますが。
入力フォーム(textareaとsubmitのみ)→表示ページ(<?=$form_date?>を記述)
というプログラムがあるのですが、文字のみを入力すると正常に表示されますが、
タグを入れるとおかしくなります。
例:<a href="index.html">別ページ</a> を入力フォームに入れて送信すると
http://localhost/ "index.html/" というURLになる
storngなどの装飾タグでは問題ありませんでした。何が原因でしょうか?
>>123 なんかよく分からんが表示ページのとこを
<?=$form_date?>から<?=htmlspecialchars($form_date)?>
にすればいいだけの話なんじゃないの?多分。
126 :
125 :2006/11/08(水) 16:17:20 ID:???
あるいは、タグをちゃんと有効にして表示はさせたくて、 でもリンクタグを書くと "index.html" と左右に " がくっついたURLになっちゃう、 って話なら、<?=stripslashes($form_date)?> かなと思う。 クロスサイトスクリプティング問題バリバリだから表のサイトで公開するなよ、と思うが。
127 :
nobodyさん :2006/11/08(水) 16:40:35 ID:X5fG3I/H
すみません、教えてください。 今、「超極める!PHP」という本を読んでいるのですが、 098ページのところに session.cache_limiter設定を利用するには セッション管理を開始しなければなりません。 セッションが必要な場合でもキャッシュ制御を 行いたい場合は多くあります。 このような場合はheader関数を用いてキャッシュ制御を行います。 と、書いてあるのですが、この「セッションが必要な場合」というのは 「セッションが必要ない場合」の打ち間違いでしょうか??
128 :
123 :2006/11/08(水) 16:41:58 ID:???
>>126 ありがとうございます。この方法で思い通りに出来ました。
>>128 そもそもマジッククオートなんてOFFにしてしまえよ、って思うが。
以降の文脈次第だな そこだけ切り出されてもどちらとも言える
> セッション管理を開始しなければなりません。 > セッションが必要な場合「でも」キャッシュ制御を・・・ ってのは論理的におかしいわな。 おそらく筆者は、 ・キャッシュ制御は基本的にsession.cache_limiterでやる ・でもセッションの必要がないならheader()でやる っていう流れで説明したいんだろうな。
例えば、参加型のレビューサイトを作るとします。 PHP作れば問題ないと思いますか? 言語が色々ありすぎて、どれから学べば良いのかわからんのです。
言語なんて好みで選べばいいじゃん。
>>133 どれも大して変わらないけどSQL分かってた方が良い。
まあとりあえずPHPでいいんじゃね?
138 :
nobodyさん :2006/11/08(水) 21:00:25 ID:QUV620Zg
アンケートスクリプトを作ってます。 一ヶ月間、1件=5項目としてデータとして保存し、 管理者のみ管理画面から回答をみることができる仕様です。 トータル件数10000件集まると仮定したら ファイルとMysqlどちらを使用するのが妥当ですか?
どっちでもいいよそれくらいだったら 早く作れる方選べよ
>>138 アンケートの内容にもよるけど、分析に使えるデータを含むなら、
MySQLがいいと思う。
感想だけとかなら、どっちでもいいけど。
>>138 ちょっと質問がよくわからないんだが、
・一ヶ月に一度、5問で構成されるアンケートを一つ作成する
・アンケートに回答する人は1アンケートにつき10000人とする
ってことでOK?
あとそのアンケートに回答する人ってのはどういう人間だ?
自分で管理してる会員か?それともたまたまアクセスしてきたユーザか?
1万件くらいなら別にどっちでもいいね DB使う利点が分からないならあえて使う必要もないかと
何も考えずDB使え
144 :
138 :2006/11/08(水) 22:19:37 ID:???
回答ありがとうございます。 Mysqlを使いたいと思っておりますが10万件を超えると運用に耐え難いと聞きました。 アンケート件数がたくさんあるので10万は軽く超えてしまいます。 この場合、アンケート枚にデータファイルを別々に作成、さらに時間毎にデータをわけて記録 することでMysqlでデータをすべて記録するよりも早いかと考えております。 この考えは間違っておりますでしょうか?
PHP4とPHP5はどちらが処理が早いですか?
PHP5
>>144 別にいいんじゃない?とりあえず作ってみれば?
>>148 ベンチでも取ったのか?
同じ処理なら5のほうが早い。
151 :
145 :2006/11/08(水) 22:33:41 ID:???
152 :
145 :2006/11/08(水) 22:34:47 ID:???
ベンチとってからいえやクズ
ここの回答者はバカばっかりだな
//------------ここまで自演------------
155 :
1 :2006/11/08(水) 22:59:23 ID:???
| | ∩___∩ | | ノ _, ,_ ヽ (( | プラプラ / ● ● | (=) | ( _●_) ミ _ (⌒) J )) 彡、 |∪| ノ ⊂⌒ヽ / ヽノ ヽ /⌒つ \ ヽ / ヽ / \_,,ノ |、_ノ
ワロチww
PHP5がはやいってやつはバカ
まぁ、どっちも実用的な動作で動いてくれるからどっちでもいいじゃん 開発者の習熟度とか好みとか必要な機能で選べばヨロシ
動作とかww速度の間違いwww もう寝るwっうぇw
凄い下質かと思いますが、前から気になっていたのでお願いします。 1:PHPの書き出しを、 <?php ?> にするのと <? ?>にするのとあまり変わりないのですが、 <phpとした方が良いのでしょうか?それとも関係ないのでしょうか? 2:printとechoとともに表示されますが、どちらで書いた方がいいのでしょうか? 自分の場合は混雑しています。 3:requireとrewuire_onceって特に違いありませんよね? リファレンスも見たのですが、実用を考えるとどうした方が良いのかな? っと思い、質問した次第です。
>>144 10万件超えると耐え難いってのは検索速度が遅くなるから、って話。
で、その理屈で言えばファイルの場合は1万件以下ですでに遅くて耐え難いです。
ファイルで分割ができるならDBでもテーブル分けちゃえば解決するよ。
>>161 1.機能としては何も変わらないです。
問題は<?hoge ?>ってのを使う仕組みはPHP以外にもあるってことで(XMLなど)
そういう別の仕組みを併用する場合に<? ?>では誤動作して困るので<?php ?>が推奨されてます。
その辺をちゃんと踏まえて、問題ないのが分かってるんであれば<? ?>も便利だと思います。
2.一緒です。書き慣れた方を使えばいいでしょう。
それが両方あるのは、他の言語で慣れた方を使えるようにという配慮です。
3.onceが付くと多重読み込みを防止できます。何度も繰り返して読み込みたい場合以外は
誤動作防止・処理速度高速化のためにもonceの方を使うのが推奨されます。
例えば a.php と b.php でそれぞれ c.inc を読み込むようにしていた場合に、
a.php で b.php を読み込むような処理にしても c.inc が2度読み込まれるのを防げます。
shareで「FootBall Manager 2006」を落として、いざやろうとしてもできません。 デーモンでは無理みたいです。 CD−Rに焼かないと駄目みたいなのですが、普通に焼くだけでは動きませんでした。 どのように焼けば起動しますか? ど素人ですが、ご教授宜しくお願いします。
>>164 スレ違いに気付かないほど頭悪い君には無理。諦めれ
168 :
161 :2006/11/09(木) 01:18:59 ID:???
>>163 ありがとうございます。非常に納得しました。
とりあえず、1については<?php?>で書くようにします。(少なくとも1行目は)
また、3についても意味が分かりました。
きちんとご説明いただきありがとうございました。
新しいの使えばいいじゃない 人間だもの
PHP5.1.xはかなり速いみたいだよね。俺も乗り換えるかな〜
マシンの性能が伸びてる昨今、 体感的に爆発的に変わるものじゃないでしょ。 PHPと他の言語を比べてもそれは言える話だけどね。
いやー、規模でかくなって取得・表示するデータ件数が増えたりすると 変数処理の速度とループの速度の性能差は体感レベルで分かるくらい差が出るよ。 マシン性能のおかげで違いなんて出ないとか言ってるのはちゃんとベンチ取ってないか単なる詭弁だとオモウ
forで100万回ループしてみろphp4がはやいことがわかるだろクズ共。 説明させんじゃねえ、市ね
一昔前なら回線速度が遅かったから、WEBアプリの実行速度なんて それに比べればゴミみたいなもんだったが、今じゃアプリの速度=体感速度だしな。
>>171 それは5.0だろ
速くなったのは5.1から
>>169 の素数プログラムで
PHP5.1.4 4.3sec
PHP5.2.0 4.1sec
5.2で少し速くなってた(Win32 Apache2.0 PenD 3.0GHz)
181 :
180 :2006/11/09(木) 07:25:50 ID:???
だからおまえらみたいなカスによるベンチの結果なんてどーでもいいよ
フォルダのサイズを計算して一定数以上のファイル数または容量になったら 中身のファイルをすべて削除するスクリプトってない?
自分で作れ
ページの更新日時を自動的に表示させたいのですが、 現在のページのファイルって、どのように取得したら良いのでしょうか? $_SERVER["REQUEST_URI"]からファイルを抽出できそうですが、 index.htmlを省略された場合とかダメですよね。
__file__
>>187 そんな便利な定数がありましたか。ありがとうございます。
>>185 あるかないか聞いてんだろ
しらねーなら答えるなクズ
テメーも作れないくせによww
多分ないよ 態態PHPで書く理由が分からん
ID隠してるやつの煽りまでいちいち受けなくていいよ 多分それ本人じゃないから
PHP_SELFにもSCRIPT_NAMEにもPATH_INFOが入ってしまうので basename($_SERVER['SCRIPT_FILENAME']); を使おうと思うんですがどうでしょう?
事故解決しました。お騒がせしました。
「素数計算の100万回ループ」とか、現実的にはあまり意味の無い ベンチをとって、勝ったの負けたの騒いでるキモヲタは全員氏んどけ。 そんな無意味なベンチはパソコンオタクのオナニー趣味でしかない。
可愛そうな子・・・
>>194 はいはい、乙乙
黙ってスルーできないキモヲタのくせに吼えるな
<ahref="index.html">トップページ</a> <ahref="profile.html">プロフィール</a> <ahref="inquiry.html">お問い合わせ</a> 上記のタグがtemplete.phpに記述されているとします。 これを配列に代入して<?=$templete[$i]?>で表示するようにしたいのですが、 templete.phpのソース内にコードを追記せずに実現したいのです。 つまり、hyoji.phpに<?=$templete[$i]?>(forで$iを表示する)を記述して 表示出来るような。 フォームから配列に代入して表示するのは出来るのですが、 そうじゃない方法はどうすればいいかと思い、質問しました。
>>198 Smartyなりなんなりのテンプレートエンジン使って下さい
201 :
198 :2006/11/09(木) 16:37:25 ID:???
>>200 ちょっと説明づらいのですが、1つのファイルから特定のソースを配列に
代入して表示したい、と言うことです。
例えば、
>>198 のタグがtemplete.phpに記述されているとします。
表示用のhyouji.phpには
<?php
for($i=0;$i<$max_array;$i++){
echo "$templete[$i]"."<br>";
}
?>
というようなソースが入っていて、これをブラウザで表示すると
トップページ
プロフィール
お問い合わせ
と表示されればいいのです。上記のコードではforで回しているので
順番に表示されますが、
<?=$temple[0]?><?=$temple[2]?><?=$temple[1]?>
こういう風に書いていくと、表示位置も入れ替えられるので、便利だと思いまして。
$template = file('templete.php'); まあ好きにすればいいけどさぁ
テンプレートじゃないじゃん
どうせなら templete.phpを index.html,トップページ profile,プロフィール inquiry.html,お問い合わせ として、 $template = file('templete.php'); foreach($template as $line){ $items = explode(",", $line); echo "<a href=\"{$items[0]}\">{$items[1]}</A>"; } とか。
205 :
204 :2006/11/09(木) 17:09:59 ID:???
あ、 templete.phpは index.html,トップページ profile.html,プロフィール inquiry.html,お問い合わせ の間違え
206 :
198 :2006/11/09(木) 17:11:55 ID:???
>>204 例えば別ファイルにすると、ファイル数が増えるのと
余計なタグが入っていた場合、正常に表示されなくなりますよね?
fileで読み込むと
>>198 のソースだけなら良いのですが、その後を考えると
反応的ではないと思ったんです。なので
$templete[]="<ahref="index.html">トップページ</a> ";
こういう風に入ってくれれば出力しやすいし、出力する場所も選べるので
便利なのですが、いまいちソースの組立が上手くいかなくて。。
207 :
206 :2006/11/09(木) 17:12:30 ID:???
反応的→汎用的 です。
∧ ∧ ヽ(・∀ ・)ノ (( ノ( )ヽ )) < >
ファイルが増えるのがイヤとか言ってるが、 他の人は逆に外に出すべきだと考えると思うぞ。 表示内容を変えるたびにコードをいじるほうが不自然。 余計なタグ云々なんて、いくらでも整形できるだろうが...。
>>206 実際に運用してみると、変わりそうで変わらないこと、結構あるよ。
先々のことをよく考えて固定で作った方がわかりやすいし、簡単だよ。
汎用的に作ればかっこいいけどさ。
ファミコン対パソコンみたいなもんだよ。
フローチャート書いて熟考すると吉♪
214 :
nobodyさん :2006/11/09(木) 22:58:24 ID:W4pI1qAG
日付の変換で、20061231に1足したら20070101ってしてくれる関数ありませんでしたっけ?
>>214 PHPマニュアルのdateのところよ〜く見てみて。
答えが載ってるから(リンク先のmktimeも熟読してね)
216 :
nobodyさん :2006/11/09(木) 23:09:17 ID:W4pI1qAG
>>215 探してるけど見つからないから聞いてるのに・・・いけず・・・
217 :
nobodyさん :2006/11/09(木) 23:10:22 ID:W4pI1qAG
でもmktimeは熟読しても関係ないと思う
219 :
nobodyさん :2006/11/09(木) 23:23:10 ID:W92sr8u2
似たような質問が出ていますが・・ htmlのソースを書き出したテキストファイルからの特定語句の 抜き出しについてお聞きしたいことがあります。 $kensaku="[ァ-ヴー][ァ-ヴー・]+|[a-zA-Z0-9\.\-\s]*[a-zA-Z][a-zA-Z0-0\.\-\s]*"; $fp=fopen("source.txt","r"); $fr=fread($fp,filesize("source.txt")); $str="$fr"; $word = array(); while(1){ $kensaku2 = mb_ereg("$kensaku",$str,$match); if($kensaku2 == FALSE){ break; }else { $match = $match[0]; array_push($word, $match); } $pos = strpos($str, $match); $str = substr($str, $pos+$kensaku2); } print_r($word); fclose($fp); とすると、ソース内のカタカナやアルファベットの語句は抜き出せるのですが・・ title="IPアドレス" class=crosslink title="Internet Protocol Address" class=crosslink 上記のように、 ソースに含まれる title=" " class=crosslinkの" "の中 の語句のみを抽出したいのですが、うまくいきません。 どのようにすれば良いでしょうか?
mktimeって32日を指定すればちゃんと翌月1日に直して返してくれるだろ?
221 :
nobodyさん :2006/11/09(木) 23:25:19 ID:W4pI1qAG
あ、こんな感じですね。アドバイスくれた人、ありがとう。 $date = 20060101; echo date('Y/m/d H:i:s', strtotime($date)); echo '<hr>'; echo date('Y/m/d H:i:s', mktime(0,0,0,date('d',strtotime($date))+40,date('m',strtotime($date)),date('Y',strtotime($date))));
>>219 preg_match('/title="([^"]*)"/', $str, $match)
echo $match[1];
$day = date("Ymd",mktime(0,0,0, 12,32,2006)); これで$dayには20070110が格納されるよ dateは日付の整合性チェックをしてくれないけど mktimeはしっかり者だからちゃんとチェックしてくれる ちなみにPHPって感じの変数名も使えるのな
224 :
219 :2006/11/09(木) 23:45:08 ID:W92sr8u2
>>222 いえ、title=" "ではなく、title=" "のあとに「class=crosslink」が
くる部分・・title=" " class=crosslink の" "の語句のみを取得した
いのです。そこでつまずいておりまして。。。
意味が分からんぞ 対象文字列は何で、結果何が取り出せてればいいんだ
>>224 じゃあ
preg_match('/title="([^"]*)" class=crosslink/', $str, $match)
echo $match[1];
でいいんでは。
227 :
219 :2006/11/10(金) 00:12:09 ID:0rGbXNdx
ええ、そうなんですが、title=,"",class=crosslink は省いた 状態で、" "の中身だけが欲しいのです。
要するにサブパターンを知らんということだろうか
イマイチよく分からないけど、それなら226のサブマッチでいいんじゃないの?
"[^"]*" -> "[^"\\\\]*(?:\\\\.[^"\\\\]*)*"
231 :
219 :2006/11/10(金) 00:26:22 ID:0rGbXNdx
つまり、$word='/title="([^"]*)" class=crosslink/' preg_match('/([^"]*)/', $word, $match); みたいな感じで、さらに検索をかければ良いのでしょうか?
ハァ?
233 :
nobodyさん :2006/11/10(金) 00:29:55 ID:LNYLSoFr
phpMyAdminのテーブル内容を表示すると、 「プライマリーキーを定義すべきです」 と編集、削除ボタンが「?」になるのですが、原因は何なんでしょうか?
>>227 おまえ、1度も実行しないで言ってるだろう。
>>226 ですでに"〜"の中身だけ抜き出してるぞ。
>>233 俺思うにプライマリキーを定義すべきなんじゃね?
echo uniqid(""); でユニークなIDを生成出来ますが、 4桁など桁数を指定して生成するにはどうしたらいいのでしょうか?
238 :
219 :2006/11/10(金) 00:42:26 ID:0rGbXNdx
>>234 実行しましたよ。Array ( [0] => title="IPアドレス" class=crosslink[1] =>・・
しかし、こうなってしまいました。。。
>>238 [1]の内容が肝心だろww
わざとやってんのかww
240 :
nobodyさん :2006/11/10(金) 00:58:24 ID:9aG6gw2r
>>223 あ、親切な方だ。ありがとうございます!
241 :
219 :2006/11/10(金) 01:10:33 ID:0rGbXNdx
>>239 わざとなんてことはないですよ。
echo $match[1]; で出力しようとすると何も表示されないのです。
それで、print_r($word); で出力しています。
>>241 なんか環境がおかしいんじゃないの?
$str = ' title="IPアドレス" class=crosslink ';
preg_match('/title="([^"]*)" class=crosslink/', $str, $match);
echo $match[1];
で結果が
IPアドレス
243 :
219 :2006/11/10(金) 01:27:13 ID:0rGbXNdx
>>242 うーん・・、219のソースで
$kensaku2を preg_match('/title="([^"]*)" class=crosslink/', $str, $match);
に変更して、出力を echo $match[1]; とした場合、正しく表示される
ものでしょうか?うまく表示できないのですが・・・
219のソースなんざ知らん。 元々のソースが汎用性のない腐ったソースなんだから そこにどう組み込むかはお前が考えるべきことだ。
>>243 $str = ' title="IPアドレス" class=crosslink ';
$word = array();
while(1){
$kensaku2 = preg_match('/title="([^"]*)" class=crosslink/', $str, $match);
if($kensaku2 == FALSE){
break;
}else {
$match = $match[1];
array_push($word, $match);
}
$pos = strpos($str, $match);
$str = substr($str, $pos+$kensaku2);
}
print_r($word);
とした場合の結果
Array
(
[0] => IPアドレス
)
これで何が不満?
246 :
219 :2006/11/10(金) 01:43:41 ID:0rGbXNdx
>>245 いえ、全くございません。ありがとうございます。
$match = $match[0]; だと、
Array ( [0] => title="IPアドレス" class=crosslink
となってしまったのに、
$match = $match[1]; とすると
正しく、Array ( [0] => IPアドレス と表示されました。
無知な私に[0],[1]とで、どのような違いがあるのか教えていただけると
ありがたいのですが。
ここってPHPとMySQLに関することは聞いては駄目なのでしょうか? データベース板には質問スレとか無くて・・・。
248 :
246 :2006/11/10(金) 02:15:29 ID:0rGbXNdx
なるほど。preg_matchの使い方が理解できました。
ファイルのアップロードに関して、どちらかというとタグ的な内容を含んだ質問になるのですが、 複数の連番ファイルを一括してアップできるスクリプトを作ろうと思っています。 通常ファイルのアップには「参照」ボタンを押すなりして、ファイルへのパスを入力する必要がありますが、 その際に「E:\jpg\01.jpg」を指定したとして、「E:\jpg\30.jpg」までを一括してアップさせることは可能でしょうか。 fileにはvalue値の設定ができないため、そのような処理は不可能でしょうか。 ユーザがいちいち30個の欄に1.jpg、2.jpg・・・と指定する手間を省けるスクリプトを作ろうとしています。 環境 => OS:FC3 PHP:5.1.5
ちみは、自分の知らないうちにPCの中のファイルを勝手にアップロードされたらどう思う?
>>250 できないことはないけど、利用者にはわかりにくくなりそう。ファイル名とかある程度固定されちゃうだろうし。
>>249 以前何度か聞いたのですが、板自体が過疎化しているので、回答がありませんで・・。
やりたいことは、MySQLの特定のテーブルにデータが入っていたらTRUE
入っていなかったらFALSEで分岐出来たらいいのです。
<?php
$sql = "select * from test_table";
$rst = mysql_query($sql, $con);
if(rst){
while($row = mysql_fetch_array($rst)) {
echo $col["id"];
}}else{
echo"登録がありません";
}
?>
こういうので出来ると思ったのですが、無理みたいで・・。
もしよろしければアドバイスいただけると助かります。
>>254 $sql = "select * from test_table";
$rst = mysql_query($sql, $con);
if(mysql_num_rows($rst)){
while($row = mysql_fetch_array($rst)) {
echo $col["id"];
}
}else{
echo"登録がありません";
}
かな
256 :
254 :2006/11/10(金) 03:04:48 ID:???
>>255 出来ました!mysql_num_rowsを使うんですね。
勉強になりました。ありがとうございます。
>>250 通常fileタイプのinputタグのvalueは無視されるから、
サーバーサイドでやるのは無理。
258 :
250 :2006/11/10(金) 03:18:25 ID:???
レスdクスです。やはり余り現実的でないということでしょうか。 とりあえずZIPにするよう促すようにしてみます。 実はZIPにする手間を省くのが目的だったりしてます。 サーバ側でzip圧縮すればユーザの手順は簡略されますし。 (一昔前だとZIP圧縮するだけでもPCがモタついてイライラした記憶が・・・)
クライアントサイドなら方法が無いわけでもない。 ただし敷居が高いうえに、板違い。
まさかIEコンポーネントだのActiveXだのFirefoxのエクステンションとか言い出さないよね?
Javascriptだけでで叶姉妹
JSじゃムリじゃない?ActiveXならできるけど。
264 :
nobodyさん :2006/11/10(金) 10:36:19 ID:cXndf+IB
uwscスクリプト使えば可能
そのスクリプトをサーバーサイドから呼び出すことはできんのか?
<body> <p>001</p> <p>002</p> <p>003</p> </body> 上記のような分で、 <p></p>に囲まれている部分だけ取得して配列に格納したいのですが、 どのような方法があるのでしょうか?
preg_match_all() XML_HTMLSax3
>>266 頑張ればstrpos+substrでもできなくはないよ
269 :
nobodyさん :2006/11/10(金) 15:20:56 ID:yWCpYZUV
正規表現で文字列を取り出し、配列に格納し、出力すると Array ( [0] => Array ( [0] => A [1] => B [2] => B [3]=> C [4] => D [6] => F) となり、[1]と[2]の値が同じなので、array_uniqueで置換すると、 Array ( [0] => Array ( [0] => A [1] => B [3]=> C [4] => D [6] => F) というふうに、配列の番号が詰められず、[1]の次が[3]となってしまいます。 うまく配列の番号を詰める(連番となる)にはどうすれば良いでしょうか?
array_valuesでもかければ?
>>269 arraymergeでもインデックスの付け直しが出来た気がする
272 :
nobodyさん :2006/11/10(金) 15:29:33 ID:yWCpYZUV
>>270 array_valuesでできました。ありがとうございます。
273 :
nobodyさん :2006/11/10(金) 15:31:51 ID:1a5fPov5
サーバサイドの利用可能なドライブ情報を取得したいのですが、 何か良い方法はあるでしょうか? 公式マニュアルは参照しましたが、カレントディレクトリの情報は 取得できるものの、ドライブ情報を取得できるものは見当たりませんでした。 最悪、a:/〜z:/をループさせつつ総当りでscandirとかすることになるのかな と考えていますが、できれば避けたいと考えています。 環境:WinXP SP2,Apache2.2.3(SSL付き) PHP5.1.6 経験:PHPは10日間くらい。
>>273 たしかpeclでwin32のapiの関数呼びたい放題のやつがあった気がするので、そっちを当たってくれ。
276 :
nobodyさん :2006/11/10(金) 15:47:10 ID:1a5fPov5
277 :
nobodyさん :2006/11/10(金) 15:49:55 ID:1a5fPov5
>>275 うお、追加のお答えありがとうございます。
なんか標準じゃつかない関数みたいなので勉強が必要ですが、
APIの名前教えてもらって助かりました。
<? if($name==""){ echo"$nameが空です"; }else{ echo $name; } このような入力チェックがあったとして、name以外に変数が増えた時 その分上記のソースをコピーしていました。 しかし、基本的には変数名以外の内容は同じですし、数行のコードをコピーすると 長いので、もっと良い方法が無いかと思い、質問しました。
>>278 値の整合性チェックは時と場合により結構かわるから、
これをやれば大丈夫というのはないよ
汎用的な validatator も探せばあるだろうけど、使い方が直感的でないこともしばしば
もし、本当に変数名以外に違いがないなら
配列にでも一度入れてループすれば良い
$checkArr = array('name' => $name, 'age' => $age);
foreach ($checkArr as $key => $val) {
if ($val=="") {
echo "$keyが空です";
}
else {
echo $val;
}
}
>>278 $param_list = array('name', 'hoge', 'hoge2'); //パラメータ名の一覧
foreach($param_list as $param) {
if($_GET[$param] == ""){
echo"$_GET[$param]が空です";
}else{
echo $_GET[$param];
}
}
お前いつもここに張り付いてんの? さっさと就職しやがれ!
>>278 なんか知らんが配列をforeachすりゃいいんでね?
foreach ($_POST as $key => $value) {
if ($value === "") {
echo "$keyが空です";
} else {
echo $value;
}
}
284 :
sage :2006/11/10(金) 16:26:30 ID:1a5fPov5
入力フォームのnullチェックとかなんかな。 実際には不正な文字列じゃないかもうちょとチェックするので あまり同じ関数の使い回しはしないんじゃないかなあ。 Javascriptになるけど、こんなの書いたりもしてました。 画面遷移なしでも多少チェックしたいときもあるし。 ※ソースは適当です。 <input type=text name=userid value=""> <input type=text name=pass value=""> <input type=submit onclick="javascript:nullcheck(this); return false;"> function nullcheck(obj) { obj=obj.forms[0]; for(var i in obj.elements.length) { if(obj.elements[i].type != "text") continue; if(!obj.elements[i].value) { alert(obj.elements[i].name + "が入力されていません。"); return false; } }
285 :
nobodyさん :2006/11/10(金) 16:28:44 ID:1a5fPov5
うお、みんなごめんよ。。。
オイラの場合 function err($txt) { echo $txt; echo "</BODY></HTML>";//この辺はスクリプトによって変える exit; } if ($name == "") err("名前がない"); if ($mail == "") err("メールがない"); if (is_numeric($num)) err("NUMBERは数字で入れれ"); みたいにする。
お呼びじゃないよ
288 :
286 :2006/11/10(金) 16:52:24 ID:???
最後 if (!is_numeric($num)) err("NUMBERは数字で入れれ"); だった。
289 :
278 :2006/11/10(金) 17:46:15 ID:???
>>279-280 ,282
返答が遅れてすみません。
foreachを使う方法だと、表示位置が指定出来ませんよね?
テーブル(<table>)の表などで使用する場合、不適切だと
感じられるのですが、どうなのでしょうか?
>>289 そもそも最初のサンプルが悪い。
コードの途中でecho使うこと自体が不適切。
>>289 どういうこと?
別にテーブルの中でforeach使えば?
そういう構成なのか なら $var[$key] = (empty($_REQUEST[$key]) ? "$key空" : $...; とでも
>>291 テーブル表示ループの中でデータのチェックやってんだよ。
典型的なコードとデザインが分離できてない素人設計。
294 :
278 :2006/11/10(金) 19:17:03 ID:???
すみません、とりあえず↓しました。 <table border="1"> <? $param_list = array($name,$age,$sex,$address,$comment); //パラメータ名の一覧 foreach($param_list as $param) { if($param == ""){ echo"<td>"; echo"$paramが空です"; echo"</td>"; }else{ echo"<td>"; echo $param; echo"</td>"; }} ?> </table> ただこの場合、フォームから受け取ったarrayの値が空の場合は表示されなくなります。 素人設計ですが、向上心を持ってやっていきますので、再度アドバイスお願いします。
じゃあアドバイス。 まず表示部分でそんなチェックすんな。 事前にチェックを済ませて結果を変数に格納し 自由なレイアウトで表示できるようにしろ。
>>294 > if($param == ""){
$paramは必ず中身がないんだから
> echo"$paramが空です";
$paramを表示できるわけないじゃん。
>>280 でパラメータ「名」の一覧を使えって言ってるのに
なんでデータ値そのものをリスト化しようとしたりするの?
あと$nameとか$ageとか、ひょっとしてregister_globalsをONにしてんのか?
$_GETか$_POSTか$_REQUEST使えって。
298 :
nobodyさん :2006/11/11(土) 12:54:56 ID:mWra3uS0
頑丈なロック機能を求めていたらパラレルロックって言葉にたどり着いたのですが どういうふうに組むのでしょうか?
300 :
298 :2006/11/11(土) 13:58:29 ID:mWra3uS0
作者に聞くのが一番ですよね、でも自分が作者だったら教いちいちえたくないかもしれない(笑) 壊れにくいロックを作ってどんな仕組みでしょうか、奥が深いですね。 たとえばググルとよくみかける二重ロックはどうなんでしょうか? ファイルをロックする前に、ロックファイルを別に用意して、 そのロックファイルが存在してたら別の処理にさせるという仕組みでした。
壊れ「にくい」ロックなんてナンセンスなものどうすんだよ
302 :
298 :2006/11/11(土) 14:12:22 ID:mWra3uS0
こだわる必要はないですかね? fcloseだけで十分でしょうか?
同時アクセスや、途中での切断や移動などを考えると、ロックってなにげに 難しい。 アクセスが多いサイトほど、いろいろ起きるし。
>>300 微妙に意味不明 >二重ロック
それって単なるロックファイル使ったプロセスロックじゃないの?
>>302 十分なわけないじゃん。
「壊れにくい」じゃ意味ないから「壊れない」ロックを使えってことじゃ?
強力なロック機構が欲しければRDBMS使うのが1番かと思うけど。
>>303 RDBMS使わないにしても、ロックディレクトリを使ったプロセスロックで
壊れた試しって俺は無いんだけど。
途中での切断・移動って一定時間過ぎたロックを強制削除、じゃダメなのか?
どっちかというと「壊れない」かつ「アクセスを漏らさず処理できる」が難しい。
単純なロックだとアクセス過多になると大量のタイムアウトを出してしまって
アクセスカウンターとかは本来の数を記録できなくなる。
そういう意味で、キューに溜めたクエリーを順次処理するRDBMSが1番。
まぁ、これも待ち受けの最大数があるんでそれ超えるとダメだけど、
そこは色々とチューニングでカバーできるし。
flockしとけば毎秒2万回でも壊れない。 でも書き込んでる途中で電源が切れると壊れる。 MySQLのマニュアルにも不意に電源が切れた場合、 壊れる可能性があることは明記されている。
猫とおかんには適わないな
実際にあるファイルへの毎秒何万回ってアクセスさせて ロックの頑丈さをためすコードってないの?
>>307 並行で走らせたプロセスで同時アクセスさせないといけないから
単なるコードでは難しいよ。WindowsとUNIXとでやり方変わるし。
ApacheBenchとか使ってアクセスかけた方が手っ取り早い。
でもロックの頑丈さを確認するだけなら、ロックの判定やON/OFF処理に
片っ端からsleep()入れてって、アトミックじゃない処理の部分を
間隔広げてやるだけで簡単にテストできるよ。
310 :
nobodyさん :2006/11/11(土) 15:51:18 ID:UxXI6HSf
メールが送信できたかどうかを確認するためにReturn-Pathを設定したいのですが、 mb_send_mailの第5引数が設定できません。 環境はレン鯖でPHP4.4.4でSafeModeがONです。 何か良い方法ありましたら宜しくお願いします。
311 :
nobodyさん :2006/11/11(土) 16:04:19 ID:U7uBumak
配列の要素を標準出力する関数ってなんでしたっけ??
Sleepは検証にならないよ やんわり動作してるアプリではアルゴリズムが全て
var_dump,print_r
>>312 sleep入れて待ってる間に別窓からアクセスしてやればいいんじゃないの?
316 :
310 :2006/11/11(土) 16:27:02 ID:UxXI6HSf
エラー内容 mb_send_mail() [function.mb-send-mail]: SAFE MODE Restriction in effect. The fifth parameter is disabled in SAFE MODE PHPバージョンUPやSafeModeの設定変更はレン鯖で無理なのですが、代替案はありますでしょうか?
>>316 sendmail使わないでPEARでSMTPでもしゃべらせれば?
おまえらなんでボランティアで回答できるの?
回答が楽しいから。
320 :
310 :2006/11/11(土) 17:30:37 ID:UxXI6HSf
>>317 ありがとうございます。PEAR :: Mail_mimeDecode Mail_Mimeってのを調べてみます。
またはCGIとして動作させるか、Perlでsendmail使う方法などになりますかね・・・
> flockしとけば毎秒2万回でも壊れない。 毎秒二万回って凄いなあ。目がくらむ
CSV(test.csv)のデータからTableに整形して出力させたいのですがちょっと教えてください。 1991,1,タイトル1,サブタイトル1 1991,2,タイトル2,サブタイトル2 1991,3,タイトル3,サブタイトル3 1992,3,タイトルA,サブタイトルA 1992,5,タイトルB,サブタイトルB 1992,7,タイトルC,サブタイトルC 1993,10,タイトル5,サブタイトル1 とあるデータをTable整形して出力させたいので、↓にしたのですが <table border="1"> <?php $fp = fopen("test.csv", "r"); while ($data = fgetcsv($fp, 10000)) { print "<tr>"; foreach ($data as $d) { print "<td>$d</td>"; } print "</tr>\n"; } ?> </table> これを次のように、同じ年のところはrowspanでつなげて出力したいのですがどうやったらいけますでしょうか? <tr><td rowspan="3">1991</td><td>1</td><td>タイトル1</td><td>サブタイトル1</td></tr> <tr><td>2</td><td>タイトル2</td><td>サブタイトル2</td></tr> <tr><td>3</td><td>タイトル3</td><td>サブタイトル3</td></tr> <tr><td rowspan="3">1992</td><td>3</td><td>タイトルA</td><td>サブタイトルA</td></tr> <tr><td>5</td><td>タイトルB</td><td>サブタイトルB</td></tr> <tr><td>7</td><td>タイトルC</td><td>サブタイトルC</td></tr> <tr><td>1993</td><td>10</td><td>タイトル5</td><td>サブタイトル1</td></tr>
メソッドの中にメソッドって、 変数のスコープはどうなるんでしょうか? 参考になるような記事などありますか?
325 :
nobodyさん :2006/11/11(土) 18:24:42 ID:mWra3uS0
大規模サイトでカウンター動かすときにflockだけで漏れなく動かせるんですかね?
>>322 次に別の年が出てくるまで出力を変数にバッファリングしといて、
連ケツ不要ならそのまま出力、必要ならRowspan出力してから
バッファを持ってくる、とか。
>>323 普通にローカルになるけど、そんなオブジェクト論理的にありえなくね?
一時期廃止されてたよね関数の入れ子
>>328 ありがとうございます。
まずいんですか・・・
ネストでけるって初めて知ったわ
htmlタグしか知らなかった俺がphp勉強してから2週間 最初はこのスレの質問の意味さえ全くわからなかったが、今では少しは理解できるようになった あと三ヶ月まじめに勉強して模範的回答できるようになるから、おまいら待ってな
>>331 下らねぇ質問はここに書き込みやがれ専属の回答スペシャリストめざせ
合格率は0.3%
333 :
nobodyさん :2006/11/11(土) 21:09:32 ID:mWra3uS0
サーバ上のファイルに記録したデータを データが作られてから24時間後に削除することはphpだけはできないですよね?
>>333 PHPだけじゃ無理だな〜
cronでPHPを定期的に起動してチェックするしかないと思うお
>>333 WebアプリケーションとしてのPHPからだと24時間後に必ず削除することはできない。
アクセスごとに24時間以上経っているデータを削除させることはできるので、
この方法で十分であれば選択肢の一つにはなる。(PHPのセッションではこの方法で期限切れセッションファイルを消している)
また、CLI版限定ではあるもののPHPで作られたcronもあったりする。
336 :
322 :2006/11/11(土) 21:27:06 ID:???
>>326 回答どもです
人様のを参考にさせてもらってる程度ではちょい厳しそうですね。
使う関数を教えて頂けると助かります
セッションってさ、session.gc_maxlifetimeで指定した秒数は 接続が維持されるのは保障されるんだよね? session.gc_maxlifetimeを過ぎた場合は指定した確立で セッションの初期化時に削除される。 ※クッキーはブラウザを閉じるまで有効とした場合
>>322 てきとーだけどこんな感じ?
<table border="1">
<?php
$fp = fopen("test.csv", "r");
$year = ""; $rows = array();
while ($data = fgetcsv($fp, 10000)) {
$next_year = array_shift($data);
if ($year != $next_year) {
print_year($year, $rows);
$year = $next_year; $rows = array();
}
$rows[] = $data;
}
print_rows($year, $rows);
function print_year($year, $rows) {
$rowspan = count($rows);
foreach ($rows as $i => $data) {
echo "<tr>\n";
if ($i == 0) print "<td rowspan=\"$rowspan\">$year</td>\n";
echo "<td>", implode("</td><td>", $data), "</td>\n";
echo "</tr>\n";
}
}
?>
</table>
339 :
338 :2006/11/11(土) 22:15:25 ID:???
ちょっと書き間違えた。 whileから抜けた後 × print_rows($year, $rows); ○ print_year($year, $rows); まあコメント欄に直接書いただけで、動作確認してないから、どっちにしろ動くかどうかわからんけど。
340 :
322 :2006/11/11(土) 22:53:29 ID:???
>>338-339 ありがとう〜〜〜
頂いたソースだと
$next_year = array_shift($data); の行に
parse error, unexpected '@' エラーがでてしまいましたが。
とっかかりが見えそうな気がしてきました
341 :
nobodyさん :2006/11/11(土) 23:02:33 ID:qWd4Y1Xf
以下のプログラムの処理をうまくループさせることができずに困っています
よろしければ、お教え願えないでしょうか?
配列 $value の内容-----
Array ( [0] => ツール [1] => データベース [2] => IEEE1394 [3] => カメラ
[4] => インターフェイス [5] => アプリケーション [6] => パソコン [7] => Java)
$encode = mb_convert_encoding($value[4],"UTF-8","Shift_JIS");
$url_encode =urlencode($encode);
$html="
http://thesaurus.weblio.jp/content/$url_encode ";
$html2=file_get_contents($html);
$utf=mb_convert_encoding($html2,"Shift_JIS","UTF-8");
$str="$utf";
$word = array();
while(1){
$kensaku2=preg_match('/title="([^"]*)" class=crosslink/', $str, $match);
if($kensaku2 == FALSE){
break;
}else {
$match_result = $match[1];
array_push($word, $match_result);}
$pos = strpos($str, $match_result);
$str = substr($str, $pos+$kensaku2);
}
$unique=array_unique($word);
$array=array_values($unique);
print_r($array);
それで、実行結果は、$value[4]を指定して,URLに格納しているので
Array ( [0] => interface [1] => いんたーふぇいす [2] => インタフェイス
[3] => インタフェース [4] => インターフェース )となります。
そこで、なにがしたいのかと言いますと、プログラムの最初で、$value[4]として
いますが、ループさせて、$value[0]〜[7]の分の結果を得たいのです。
これがどうもうまくいかなくて。。。長くなってしまいましたが、何卒。
>>341 foreach($value as $val) {
$encode = mb_convert_encoding($val,"UTF-8","Shift_JIS");
$url_encode =urlencode($encode);
$html="
http://thesaurus.weblio.jp/content/$url_encode ";
$html2=file_get_contents($html);
$utf=mb_convert_encoding($html2,"Shift_JIS","UTF-8");
$str="$utf";
$word = array();
while(1){
$kensaku2=preg_match('/title="([^"]*)" class=crosslink/', $str, $match);
if($kensaku2 == FALSE){
break;
}else {
$match_result = $match[1];
array_push($word, $match_result);}
$pos = strpos($str, $match_result);
$str = substr($str, $pos+$kensaku2);
}
$unique=array_unique($word);
$array=array_values($unique);
print_r($array);
}
じゃダメ?
>>341 なんでそんなことでつまずくのかそっちの方が不思議だ。
344 :
nobodyさん :2006/11/11(土) 23:42:34 ID:qWd4Y1Xf
>>342 全然OKです。ホントありがとうございます。
>>343 なんででしょ。色々と試したんですけどねぇ。。。
きっと検討違いなことをやってたんでしょうな。
346 :
nobodyさん :2006/11/12(日) 00:07:53 ID:AeUA6O/W
>>345 確かに、そのほうが簡略化して記述できますね。
でも、未熟なせいか、習慣になっているせいか、分けて記述していくほうが
見やすいんですよね。
こういうのって、熟練者は省略して書くものなんですか?それとも、人に
よりきりなんでしょうか?
人によりけり。
個人的には
$utf=mb_convert_encoding($html2,"Shift_JIS","UTF-8");
$str="$utf";
と
$unique=array_unique($word);
$array=array_values($unique);
はいくらなんでも無駄じゃ?って思ったけど、
>>345 の指摘してる場所はむしろそのままの方がいいと感じた。
基準としては読みやすさの他、
・そこに他の処理を加える可能性はあるか
・バグったときに一部を外したいと思ったとき外しやすいか
辺りも踏まえると明確にしやすいです。
その意味では
>>345 の修正は後で面倒なことになりやすい。
348 :
345(341) :2006/11/12(日) 00:23:34 ID:AeUA6O/W
>>347 なるほど。アドバイスありがとうございます。
$str="$utf"; に関しては、こうしないと処理が通らなくなってしまったので、
見た目むだな感じがしますが、仕方ないかと思って。
眼目となる処理も、そのための副次的な処理も同じようにずらずら書くと そこでのフローがどうなってるのか読み取りづらい ここに貼る分にはいいけど実際には、クエリを投げる部分と検索語を チェックする部分(とエラー処理)は関数化してループをスッキリさせたほうがいい
要所は関数にすべき、は同意。 でもループ処理も書けないような人にそれはまだムリな気はする。
register_globalsをONにしているのですが、これは問題あるのでしょうか? フォーム処理なども、$_POST["hoge"]ではなく$hogeなどにしています。
>>351 セキュリティ的に問題が多いので推奨されません。
将来的に廃止になる予定です。
>>352 と言うことは、フォームから値を受け取る時は常に
$_POST["hoge"]か$_GET["hoge"]にしておかなくてはいけないのでしょうか?
正直、$hogeというような書き方の方が便利なので、ほぼすべてこの書き方です。
ただ、セキュリティに問題あると言われると不安だし・・・
>>353 > $_POST["hoge"]か$_GET["hoge"]にしておかなくてはいけないのでしょうか?
基本的にはそう。まぁ、最初に$hogeに代入しちゃえば済む話だけど。
extract()を使う手もある。
個人的には$_GETや$_POSTはスーパーグローバルなんでかえって使いやすいけどね。
$hogeの方が使いやすいって言うってことはまともに関数化もしてないんじゃないの?
入力データとシステムで生成したデータは区別することを常に意識した方がいい、ってのもある。
register_globalsは特定のバージョンのPHPでは設定をONにしちゃうだけで
プログラムが何であれ攻撃を食らうセキュリティホールがある。
けど最新のはそこまで酷くないから、グローバル変数を使うときは
ちゃんと初期化をしてから使う、という原則を守ればそれほど危険ではない。
ただ、PHP6では無くなっちゃうのは確かっぽい。
> 正直、$hogeというような書き方の方が便利なので、 $hoge = $_GET['hoge']; と書くだけで初期化し忘れた$fugaがへんなことになるのが防げるんなら 安いもんなんでは。 個人的には初期化し忘れた変数を参照できるのが おかしいような気がするのでスーパーグローバルはセキュリティが・・・ ていう話はなんか変な気がするんだけど。
最近のPHPだとデフォルトが未初期化変数アクセスはNOTICE出るようになってるもんね。 でも面倒くさくてregister_globalsをONにしたいって人が、全部の入力変数をissetで チェックできるかっつーとそれもムリがある気はするけど。
>>356 register_globalsとスーパーグローバル変数は別ですよ。
359 :
nobodyさん :2006/11/12(日) 08:03:53 ID:a0k5e3E0
PHP勉強して3ヶ月です。 何を質問していいのかわからないので 質問したくなる話をふってもらえませんか?
質問がないなら質問しなくていいのでお帰りください。
361 :
nobodyさん :2006/11/12(日) 08:47:52 ID:a0k5e3E0
出会い系サイトとかにあるメールを受信すると ログインしたときに「新着メールが一件届いています」って表示したいのですが メールを開封するこの表示を消すようにしたいです。 これはPHPだけで完了できるでしょうか?
メールを開封するこの表示? 意味わからん。
>メールを開封する『と』この表示を消すようにしたいです。 だとオモワレ
364 :
nobodyさん :2006/11/12(日) 11:17:06 ID:AtVKFDXl
ほんと下らない質問なんですが、dl()を使うと、 Not supported in multithreaded Web servers - use extension statements in your php.ini とワーニングが出てしまいます。 php.iniはenable_dl = Onになっています。 サーバーはApache/2.0.55 (Win32) PHPは4.4.2です。 他に何かチェックする項目はあるでしょうか?
>>364 エラーメッセージの通りだよ
マルチスレッドのwebサーバではdlはサポートされてない
win上でのapacheでdlは使えないからphp.iniに書いてねってこと
BBSのログを記事毎に作成しようかと思うのですが そうすると一日100件書込みがあるとファイルが100個できてしまうわけで 一ヶ月で3000ファイル作ることになります。 これはサーバ、とくにHDDに悪いでしょうか?
ファイルの配置にもよるが、1つのディレクトリに大量のファイルをおくと、 かなり遅くなるよ。
>>366 Unix系だとi-node数の上限が決まってるから、ファイル作りすぎると上限に達して動かなくなる。
それに>367も言ってるが、ファイル数が増えると読み込みが遅くなる。
369 :
nobodyさん :2006/11/12(日) 13:14:55 ID:GywZkAAc
ブログ作ろうと考えてます。 Movable Typeみたいに、毎回HTMLファイルを作成してそこにアクセスするようにするのと、毎回PHPスクリプトを実行してDBからデータをひっぱってくるのどちらがいいのでしょうか? やはりデータが増えれば増えるほど、PHP→DBからひっぱるだと効率が悪くなるんですかね。
>>369 DBへのアクセスが入ると速度は遅くなることは必至。
371 :
369 :2006/11/12(日) 13:33:19 ID:GywZkAAc
>>370 そうですか。 PHP→DBの方が作るのが簡単だから……と思っていたけれどやっぱり落とし穴があるんですね。
データが増えれば増えるほど書き出すHTMLが増えるからMTみたいに「再構築中です」ってなる時間が長くなってしまうんですよね……
いろいろ考えて見ます。 ありがとうございました。
>>371 Smartyのキャッシュ機能はその中間的な位置にあるので、検討してみるといいかも名
373 :
nobodyさん :2006/11/12(日) 13:46:55 ID:6O05V0pA
>>361 メールの開封フラグをDBに記録してログイン時にチェック
>>366 3000くらいなら速度も気にするほど遅くはならないと思うが、
万超えると微妙になってくるからディレクトリ分けた方がいいだろうね。
380 :
nobodyさん :2006/11/12(日) 14:56:23 ID:Cz0hhElV
SNSで1ユーザーに1セッションと決め付けている時点で傲慢さが見て取れる
っていうかセッションの保持期間をどの程度に設定させてるんだろ。
セッション使うってやつは素人
383 :
nobodyさん :2006/11/12(日) 15:12:04 ID:ZwQu2SQp
PHPでトラックバックの送信を実装したく、以下のスクリプトを作成しました。
このスクリプトで問題なくトラックバックを送信できるのですが、
プロキシを設定した状態でこのスクリプトを実行すると、
fputs($sock, "POST $path HTTP/1.1\n");この行でエラーが出てしまいます。
プロキシを設定しないと、うまくいくのでプロキシの影響だと思いました。
質問@ プロキシを設定した状態で下記のスクリプトでトラックバックの送信が行えるか?
質問A 行えるとしたら、どのような設定、もしくはスクリプトの改良が必要か?
よろしくお願いします!
<?php
$charset = "UTF-8";
$pingurl = "
http://localhost/blogn/tb.php/1 ";
$urlinfo = parse_url($pingurl);
$host = $urlinfo['host'];
$path = $urlinfo['path'];
$sock = fsockopen($host, 80, $errno, $errstr, 60);
if (!$sock) die("$errstr ($errno)\n");
$data = "title=" . urlencode("test");
$data .= "&url=" . urlencode("
http://yahoo.co.jp ");
//その他パラメータを追加する
fputs($sock, "POST $path HTTP/1.1\n");
fputs($sock, "Host: $host \n");
fputs($sock, "Content-Type: application/x-www-form-urlencoded; charset=$charset\n");
fputs($sock, "Content-Length: " . strlen($data) . "\n");
fputs($sock, "\n");
fputs($sock, "$data");
$result = '';
while (!feof($sock)) $result .= fgets($sock, 4096);
fclose($sock);
?>
>>380 はSNSで1ユーザに複数セッションと決め付けてる時点でキモヲタぶりが見て取れる。
>>381-382 ど素人乙。セッションをよく理解してないバカだな、お前らは。
っていうかアクティブになってる人数を把握するのに、わざわざAJAXを使うヤツは基地害。
無知な奴が喚いているだけか、脳内ルールな奴が多いいからなぁ
単にログインIDとセッションIDを紐付けて1ユーザ1セッションにした上で n分以内に更新されたセッション数を数えるだけだよね
前提を勝手に妄想しすぎ
Ajaxでもできることをわざわざセッションにこだわる理由がわからん
アホやら素人やら罵りあうSMオナニースレはここでつか?
392 :
nobodyさん :2006/11/12(日) 18:16:55 ID:EC0Gx1iz
変な質問かと思いますが、たとえばShell_exec()などでtelnetを実行するとすぐ切断されてしまいますが これを解決するにはどのような処理を行ったらよいのでしょうか。 PHPでブラウザから他のPCにリモートログインできるターミナルエミュレータのようなものを作ってみたいのですが、可能でしょうか。
つ RFC854
やり方は千差万別で、どれが正しいとかはない。
好きな手法でやればいいだけじゃないか。
>>375 で煽られたからってムキになるよ。
スルー汁。
397 :
nobodyさん :2006/11/12(日) 19:51:11 ID:6O05V0pA
メールアドレスを入力してファイルに書き込むスクリプトを作ってます。 メールアドレスの長さはどれくらいにするのが無難ですか? RFCに沿うとやたらと長くなるので実用範囲でお願いいたします。
PHPで取得したタイムスタンプをMysqlに保存するとき、 型名はTIMESTAMPを使用したほうがいいですか? それともINTをつかったほうがいいですか?
用途による データとして保存するならINTでいいだろ PHPには関係ねえべ
あるだろバカ
ねえよ禿
sine
404 :
nobodyさん :2006/11/12(日) 20:38:39 ID:sscQxJ2c
俺はテキストで保存しているが、問題なし。
>>399 データとロジックを一体で考えてるならintの方が効率はいいかもね。
ただ、DB自体の日付演算関数とか使えなくなるし、検索も手動で
やりづらくなったりして使い勝手は落ちるからその辺のバランスの問題。
PHPの内部でしか使うつもりのないデータなら全然困んないだろうし。
あと2038年問題があるからその何年か前にはUNIXタイム型は型のサイズ変換が
入ることが予想されるので、その際にDBのコンバートが必要になる可能性も高い。
短期間しか運用しないシステムで、データのバックアップなんかもdumpでなく
PHPなどを通すかもしくは一切バックアップしないようなやつならどうでもいいかも。
日付演算は普通につかえる。 内部データは変わらん。
あれ。そうなのか。勘違いしてました。スマソ
408 :
nobodyさん :2006/11/12(日) 22:12:57 ID:AeUA6O/W
PHPのモジュールのインストールについてお聞きしたいことがあります。 環境はWindows XPでPHP5を使っています。 PHPのモジュールをソースからコンパイルしてインストールするということが必要 になったのですが、Windowsでどのようにソースをコンパイルして、モジュールを インストールしたら良いのかわかりません。 よろしければ、お教えいただけないでしょうか?
409 :
392 :2006/11/12(日) 22:37:03 ID:EC0Gx1iz
>>393 >>395 ありがとうございます。
自分でも少し諦めかけてますが……
>>396 本当ですか!
覚えている限りで結構ですので詳細を教えていただけないでしょうか
410 :
351 :2006/11/12(日) 23:03:07 ID:???
>>352-358 深夜にセキュリティの質問したものですが、アドバイスいただきありがとうございます。
とりあえず現在のプログラムに追記して
if(isset($_POST["submit"])){
$name=$_POST["name"]{
$hoge=$_POST["hoge"]{
}
表示箇所は<?=$hoge?>とか (これはOKですよね)
みたいにしようと思います。まだまだセキュリティの知識が乏しいので
勉強します。皆さん、ありがとうございました。
411 :
351 :2006/11/12(日) 23:04:53 ID:???
間違えた。if内の{ は、;との打ち間違いです。。
> $name=$_POST["name"] NOTICEが発生 > <?=$hoge?> <?= htmlspecialchars( $hoge, ENT_QUOTES, 'EUC-JP' );
413 :
nobodyさん :2006/11/12(日) 23:12:25 ID:LM10n4zr
415 :
351 :2006/11/12(日) 23:39:51 ID:???
>>412-414 再度修正ありがとうございます。
手持ちのリファレンスを見ると、412さんが書いたような表示が良さそうです。
重ね重ね勉強になります。ありがとうございました。
分からない事があるのでお願いいたします。 linuxにphpをインストールする時に、コンパイル時にextensionを組み込んじゃう方法と php.iniに設定して後から組み込む方法とあるじゃないですか これは例えば、 前者のほうが高速に動くけど、後者の方がメモリを多く食っちゃうとかあるのでしょうか? 頻繁に使うものだけコンパイル時に組み込んで、たまにしか使わないものは後から動的?に組み込んだほうが いいのでしょうか?それとも、ちょっとでも使うものは組み込んじゃったほうが吉? アドバイスお願いいたします。
設計について質問です。 保存用テキストファイルでもデータベースでも保存する件数が増えると それだけデータが莫大になってきますよね?掲示板とかWEBメールとか。 そういう場合は「○件に達したら1行目を削除」もしくは「○件に達したら別のテーブルを作成」 みたいな処理を入れて対応するのでしょうか? それとも別の、もっと効率的な構築の仕方があるのでしょうか?
418 :
nobodyさん :2006/11/13(月) 11:08:46 ID:fcwOcTYQ
>>417 基本はそれでいいと思うよ。あとはそれの応用で過去ログ化して閲覧できるようにしたり、HTML化したりとかじゃない。
そろそろおれを認定回答者と認めてもらえませんか?
コテつけてくれ。 NGにしとくから。
[入力]→[入力確認]→[登録完了] という一般的な登録フォームで、登録完了後にブラウザの「前に戻る」で 戻ると表示がおかしくなる時がありますが、これを解消するにはどうしたら いいのでしょうか?
「おかしくなる」の内容による
表示がおかしくなるのは、キミんとこだけの問題。 一般的に起きている事ならFAQになっているはずだ。 どうおかしくなるのか不明では、解消のしようがない。 文字化けが起こるならヘッダなり何なりで漢字コードを適切に出す。 そもそも「戻る」させないようにリダイレクトする。 など。
いえ、文字化けではなくて、例えば名前を入力して確認画面にいった後、ブラウザで戻るとおかしくなるんです。
「ページの有効期限切れ」か?
だから、どう「おかしくなる」のか書かないと分からない。
お前らバカだなw
フォームからメールアドレスの内容をチェックする以下のような物を作りました。 if($_POST["mailaddress"]==""){ echo ="メールアドレスが入力されていません"; }elseif(preg_match('/^[a-zA-Z0-9_\.\-]+?@[A-Za-z0-9_\.\-]+$/',$_POST["mailaddress"])){ echo ="メールアドレスではありません"; }else{ echo "正しいメールアドレスです"; } 入力チェックは問題ないのですが、その後のメールアドレスの識別が通りません。 上記のソースのどこがおかしいかご指摘いただけないでしょうか。
429 :
428 :2006/11/13(月) 18:09:11 ID:???
すみません、2,4行目のecho = はecho の間違いです。
>>425-426 いえ、ページの期限切れではなく、例えば名前を入力してブラウザで戻るとおかしくなるんです。
>>430 何がどういう風におかしくなるのかを書けw
>>417 データ蓄積用には最初からn件単位で保存する。
表示時にはそこから最新を必要な分だけ取ってくる。
>>428 メールアドレスのチェックで正しいときに「メールアドレスではありません」って表示してるから。
434 :
nobodyさん :2006/11/13(月) 19:29:03 ID:rWUh904Q
え
>>430 戻るでリロードされて想定外の動きをしてるんだろ
”おかしくなる”につられまくりでおかしくなるw
どこがどういう風におかしいのか説明できないレベルって事だろ
438 :
416 :2006/11/13(月) 21:39:10 ID:DOnsRJEI
微妙に板違いなのでしょうか?OTZ いろいろ自分なりに検索してみたけどなかなか見付かりません コンパイル方法ばっかりで・・・ そういえばもう一パターンありますね。 1、頻繁に使うものだけコンパイル時に組み込んで、たまにしか使わないものは後からphp.iniで読み込む 2、ちょっとでも使うものはコンパイル時に組み込んじゃう 3、コンパイル時はなんにも組み込まないで、全部後からphp.iniで設定する。 どれがいいのでしょうか? ご意見求む!!
用途による Extとしてコンパイルしとけっつか頭使うのが面倒ならディストリのでいいだろ
レスがないのはスレ違いというわけじゃなくて、どういう条件で 使うのかっていう前提が謎だからだと思うよ。 Apacheの子プロセスが多くてメモリが逼迫するとか、CGIだから 起動が重要だとか・・・どういう要件にかなうようコンパイルしたいの?
>>438 スレ違いってことはない。
漠然とした一般論を求められるとみんなそこまで
正確には理解してないから回答が面倒くさくなるだけw
フルオプションのCLIは初回起動が体感的に重いよね まあ全部削ってもRubyやPerlに比べるとバイナリでかいしメモリ喰ってて重いが PCNTLでほとんど何もしない常駐プロセス作ったら5MBくらい消費しててワロタ
確かyahooで使われているPHPについての発表では 基本--disable-allでコンパイルしてアプリの用途に応じて必要なものを extensionで追加する形をとっているらしいね おそらく拡張によるメモリなりなんなりを節約するためだと思う ただそんなレベルでのパフォーマンスチューニングなんて yahoo並のコンテンツとかなら影響はあるかもしれないけど 普通のサイトで使う分には大して変わらんだろうから気にする程でもない 最初からまとめてコンパイルしてもいいし php.iniで追加していく形でもどっちでもいいと思う
444 :
nobodyさん :2006/11/13(月) 22:24:52 ID:DOnsRJEI
>>439 >>440 >>441 レスありがとうございます。
用途は、自宅サーバーを立ち上げてapacheとphpとpostgreでサイトを作ろうと思ってます。
まだ勉強中ですが、DNSも自鯖でやろうかと思ってます。
とりあえず、マシン一台(CPU=PemD メモリ2G)で立ち上げるつもりです。
私が読んだ本は、apache関係のモジュールとmbstringはたいていコンパイル時に組み込んでいて、後は本によってそれぞれですが、
読み込んでいるのがなんなのかの説明しかなく、
後から読み込むのと、コンパイル時に組み込むのの、利点・欠点を説明しているものは皆無です。
まあ、情報が少ないので、たぶんどっちでもそんなに変わらないのかとも思いますが
ちょっと気になったもので・・・
>>438 スタティックに組み込むとメモリが無駄になることがある、が速い
ダイナミックにロードするのは遅い、がメモリ効率よし
複雑なサイトになるなら実運用で負荷をみながら試験するしかないと思う
ウララー!
>>444 理屈のみで言えばコンパイル時に静的に組み込む方式の方が
速度的には有利な代わりメモリを食う。
ただし無用なものまでなんでもかんでも詰め込むと、プログラムの肥大化と
使用メモリ量の増大のために起動速度が遅くなり、速度的なメリットが減る。
これはPHPに限らず様々なアプリケーションで共通の話。
ただ、PHPはApacheモジュールとして動かした場合、初期起動速度を
稼げるため、静的リンクでもあまり困らないので全部リンクした方が楽。
また、頑張って機能を外しても大して軽くならないほど元々がでかいので
実は動的リンクでのメリットはそれほどは多くない。
それでもPHPは機能が多いので全拡張を合わせるとものすごい分量に
なってしまうので、何でもかんでもくっつけてしまうのは自殺行為だと思う。
また、すでにコンパイル済みのものが用意されてる場合に
あえて再コンパイルした方がいいほど静的リンクにメリットも無い。
一般的には「インストールが楽かどうか」だけで両者を選択してる人ばかり、
というのが現実です。
両極端なことをしない限り、こだわったところでどっちも大差ない、が正直なところ。
ただしものすごく大量のPHPプロセスを起動する場合など
シビアなケースではメモリの消費がバカにならなくなったりするので、
対策を迫られる場合もあるでしょう、ってとこかと。
それはもうチューニングの話なので、現場ごとにTPOがあります。
>>444 後から動的に機能を組み込めるかどうかをiniファイルで変更出来る
RPMでバイナリ配布する時とか、共有サーバで環境を切り替える時とか
実運用に入った後でPHPをコンパイルし直したくないとか
ダイナミックリンクライブラリは一度メモリ上に読み込まれると、
同時使用するアプリがあれば同一メモリを使用する
apache自体が常駐してるし、最初のオーバヘッド程度しか差は無いんじゃないかな?
>>444 まずはチューニングとかを考えなければ困ってしまうくらいの
アクセス数を得てから悩んでも遅くないんじゃないの?
俺の予想では、キミの自宅サーバはそのままでも十分にパワーを有り余らせることになると思う。
取らぬ狸の皮算用で速度とか心配するな。
いまどきのCPUとメモリはすごいから、気にすんなw うちのセレロン2.4Gで20万PV/dayが楽勝で、能力あり余してるよ。
>>449 アクセスはたくさんありますけどね。
バカにしないでくれませんか、失礼ですねえせ回答者。
>>451 >サイトを作ろうと思ってます。
>立ち上げるつもりです。
>アクセスはたくさんありますけどね
これから作る予定のサイトに既にアクセスがあるとは、これいかに。
まずはID出してからモノを言えよ、似非質問者。
>>451 流れを読めてなかったチンカス偽物乙。いやチンカス以下乙。
とりあえずIDを出していないんだからスルーしても良いだろう。 下らん煽りに反応するな! おれもなー。
456 :
nobodyさん :2006/11/14(火) 12:05:09 ID:liCu6Ubc
配列の内容をデータベースにレコードとして登録したいのですが、 どのようにしたら良いのか分かりません。どうかお教え願いたい のですが。 PHPは5.05で、データベースはSQLiteを使っています。
>>456 foreach($array as $data) {
sqlite_query($conn, "insert into TABLENAME set COLNAME='$data'");
}
でいいんじゃないの?
>>455 今度は自治ですか?
せめて文体変えてこいよ
460 :
456 :2006/11/14(火) 13:46:39 ID:liCu6Ubc
>>457 配列名 $value データベース名 word テーブル名 thesaurus
で以下のようにしたのですが、レコード0のままとなってしまい
ました。間違っているのでしょうか?
$db_open=sqlite_open("word");
foreach($value as $val) {
sqlite_query($db_open, "insert into thesaurus set COLNAME='$val'");
}
sqlite_close($db_open);
>>460 DBのオープンに失敗してるとか?
エラーチェックしてみてはどうだろう。
>>460 カラムの名前ってCOLNAMEでいいの?
INSERTのSET節なんかつかえたっけ? つか配列をストアしたいってそういう意味であってるのか?
一気に四つも原因ぽいものが出てきたw
466 :
456 :2006/11/14(火) 14:29:49 ID:liCu6Ubc
まだ何ともいえませんが、原因はこれだろうか。。。 php.ini ;extension=php_sqlite.dll しかし、;をはずすと 'C:/php/ext\php_sqlite.dll'指定されたモジュールが見つかりません と表示 されます。 php.iniでは、extension_dir = "c:/php/ext" としているのですが・・ php/ext をみると、php_sqlite.dllはありませんでした。これがないと 動きませんよね?PHP5なのにこれがないということは、インストール のときに欠陥があったということでしょうか?
組み込まれてるからDLL不要
extension_dir = "" c:\windows\にphp_sqlite.dllを放り込んで再起動かな あれ、PHP5ってデフォルトでサポートしてなかったっけ? phpinfoで確認してみそ
普通に落とせばphp_sqlite.dll付いてくるぞ システムファイル非表示じゃないだろうな
471 :
456 :2006/11/14(火) 14:42:11 ID:liCu6Ubc
phpinfoで確認したら"SQLite"が出ました。ということは有効にはなっている
ということですよね。
>>461 テーブルは作ってあります。
sqlite_query($db_open, "insert into thesaurus set COLNAME='$val'");
このとき、もしかして、テーブルの項目名全て指定しなきゃいけなかった
んでしょうか?
つーかさぁそれならsqlite_query()でUndefine Functionとか言われるですよ エラー抑止してたらデバッグってレベルじゃねーぞ
ところで COLNAME='$配列名' なんてありなんかい?w
474 :
473 :2006/11/14(火) 14:45:10 ID:???
勘違い、取り消し
SqliteのサイトみたらやっぱSET節ないよ カラムリスト+Valuesしかない
476 :
456 :2006/11/14(火) 14:54:06 ID:liCu6Ubc
では、配列の内容をレコードに書き出すにはどのように記述すれば よいのでしょうか?
メソッドの名前に変数を指定することは 可能でしょうか?
>>476 列に追加していきたいならforeachで回しながらINSERTするだけ
行にまとめたいなら insert into table_name [(col_list, ...)] values('val', ...'); のようなSQL文字列を生成すればいい
>>477 こんなかんじで
$bar = 'myMethod';
$this->$bar();
配列なら $this->{$bar[index]}();
>>329 考えたら関数を動的に定義するだけのメソッドってのもありえるわ
ごめりんこ
>>476 だからserializeだっつーの。
せっかくみんながいろいろアドバイスしてくれてるんだから、
その一つ一つについて検討したかとか実行してみたとか、
具体的な返答をしてから新たな質問をしろよボケ。
答えは既にいくつも出てんだよチンカス。
配列をそのままレコードに保存したいならSerialize()だけど、 配列の内容をって言ってるからなあ。要領得ない質問だから分からんが
>>477 call_usr_func()とかeval()とかもあるでよ
483 :
456 :2006/11/14(火) 15:46:20 ID:liCu6Ubc
みなさまありがとうございます。とりあえず、再考します。
486 :
nobodyさん :2006/11/14(火) 22:17:10 ID:CEutkM32
下らねぇ質問はここに書き込みやがれスレの元祖スレがみたいのですが どこかにおちてませんか? お金払ってまでしてみたくはありません
【にくちゃんねる】
初期シリーズは「下らねぇ」じゃなくて「くだらねぇ質問」だった 他にも試験的にくだ質たってたけどそっちはシラネ
ググレカスについて教えてください。 先日、某スレで質問したところ『ググレカス』と回答を頂きました。 初めて聞いた単語なのでググレカスのもつ動作?役割?意味?がわかりません。 ググレカスとは何ですか?
>>489 good google less cut spell.
/ ̄ ̄ ̄ ̄ ̄ ミ / ,――――-ミ / / / \ | | / ,(・) (・) | (6 つ | | ___ | / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ | /__/ / < なわけねーよ! /| /\ \____________
492 :
456 :2006/11/14(火) 23:12:57 ID:liCu6Ubc
すいません。やはり、配列の内容をデータベースのレコードへの書き出し方が 分からないので教えてください。 foreachでループしたときの配列 $value Array ( [0] => ツール [1] => tool [2] => tools ) Array ( [0] => ユーザー [1] => user [2] => ゆーざー ) Array ( [0] => ファイル [1] => file [2] => ふぁいる ) データベース名 word テーブル名 thesaurus $db_open=sqlite_open("SQLiteManager/word"); foreach($value as $val) { $encode_val = mb_convert_encoding($value,"EUC-JP","Shift_JIS"); sqlite_query($db_open, "INSERT INTO thesaurus(word,dougigo1,dougigo2,dougigo3,dougigo4,dougigo5,dougigo6) VALUES ('$encode_val[0]','$encode_val[1]','$encode_val[2]','$encode_val[3]','$encode_val[4]', '$encode_val[5]','$encode_val[6]')"); } sqlite_close($db_open); このようにしたり、他にも少々変更して試してみました。一応、レコードに書き出しては いるようなのですが、意図したとおりではなく。。。 テーブルにword,dougigo1,dougigo2,dougigo3といったフィールドを用意し Array ( [0] => ツール [1] => tool [2] => tools )の[0]をword,[1]をdougigo といった具合に書き出して、他の配列でも同じように処理していきたいのです。
> foreach($value as $val) { > $encode_val = mb_convert_encoding($value,"EUC-JP","Shift_JIS"); 2行目の $value は $val のタイポ? あとmb_conv...()は配列なんか受け付けないよ foreach ($value as $val) { $encode_val = array(); foreach ($val as $vah) { $encode_val[] = mb_conv...($vah, ... sqlite_query( ... } }
495 :
493 :2006/11/14(火) 23:26:38 ID:???
コピペみすった foreach ($value as $val) { $encode_val = array(); foreach ($val as $vah) { $encode_val[] = mb_conv...($vah, ... } sqlite_query( ... }
>>485 「役不足」という語について典型的な誤用をしてるな、お前。
知ったかぶって難しい言葉使う前に、辞書で調べるクセをつけるように。
497 :
456 :2006/11/14(火) 23:40:48 ID:liCu6Ubc
>>493 $encode = mb_convert_encoding($val,"UTF-8","Shift_JIS");
でした。しかし・・やはり駄目か
あと、495の方法を試させていただきましたが、全てnullになってしまいました。
>>494 ひとつのフィールドにframeと書かれるはずが、f,r,a,m,eというように
別々のフィールドに書き出されてしまいます。
>>492 によれば $val は配列なんだからコンバートしようとした段階で
Warningが出ているはずだけど? 最初から疑問なんだけど何でエラーを無視してるの?
配列をmb_convert_encoding()に渡すことは出来ない
foreachでまわして一つずつ変換する必要がある
一文字ずつ出力されるのは $encode_val が配列ではなく文字列になってる証拠
$str = 'frame'; とある場合、$str[0] は f だし、$str[1] は r
変数の内容が期待したものかどうか、適当な位置で echo や var_dump() して
確認しながら作業しなきゃだめ
$double = array( array('a', 'b', 'c'), array('A', 'B', 'C') ); foreach ($double as $single) { } foreach ($double as $single) { foreach ($single as $string) { } }
>>468 =<<496乙
論点をすりかえなくていいよ。
>>493 あぁ、明日の夜まで解決しなかったらこたえてやる。
もうねむいから回答保留する
503 :
nobodyさん :2006/11/15(水) 00:17:09 ID:ylGAVv6P
テンプレートエンジン「Smarty」についての質問なのですが.... $smarty -> assign("name", $name); $smarty -> display("template.tpl"); これだと、「<, >, &」などがHTMLエンティティに変換出来ないので心配です。 マニュアルを読んでみたのですが、Smartyサイドで変換することは出来ないのでしょうか? $smarty -> assign("name", htmlspecialchars($name)); こうすると、何も出力されないのです(エラーさえも)。
505 :
nobodyさん :2006/11/15(水) 00:22:53 ID:ylGAVv6P
配列をvar_exportしてreturnをつけたファイル ----- <?php return array ( ... ); ?> ----- があって、これを <?php $a = require('hoge.php'); ?> として$aに読み込みたいんですが、実行すると標準出力にファイルの中身が吐かれてしまいます。 何が間違ってるんでしょうか?
>>492 テーブル設計がおかしい
Array ( [0] => ツール [1] => tool [2] => tools ) とあるとき
ツールの同意語を検索するのは容易だが、tool の同意語は検索しづらい
全ての組み合わせを登録する必要がある
が、普通こういうテーブルは作らない。正規化をググるべき
508 :
506 :2006/11/15(水) 01:01:26 ID:???
もしかして、凄く大きいファイルをrequireするとエラーになったりするんでしょうか?
何がしたいか知りませんが、require/includeにそのような用法はありません
何がしたいかというと、そもそも「<?php return array (...); ?>」という形式で 静的なデータを持っているウェブアプリがあって、このデータを、 他のデータベースから引っ張ってきた対応する日本語に書き換えるスクリプトを書きたいんです。 そのウェブアプリ自体は$a = require('hoge.php');の形で、そのデータを使っているんですが、 自分でやるとできないんです。 どうも、hoge.phpのサイズが小さいうちは読み込めるのですが、500KBになるとエラーを出すようで。 実のところ、phpは全然分かっていないんですが、何か設定みたいのがあるんでしょうか?
>>506 requireは読み込みしてメインルーチンに取り込みであって
実行して結果を返すようなものじゃないから
requireファイルにreturnとか書いても無駄。
requireするファイルの中で
$a = array(...);
と書くか、
変数名を固定にしたくない場合は
function hoge() {
return array(...);
}
と関数化して
require('hoge.php');
$a = hoge();
と読み込んだ後に関数実行するとか。
関数名も固定にしたくないと言われたら知らん。
>>508 requireするファイルは特にサイズの問題はないと思うが、
PHPで確保できる配列のサイズには限界があるので
requireの中身が巨大な配列だとメモリ確保できなくて
エラーになることはある。(その場合、エラーメッセージが出る)
512 :
511 :2006/11/15(水) 01:23:42 ID:???
ごめん。嘘書いた。requireファイルからreturnで値を返すことは可能だった。
>>510 エラーメッセージは何になってる?
500KBくらいならメモリ確保できないってこともないと思ったが、
そもそもそれ以前にメモリ食いすぎのプログラムなのかもね。
>>509 ttp://www.php.net/manual/ja/function.include.php > 値の返し方: 読み込まれたファイル内では、ファイルの実行処理を終了し呼出側の スクリプトに戻るために
> return()文を実行することが可能です。 読み込まれたファイルから値を返すことも可能です。
> 例 16-9. include()とreturn()文
> return.php
> <?php
> $var = 'PHP';
> return $var;
> ?>
>
> noreturn.php
> <?php
> $var = 'PHP';
> ?>
>
> testreturns.php
> <?php
> $foo = include 'return.php';
> echo $foo; // 'PHP'と出力されます
> $bar = include 'noreturn.php';
> echo $bar; // 1が出力されます
> ?>
>>515 ああ、そういうことか。
それはphp.iniの設定でshort_open_tagsってのがあるため。
これをONにすると<? 〜 ?>形式でのPHPコードが許可される。
(OFFだと単なるHTMLとして扱われるため、そのまま画面に表示されてしまう)
記述が楽で<?=変数?>というテンプレートモドキの書き方もできるメリットがあるが
XMLなど他の<? 〜 ?>を使う言語との相性が悪いので推奨はされていない。
>>516 なるほど。
色々勉強になりました、ありがとうございます。
520 :
nobodyさん :2006/11/15(水) 02:28:58 ID:wkc8v1DY
昔これってオッパイ括弧に直せってエラーでなかったっけ。 OKになったのか? $str = "asdf; echo $str[2];
>>492 例えばカラム名noの値が2、nameの値にうんこ、を入れたい時、配列のキーをカラム名にして
$value['no'] = 2;
$value['name'] = "うんこ";
foreach($value as $key => $val) {
$hoge[] = $key;
$hogehoge[] = "'{$val}'";
}
$k = implode(" ,",$hoge);
$v = implode(" ,",$hogehoge);
できあがった$kと$vをクエリに使ってみてはどうか。
523 :
522 :2006/11/15(水) 03:37:33 ID:???
最後の二行は $k = implode(", ",$hoge); $v = implode(", ",$hogehoge); のほうがいいか。動作に支障はないけど。
>>492 あっちでも言ってるけど
$valueをforeachした$valは配列
配列をmb_convert_encodingはできぬ
MLマルチ乙
配列を一括コンバートするならmb_convert_variables()だね。
オントロジーの定義データをRDBに詰めるのって楽じゃなさそう 結局は双方向リストの束かしらん
527 :
496 :2006/11/15(水) 04:20:37 ID:???
>>501 >
>>468 =<<496乙
>論点をすりかえなくていいよ。
ハァ?? 何言ってんのお前??? 俺は468ではないけどwww
単にお前の間違った単語の使用法を指摘してやっただけだ。感謝しろ。
つか、その誤用は典型的なものともまた違うな。 そんな変な使い方はなかなか見ないよね。
スレ違いぽいんですが、お願いします。 当方、HTML→CSS→PHPとあらかたマスターしてきたのですが、次に何を勉強しようかなと迷ってます。 PHPは力技も使えばほとんどやりたいことはできます。 サーバー関連(Apache?UNIX?よくわからんす)の勉強か、ajaxかXMLあたりをやろうと思うんですが、どれがどんな特徴があるか、私的な意見になると思いますが、聞かせてもらえるとありがたいです。
530 :
529 :2006/11/15(水) 07:14:15 ID:N4vSt0D0
IDだします。JSも多少使えます。
JAVA
あらかたマスターしたという自信があれば 人に聞くまでもあるまいに。 思うがままに
>>529 何がしたいのかよく読めない。
ネットワークエンジニアの勉強したいのか?プログラマの勉強したいのか?
どれがどんな特徴といっても、分野が違うから困るんだよね。
Apache,Unix,Ajax,XMLと名前を出してるということは、
この言葉に興味があるってことでしょ?
HTML→CSS→PHPときてるなら、前者2つは全く違う分野で、
覚えるべきことが多くなってややこしくなるから触れないほうがいいと思う。
残るはAjaxとXML好きなほうやればいいよ。
Ajaxやるなら、まずはJavaScript勉強すればいい。
ついでにFlashのActionScriptと類似点も多いので、Flashも同時にマスター。
XMLはいろいろ使えるけど、勉強してきた経緯からして、
XSLTと組み合わせて、XMLでWebページを作る技術でも身につければいいと思う。
世間の流れは、ajaxだわな。
そういやXSLTって聞かなくなったなぁ
536 :
nobodyさん :2006/11/15(水) 10:16:33 ID:N4vSt0D0
>>531-534 なるほど、参考にします。
まぁ目標みたいなものもないので(既に仕事としては考えてないので)マターリ修得してこうかなと思ってました。
JAVAという手もありましたね…とりあえずはJavaScriptをガッチリやってからAjaxを勉強してみたいと思います。レスありがとうございました。
537 :
nobodyさん :2006/11/15(水) 11:30:37 ID:DsSvM2t5
SQLiteについてお聞きしたいことが。 SQLiteはEUC-JPを使うはずなのに、Shift-JISから EUC-JPに変換して・・・ mb_convert_encoding($abc, "EUC-JP", "Shift_JIS") 文字化けがあるのは何故なのでしょうか?
>>537 よくは知らないけどSQLは一般的にUTF-8だと思いますよ。
クソッタレニートか
540 :
nobodyさん :2006/11/15(水) 11:41:39 ID:DsSvM2t5
>>538 ありがとうございました。確かにUTF-8で文字化けしなくなりました。
本にSQLiteはEUC-JPを使うと書かれていたので、ひっかかってしまいました。。。
>>537 SQLiteは関係ない。
Shift-JISからEUC-JPに変換する時に化ける。
>>529 では、PHPを使ってWeb版ギコナビ作ってくれ
データはもちろんDBな
functionごとにファイルを分けて使用時にrequire_onceは オブジェクト指向と言えますか? クラスとかはよく分かりません。
544 :
529 :2006/11/15(水) 13:43:05 ID:N4vSt0D0
>>542 一応マジレスしときます。
鯖と2chの仕様(もしくは参考サイト)とあとお金を用意してくれれば作りますよ。DBもMySqlでよければ扱えます。
2chについてはあまり詳しくないんで(ギコナビってなんだろうと思ってググった)、正直仕様を調べる時間と手間が面倒ですね。マジな話ならその分の金をいただきます。
スレ違いに反応スマソ。
>>544 なんじゃそりゃ
勉強なんだから自分で調べろよ
それに金はお前が払うんだろ
でもさ、なんでWeb版ギコナビなんだ? p2だっけ?Web版2chブラウザなら既にあるじゃん
547 :
nobodyさん :2006/11/15(水) 13:59:09 ID:uyXfKD17
タイム関数みたいなのってあるのでしょうか? 「フォームのsubmitを押してから○秒後に送信」とかやりたいのですが、 手持ちのリファレンスには記載がありませんので、質問しました。
>>544 糞仕様のDB設計とオナニー程度のコードしか書けない
ボウヤに金払う奴なんていないだろw
>>547 普通に考えてサーバーサイドなスクリプトでそんな事出来るわけないだろw
>>547 sleep()使えばいいんじゃないかな
>>547 そんな変な物、何の役に立つんだ?
JS使えば要求仕様は満たせるけど・・板が違う
>>551 PHPでのWEBメール一括送信とかに利用出来ないかなって思いまして。
クッキーとか使ったら出来るかな?って思ったけど無理だったし。
JSは基礎知識しかないので、出来ればPHPでなんとかならないかと。。
とりあえずもう少し調べます
553 :
547 :2006/11/15(水) 14:21:48 ID:???
>>550 すみません、レス見逃してました。
そして、550さんのいうsleepをググったら下記のような方法で出来ました!
echo date("h:i:s");
sleep(10); //10秒遅らせる
echo date("h:i:s");
アドバイスありがとうございました
>>544 これは酷い。 まぁPGかじり始めは何でも出来ると思って自分に酔う時期なんだろうね。
俺も全く同じ道のり(HTML→CSS→PHP)辿ったが、
PHP5をやる時にオブジェクト指向と言う概念がよく分からなくて調べた時は自分の未熟さを恥じた過去があったりなかったり…。
まぁPHPとSQL使えるがサーバは不明てことは金は取らん方がいいよ。
金取る以上XSSやらSQLインジェクションみたいな脆弱性が書いたコードの中に見つかったらどうなるか分かってるよね?
と偉そうな事言ってる俺もPHP→Linux弄り(FC、CentOS、BSD)までの半人前だからアレなんだけど。
これをもっとスマートに書く方法ってある?教えてえらいひと。 $config = parse_ini_file('config.ini', true); $config = $config['hoge'];
金とるといっとけば、玄人っぽい気がすると思ってた時期が俺にもありました。
554みたいに思っている人に金出して依頼したのに まともなもの作れなくて投げ出されたわw
558 :
542 :2006/11/15(水) 14:33:05 ID:???
>>544 お金取るのかよ(`ω´)
取るとして、要求定義書〜テスト仕様書までのドキュメントはもちろん付いてくるんだよね?
(でも、お金払うぐらいなら自分で作るよ Javaでw)
>>546 2ch以外にも使いたい掲示板があるので・・・あと右上のアニメーションが欲しい
俺も昔2chで金出して依頼したら ばっくれられた事あるよ 最初銀行振り込みで話付いてたのに、書留で送ってくれとか言い出して ちょうど、イーバンクの振込み入金口座が廃止された時期だったから 身元明らかにしないで金振り込ませてバックレようとしたみたい
そもそも2chで依頼とかする方が馬鹿
スレにメアド晒すと、私もここに頼んで作ってもらいました みたいな自作自演メールが来るよ きょうつけて!
>>544 >ならその分の金
逃げの文句には最適ですね。
563 :
nobodyさん :2006/11/15(水) 15:06:44 ID:DsSvM2t5
こちらで、配列内容をDBのレコードへ書き出すということについてお聞きした者 ですが。 if ($db = sqlite_open("SQLiteManager/word", 0666, $sqliteerror)) { $value2 = array(array( 'ツール', 'tool', 'tools' ), array( 'ユーザー', 'user', 'ゆーざー' ), array( 'ファイル', 'file', 'ふぁいる' )); foreach($value2 as $nkey => $arrValue) { foreach($arrValue as $nkey2 => $strValue) { $arrValue[$nkey2] = mb_convert_encoding($strValue, "UTF-8", "Shift_JIS"); //EUC-JPでなくUTF-8 } $sql = <<< EOM INSERT INTO thesaurus(word, dougigo1, dougigo2, dougigo3) VALUES ('{$arrValue[0]}', '{$arrValue[1]}', '{$arrValue[2]}', '{$arrValue[3]}'); EOM; sqlite_query($db, $sql); } } sqlite_close($db); 上記のように、配列の内容を直に書くと、レコードに書き出せるのですが、 配列が格納された変数($value)を指定するとうまくレコードに書き出されません。 どのようにすればよろしいでしょうか?
いいかげんに死ね
>>563 まず、どの不具合の発生箇所を特定しなよ。
特定できたら、その箇所に対して別のコーディングが出来ないか試してみるとかすれば?
スレタイに見合った素晴らしい下らない質問だけど、
回答する度に、新たな、しかも大して進歩の無い質問を繰り返されるといい加減だれも相手しなくなるよ
566 :
nobodyさん :2006/11/15(水) 15:22:06 ID:DsSvM2t5
これは失礼。もっと粘るようにします。
エコーデバッグしろ そして氏ね
568 :
nobodyさん :2006/11/15(水) 15:32:36 ID:DsSvM2t5
>>565 障害箇所はわかってます。別のコーディングができないかどうかも
試しました。しかし、うまくいかないんです。
答える気がないならスルーしろやw
たった10分で「粘った」ですか?
SQLliteは知らないけど
>>567 が言うように、エコーバックしたSQLステートメントを
クライアント通して直接DBに対して実行してみた?
その場合、SQLLiteからはどんな反応(メッセージ)が帰ってきた?
「わかんない、わかんない」じゃマジで誰も相手しなくなるよ
もっと粘って質問繰り返すって意味だよ
>>566 粘るといいつつどうせすぐにメーリングリストへ
574 :
563 :2006/11/15(水) 15:50:26 ID:DsSvM2t5
なんとか解決しました。弱気になっていたけど、奮起させてくれて ありがとう。
うほ(゚∀゚)釣れた釣れた。
この馬鹿はうまくできないじゃ意味が分からんとか なぜエラーをスルーするんだとかいうレベルじゃない
小学生相手に何をムキになっているのやら・・・
なんか頭が痛くなるようなデータ構造だな。Wordが主キーとかIndex無しとか。
何故語彙の関係がこんなBBSのログみたいになってしまうのかw 3年に一人の逸材だ
>>578 俺ならwordだけを一つのテーブルにする。もちろんid付き
で同義語テーブルとidでリレーション
581 :
544 :2006/11/15(水) 16:14:31 ID:N4vSt0D0
レスするか迷ったけど最後に。
>>558 当たり前でしょ、別に依頼を受けてるわけでもないのに、知らん奴に匿名でいきなり依頼されて、自分の時間裂いてまでタダで作る奴は普通はいないでしょ。
これは釣られてるのだろうかw
どうせまた煽りレスがつくんでしょうね。いい回答者さんもたくさんいるのに少数の煽りでスレが荒れる(しかも自分のレスで)のは嫌な気分ですね。
生きてる価値ぁるのぉ〜?
583 :
563 :2006/11/15(水) 16:19:17 ID:DsSvM2t5
>>578 データベースを初めて使う素人に上手なデータベースの作り方を
お教えください。
これは釣りとしか思えん
>>583 言われたことを全部やって、その結果を全部書けば教えてやるよ。やらないうちはもうくんな。
>>581 お前もついでに氏ね。厨房が来るような板じゃないですよ
>>583 自分で調べてから出直して来い。
大体日本語が可笑しい時点でDBが何か把握できてないんじゃないの?
>上手なデータベースの作り方
何これ?料理教室にでも通うつもりか?
>>581 煽りとか以前に
お前にオープンソースを使う価値はネェヨ
>>583 おまえ、自分で努力とかしないの?
>>581 >どうせまた煽りレスがつくんでしょうね。
当たり
>>581 友達いる?
>>583 煽られて頭にくるだけの気力があるなら、もう少し真面目にPHPに取り組んだら?
むしろ銀河に向かって飛べよ
ここが銀河なわけだがw
まんこまんこまんこまんこまんこまんこまんこまんこまんこまんこまんこまんこまんこまんこまんこまんこまんこまんこまんこまんこまんこまんこまんこまんこまんこまんこまんこ
ここにいる連中は四六時中パソコンにべったりで、他人の非難や中傷 をする奴が多いな。そんな暗いことやってて楽しいのか?
自問自答乙w
>>594 きたきた。お前みたいな奴のことを言うのだよ。
597 :
595 :2006/11/15(水) 16:53:18 ID:???
また変なの沸いたよ。 こういう奴に限って四六時中パソコンにべったりで、他人の非難や中傷しかしない暗い奴なんだよな。 こんな事やってて楽しいか?
>>598 それに加わったお前も仲間入りだな。おめでとう。
>>593 のように他人を卑下して快楽を得ることに呵責を感じないタイプの
人間はいる、というか自分がそうなんだから、楽しいか?なんて聞く必要は
ないと思うけど?
今日は池沼が多いですね。
>>597 お前さ、何がしたいの?
真面目に回答をしようとしている奴だっているのに、そんな人に対して失礼じゃないのか?
手取り足取り教えて欲しいんだよ。察してやれ
>>593 多くないけど?
同類とか言ってることから、お前が「四六時中パソコンにべったりで、他人の非難や中傷
をする奴」だってことは真であるとして、それがどうしたの?
子供の喧嘩ではあるまいし
>>581 も
>>593 も同じ様な変な改行の仕方をしていますね。
sageを覚えた感想はいかがですか、根暗の人
どうして欲しいのかよく分からんやつだな。恐らくは自分でも分かってないんだろう。
子供の喧嘩だよ。スルーできない時点でみんなガキだ。
どこがどういう風に喧嘩なんだろう
>>608 が一方的にわけのわからないことを喚いてて
まわりは理解に苦しむという展開だが
情けない奴
>>608 つーことはスルーしたほうがいいって思ってるんじゃん
なんで突如煽り始めたの?
>>609 同意。
喫茶店で雑談してたら、横からDQNの一行が大声ではしゃぎだして迷惑してる感じだな。
大人になったほうがいいと思ってるなら何故煽る?
>>613 だから喋りかけるとまた何か言い出すから(ry
615 :
nobodyさん :2006/11/15(水) 17:32:36 ID:N4vSt0D0
みんな必死だなあ
>>593 から「他人を非難すること」に不満をもっていることが分かるが、なぜ
この流れでそんな主張が飛び出したのか?
質問スレで「非難・中傷」を否定するということは、その逆のことを要求している、
つまり「丁寧に回答するのが当然だ、煽りなど許せない」と思っているということになる
期待する回答がえられず、逆切れして荒らしたり捨て台詞吐いたりする質問者の類と
見るのが合理的だろう。わざわざIDを隠す必要があったのもそのためだ
>>615 ついさっきまで必死だった奴が何言ってんだか?wwwwwww
うぜえよゴミッカス
なぜ「みんな必死だ」なんて感想を、しかも感嘆文で書く必要があったのか 「みんな」は必死だが、自分はそうではないよ、とアピールしなきゃいけないものかね 書き込みは状況と照らすと意外に多くのことが分かるものだ
>>616 俺は
>>593 ではないんだけどさ、
よく分からんが、あんた見たいにネチネチ相手がいかにダメなやつか
説明するやつに、普通なやつはいないってことは確か
韓国ではもっと深刻的な問題になってるぞ
所詮2chだからな、まともか、能力ある人間は毎日チェックして
人を中傷するようなこといわないだろうな
なんだこの馬鹿w
能力あって、人付き合いがヘタなやつが、けっこう2chに多数いるわけ だがw
>>620 が言いたいことをもっとストレートに書いてやろうw
ここにいる連中は四六時中パソコンにべったりで、他人の非難や中傷
をする奴が多いな。そんな暗いことやってて楽しいのか?
ワロタ
ここまで読んだ つもりになって全部読み飛ばした
ボランティアで回答できるおまえらは偉いよ。 IE7も無料でデバッグしてたらさらに偉いよ(笑)
627 :
nobodyさん :2006/11/15(水) 22:49:38 ID:kZ4689iH
WEB開発において、PHPの関数を全部使えるようにする意味はありますか?
あります。
630 :
627 :2006/11/15(水) 23:10:30 ID:kZ4689iH
631 :
nobodyさん :2006/11/15(水) 23:12:28 ID:kZ4689iH
男ならPHPのマニュアルを暗記するべきですか?
>>630 Ncurses 端末画面制御関数を使ったWebアプリがあるというなら、
どういうものなのかぜひとも聞きたい。
鯖ローカルで動かす管理ツールとか普通にあるだろ
HTTPD作るのもWEB開発といえばそうかもしれないけど そう偏屈じーさんになる理由もないんじゃないの
>>634 管理ツールだからhttpd.confの編集をするCUIツール(curses使用)をWebアプリと呼ぶ、みたいな喩えのほう適当だな
関数を覚えるのはナンセンスとしても、どんなモジュールがあるのかマニュアルに目を通しとくのは いいんじゃないかなあ 文字列処理や配列関数なんかは皆一通り知ってると思う 実際全体の何割くらい使ってるんだろうね
ちょっとお馬鹿な質問にお付き合いください。 EXCELのデータを取り込みたいんですが、検索したところEXCELにODBCで 接続して云々・・というページを見たのでPHPのODBC関数で接続を 試みています。 EXCELが入っているマシンだとドライバも一緒に入るので、以下のような スクリプトを書いてみるとエラーは返りませんでした。 <?php $conn = odbc_connect( "DRIVER={Microsoft Excel Driver (*.xls)}; DBQ=hoge.xls;", "", ""); if (odbc_error()) { echo odbc_errormsg($conn); } ?> ktkrと思い、以下のコードを加えて見ましたが、エラーが発生してしまいます。 $sql = "select count(*) from Sheet1"; // Sheet1のデータ件数が取れるかな? $rst = odbc_exec($conn, $sql); if (odbc_error()) { echo odbc_errormsg($rst); } 恐らくシートの指定方法が間違っていると思うのですが。 そもそもこのようなことはできるのか? できる場合は簡単なサンプルを見せていただけませんでしょうか。 よろしくお願いします。
Windows XP に Zend Studio をインストールしてみました。 mb_language(); を呼ぶと Fatal error: Call to undefined function mb_language() in ... となってしまいます。 mb_string.dll はパッケージ内には見当たりません。 追加でコンポーネントをインストールしなければいけないのでしょうか? それとも設定でしょうか?
エクセル側でSheet1がテーブル名として設定されてないとか?
>>638 入ってるはずだけどねえ
まあ普通にオフィシャルから落としてきてextフォルダに放り込んでphp.iniの該当個所を
コメントアウトすれば動くんじゃないかしら
642 :
637 :2006/11/16(木) 01:09:34 ID:???
>>639 すみません。
今手元に再現できる環境が無いので。
明日ちゃんとしたエラーメッセージを張ります。
>>640 うーん。よく分かりません。
EXCEL側でテーブル名としてSheet1を登録する必要があるのですか?
ちょっと調べてみます。
dll非表示とか
>>637 ADOだとワーキングシートは[sheet1$:]?だっけ?
ODBCはしらんけどPHPよりM$のマニュアルに相談したほうがいいかもよ。
Zendってお布施してもサポートないのか
646 :
637 :2006/11/16(木) 01:38:25 ID:???
>>644 そうなんです。
まさにM$のVBとかC#での作法が分かっていないための質問でした。
AccessのサンプルはPHPのマニュアルにもあるのですが・・・。
明日もうちょっと気合を入れてググッてみます。
http://jp-typo3.com/ 欧州大人気の超高機能CMS TYPO3はついに日本に公開
TYPO3はPHP、MySQLによって実装されているLAMPアプリケーションです。
大規模サイトを構築することを想定した高機能CMSで、リッチテキストエディタに
よるコンテンツのWISIWYG編集、キャッシング、サイト内検索、静的HTMLの
出力など対応です。
# 2000個以上の自由に使える機能拡張モジュール
# 文書・プロジェクト管理・オンラインショップなど他多数
# サイト分析、アドミンツール、ワークフロー
なんでLAMPと言い切れるのかが謎いな。
いまどき、リッチテキストエディタ ってのがいいなw
650 :
nobodyさん :2006/11/16(木) 12:39:04 ID:GG+ftSx9
現在ディレクトリ内のファイルの更新日時一覧を↓のように ファイルを読み込んだ順に表示しているのですが、 foreach($allfile as $temp){ print "$temp -"; echo date("m/d H:i:s",filemtime($temp)); } これを更新日時が新しい順に表示するようにするには どのようにしたらよいのでしょうか? PHP4です。
651 :
nobodyさん :2006/11/16(木) 12:43:01 ID:73q/908c
各要素を $arr[] = filemtime($temp); に入れてソートしてからforeachすればいいのでは?
$tempが数値なんだろうからそれをソートしてからまわせば良いだろ
sort($allfile); foreach($allfile as $temp){ print "$temp -"; echo date("m/d H:i:s",filemtime($temp)); }
654 :
nobodyさん :2006/11/16(木) 12:59:03 ID:73q/908c
filemtime(); してるからファイル名じゃね?
あ、ほんまやw
656 :
650 :2006/11/16(木) 13:15:24 ID:GG+ftSx9
$tempはファイル名です。 まだてこずってます・・・ みなさんありがとうございます
foreach($allfile as $temp){ $t = filemtime($temp); $in[$t.$temp] = "$temp -".date("m/d H:i:s",$t); } sort($in); とでもしといたら
658 :
650 :2006/11/16(木) 13:22:12 ID:GG+ftSx9
みなさん、ありがとうございます。 結局usortを使い function new_sort($xx , $yy){ $xx1 = date("mdHis",filemtime($xx)); $yy2 = date("mdHis",filemtime($yy)); if($xx1 > $yy2){ return -1;} elseif($xx1 == $yy2){ return 0;} else{ return 1;} } usort($allfile ,"new_sort"); foreachでまわす前に としてみたのですが、効率わるいですかね?
659 :
nobodyさん :2006/11/16(木) 13:45:14 ID:73q/908c
foreach($allfile as $key => $temp){ $arr[$key] = filemtime($temp); } $arrを値でソート foreach($arr as $k => $v){ $arr2[] = $allfile[$key]; } print_r($arr2); とか?適当に書いたから間違ってるかも。
660 :
nobodyさん :2006/11/16(木) 13:57:57 ID:0z6MBXcS
ここで聞いていいのかな? 現在テキストファイルに出力したテーブルをCOPYコマンドでテーブルに入れるという処理をやっているのですが、 その方法は、VBからOBDCを使用してADODB.ConnectionのExecuteコマンドで テーブルを更新するという方法です。 コマンドは、 COPY TABLE FROM '/apache/...../test.txt'; です。 この方法でとあるテキストファイルをDBに落とし込もうとしたところ、 ERROR: invalid byte sequence for encoding "UTF8" : 0x95 という文字コードに関するエラーが出て失敗してしまいます。 しかし、psqlから手動でCOPYコマンドを打つと普通にコピーに成功してしまいます。 両方失敗するのなら分かるのですが、何故VBからの処理が失敗するのでしょうか? 何が原因として考えられますか? ちなみに開発環境はWin2k+PostgreSQL8.1(Windows)+VB6.0SP5です。
661 :
nobodyさん :2006/11/16(木) 14:00:02 ID:0z6MBXcS
ごめん、Postgresの質問だこれは。無視してください・・・
662 :
nobodyさん :2006/11/16(木) 14:33:40 ID:7s9N5dRH
呼び出されたスクリプト自身のURLを取得する方法ってありますか?
例えば、
https://example.com/index.php/hoge こんなURLで呼び出された場合に、このURL自身を取得したいんですが。
もしかして、こいつら↓使って自分で組み立てるしかない?
$_SERVER['HTTPS']
$_SERVER["HTTP_HOST"]
$_SERVER["REQUEST_URI"]
エクセレントな方法ってある?
降順だった `ls -t` どうでもいいけど
665 :
662 :2006/11/16(木) 15:06:02 ID:???
>663 あ、ブラウザのURLに表示されてるのと同じものを取得したいのです。 こんな感じでいいのかな。 $url = (isset($_SERVER['HTTPS']) ? "https" : "http") . "://{$_SERVER['HTTP_HOST']}{$_SERVER["REQUEST_URI"]}"; 他に良い方法ないですか? 一度別ページに飛ばして $_SERVER["HTTP_REFERER"] だと値なんてあてにならないし。
>>665 多分それしか無いと思う。
他に手があるなら俺も知りたい。
667 :
660 :2006/11/16(木) 15:57:58 ID:???
誤爆スレで返答するのもなんですが、解決しました。 COPYコマンド自体止めて、テキストファイル直読みしてINSERT文にしたら あっさりコマンド通りました。 何故にCOPYコマンドでは駄目なんだ?よく分からん・・・。
馬鹿はサイレンで泣くしエラーメッセージは見なかったことにする
日付とFilterで5.2とはマイナーバージョンの水増しではないか。
>>669 日付関数はバージョンで処理分けないと互換性保てないとか何とか。
というか水増しって何?
フィルタはまだexperimentalだったと思うが・・・
672 :
nobodyさん :2006/11/16(木) 16:50:26 ID:OjN5tFoy
FC6でファイルのアップロードが設定上10ギガはアップロードできるはずなのにできないんですがなぜでしょうか ポストファイルサイズ アップロードファイルサイズとか実行時間も十分にしたのですが・・・・ スワップ領域以上はできないんですか? 1ギガなんですがそれより上ができません perlならできるんですがアップロード速度がだいぶ違うので
PHPのアップロードってメモリに読み込まないんだっけ?
ログにSwap不足って出たのかね。考えにくいが
できなかったら、エラーが出るだろ? それになんて出たんよ。
677 :
nobodyさん :2006/11/17(金) 00:49:47 ID:RSjPLNDu
多次元配列をキーでソートする方法について質問させてください。 $hairetu['A'][1] $hairetu['A'][5] $hairetu['A'][7] $hairetu['A'][9] $hairetu['B'][3] $hairetu['B'][4] $hairetu['A'][6] $hairetu['A'][12] このような多次元配列(キーは一つ目が文字列で、二つ目が数字)が仮にあったとして、 数字が入ったキー「だけ」に注目してソートして、若いキーから順にn個を取得したいです。 この例で言うと、数値キーで昇順ソートして3つだけ取り出す場合、 $hairetu['A'][1]、$hairetu['B'][3]、$hairetu['B'][4]・・・の要素を取得したいです。 このようなことをやるにはどういう手法を使ったら良いのでしょうか?
>>677 $hairetu['A'][1] = 'A1';
$hairetu['A'][5] = 'A5';
$hairetu['A'][7] = 'A7';
$hairetu['A'][9] = 'A9';
$hairetu['B'][3] = 'B3';
$hairetu['B'][4] = 'B4';
$hairetu['A'][6] = 'A6';
$hairetu['A'][12]= 'A12';
$list = array();
foreach($hairetu as $dat) {
foreach($dat as $k => $v) {
$list[$k] = $v;
}
}
ksort($list);
$list = array_slice($list, 0, 3);
var_dump($list);
とか
>>677 アルゴリズムに適したデータ構造を持たせることもまた重要な設計だと思う。
Vine3.2 PHP5 で
http://www.php.net/manual/ja/features.file-upload.php の 例38-1,例38-2を試したところ、極めて小さいファイルはアップ出来るのですが、
1196byte以上のファイルだとタイムアウトを起こすのか、まともに動きません。
(FireFoxだと「接続がリセットされました」が出ます。)
メモリは free -mt で見た範囲で200MB以上空いています。
最終的には120MB程度のファイルがアップ出来るような仕組みを作りたいのですが
1MB程度で躓いてしまっています。(´・ω・`)ショボーン
「陥りやすい落とし穴」に書いてある
memory_limitには150M post_max_sizeには128M upload_max_filesizeには120Mを
設定し、phpinfo()でちゃんと適用されているか確認しました。
他に何か確認すべき所はあるでしょうか?
> タイムアウトを起こすのか 30秒で停止する設定になってるとか?
683 :
680 :2006/11/17(金) 02:29:47 ID:gKQvCF/I
>681 30秒というと、どこの設定の事でしょうか? >682 ブラウザ上では FireFoxだと>680に書いたとおりブラウザが出すエラー画面で「接続がリセットされました」 IE6だと「ページを表示できません。」「サーバーが見つからないか、DNS エラーです。」 が出ます。 Apacheのエラーログには関係ありそうなエラーは見当たりません。
>>683 いや、アップロード処理のとこでPHPでエラーがチェックできるでしょう。
['error']に入ってる値。
686 :
680 :2006/11/17(金) 02:41:12 ID:???
>684 動きを見ていると、 OKの時 例38-1からPOST → Apache PHP → 例38-2で処理&結果表示 NGの時 例38-1からPOST → Apache? PHP? → 行方不明・無反応 → ブラウザがエラー表示 になっているようです。 ソースの中でなおした部分は、 例38-1の__URL__を例38-2を保存したphpのファイル名に変更 例38-1を<html><head></head><body>〜</body></html>の〜部分に記述 例38-2の$uploaddir =を実態にあったパスに変更 です。
PHPのエラーをApacheに吐いてるの? デバグには向かないよ
>>678 foreach($hairetu as $dat) {
・・・
}
この外側のforeachって意味あるか? 不要じゃネ??
689 :
680 :2006/11/17(金) 02:51:44 ID:???
>685
max_execution_timeを120に、 max_input_timeを120にしてもダメでした。
>687
実はPerlベースでデータをアップする仕組みを実装してあるんですが、
段々データ容量が増えて来たせいでエラーに遭遇する事が多くなったんです。
そこで、色々調べたところ、
http://xxx.upken.jp/report/foradmin/ >Perl CGIは受信サイズの3倍強の空きメモリを使用します。
- 略 -
>なお、PHPの場合は、ファイルの1.1倍程度ですのでPerlよりも効率が良いのですが、仕様上2GB以上のファイルを受信できません。
という記述を見つけ、急遽PHPを学びがてら実装しているところなので、
デバグ向きの環境がどういうものなのかとか、PHPがどんなものなのかとか
まだよくわかっていない状態なのです。
>>686 処理の頭に
echo "error=".$_FILES['userfile']['error']."\n";
flush();
ob_flush();
って入れて画面上にerror=○って出てくるか確認。
途中で強制終了されてると
>>683 みたいなエラーになる。
692 :
680 :2006/11/17(金) 03:17:48 ID:???
>>690 やってみましたが、同じ現象です。
ソースを載せます。
-------
<?php
echo "error=".$_FILES['userfile']['error']."\n";
flush();
ob_flush();
$uploaddir = '/home/foo/data/upload/';
$uploadfile = $uploaddir . basename($_FILES['userfile']['name']);
echo '<pre>';
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
echo "File is valid, and was successfully uploaded.\n";
} else {
echo "Possible file upload attack!\n";
}
echo 'Here is some more debugging info:';
print_r($_FILES);
print "</pre>";
?>
-------
Apacheの設定が悪いのでしょうか・・・orz
>>692 プログラム先頭でflushしても何も出力できないんなら
リクエスト時点でApacheがタイムアウト起こしてる可能性は高いな。
httpd.confまたは.htaccessのTimeout設定をいじってみては?
けどローカルで100MB程度そんな時間かかんないよね Apacehからなら408が返るだろうし
>>692 プログラムを
<?php
echo "error=".$_FILES['userfile']['error']."\n";
?>
だけにしたらどうなるの?やっぱ接続リセット?
>>694 100MBどころか1MBじゃなかったっけ?
1kbyteだった レスポンスコードはどうなのかしら
698 :
680 :2006/11/17(金) 03:37:33 ID:???
>693 httpd.confのTimeoutは300だったので、1000にしてみましたがやはりダメでした。 >694 実はリモートで両方ともBフレ経由のインターネット環境です。 今引っかかってるのは1MB強のラインでテストデータは 「test」を羅列したテキストです。 (横に168文字縦に7行まではOKなんですが8行になるとダメです。) >695 試してみます。
699 :
680 :2006/11/17(金) 03:38:35 ID:???
>698 書き間違い。1MBじゃなくて1KBです。
700 :
680 :2006/11/17(金) 04:00:28 ID:???
すみませんorz マジですみません。m(_ _)m 自宅のLAN環境が原因でした。 この前までNEC製のADSLルータ(Web Caster 610M)+コレガの無線ルータで有線LANと無線LANを隔離して 無線経由でインターネットは見れるけどNASやプリンタはいじれないように設定していたのを、 Bフレに変えた時にADSLルータ(NEC製)をOKI製の光電話ルータ(RT-200KI)に変えられたせいで、 無線LAN環境からFTPでファイルをアップ出来ない等の不具合が出てたんでしたorz 普段HTTPでは特に問題は発生しなかったんでFTP固有の問題だと思っていたんですが・・・。 有線LANに繋いで見たら、とりあえずテスト用のテキストファイルも56KBのバイナリもアップ出来ました。 やっぱ116にTELしてNEC製のルータ(RT-200NE)に変えてもらおうかな・・・。
どこ製だとかいうのは別に関係ないと思うよ
[Fri Nov 17 08:15:22 2006] [error] [client 192.168.1.2] PHP Warning: POST Content-Length of 2051799559 bytes exceeds the limit of 1776287744 bytes in Unknown on line 0, referer:
http://*******/ これってなんですかね・・・・?設定は9997MまでOKなんですが・・・こんな数字に設定してないし
リミットが1776287744bなのに2051799559bをPOSTしたってこと
負荷の高い処理をかける際に非同期処理をかけようと思うのですが、どういった手段が適切 でしょうか? JAVASCRIPTを使うかコマンドライン命令をshellで投げるか程度しか思いつかなかった のですが、前者はユーザ環境次第、後者はサーバー環境次第で使えないのであまり気に いりません。
>>704 PHP板なんだからPHPで非同期処理するしかないだろう?w
>>JAVASCRIPTを使うかコマンドライン命令をshell この時点で考えていることがおかしいと思う
708 :
680 :2006/11/17(金) 12:16:19 ID:???
>>701 dクス。 ADSL→BフレでMTU値が変わったのが原因みたいです。ハズカシorz
スレ違いスマソ。
709 :
nobodyさん :2006/11/17(金) 12:28:15 ID:Kg6mrgCw
質問なんですが、 ログファイルに書き込むときのデータごとの区切り文字と、 データ中に同じ文字があった場合のときってどうしたらいいんでしょうか? 例えば 区切り文字が","(コンマ)の場合で、 データが aiueo,kakikukeko といった場合は データの中の","で、aiueoとkakikukekoとに分かれてしまうんです。
データをダブルクォーテーションでくくりゃいい。
>>709 データにありえない文字を区切りに使えばいいのでは。
区切りにはTAB文字とかのコントロールコードを使って、データからはきちんと除去しとくとかね。
HTMLタグをhtmlspecialcharsかけた上で<>を区切りに使う人も(古いCGIからの人とかに)多い。
データをXMLで記録する、という手もある。
いっそRDBMS使ってもいいと思う。というか推奨。
カンマ区切りデータでの一般的エスケープ方法(Excel方式)ってのもあるにはあるけど
データの生成とパースが無駄に遅くなるだけだから、
CSVファイルで外部とやり取りしたいわけでなければ
内部データでCSVを使うのはナンセンスだと思う。
712 :
nobodyさん :2006/11/17(金) 12:48:55 ID:wH2IZbEg
データに日本語SJIS使うとこけるけどね。
714 :
709 :2006/11/17(金) 12:57:29 ID:Kg6mrgCw
返信ありがとうございます。 どのサーバでも動作するシステムを作りたいと思っているので、 データベースを使うと、設定とかでめんどくさくなってしまうのではないかと思うのです。 CSVにこだわりがあるわけではないので、いくつか教えていただいた方法で試していってみたいと思います。
715 :
nobodyさん :2006/11/17(金) 13:54:39 ID:iYTLwrM4
,→&#44; に変換する(&は半角)
>>714 DBの初期設定項目なんて3.4個でしょ。
面倒ということはないはずだが・・・
717 :
nobodyさん :2006/11/17(金) 14:32:36 ID:P7ghOTn+
>>703 >>707 リミットがそこでないはずなので悩んだのですが
phpの限界ですか?
ちゃんと設定読んでくれるCMSで見たのにー
9997MB * スレッド数だぞ、死ぬだろ常識的に考えて・・・
719 :
nobodyさん :2006/11/17(金) 15:32:19 ID:/mn+LtBq
もっとメモリ積め
>>718 別に全プロセスが最大メモリをいきなり使うわけじゃないから
そうそう死なないけどな。
メモリ制限使ってない奴多いの?
722 :
nobodyさん :2006/11/17(金) 16:22:43 ID:P7ghOTn+
>>718 スワップしないでそのまま書けばまあ動くかなぁーと思ってました
ちなみにスワップはいつもmaxだよ。
723 :
nobodyさん :2006/11/17(金) 16:59:46 ID:xFjRjRSM
DBに接続して認証を行うシステムをPHPとMySQLで作っています。 これで何とか動くには動くのですがセキュリティ的に何か問題があるでしょうか? またもっと簡単にコードが書けるのなら教えてほしいです。 <form action="<?php echo $_SERVER['PHP_SELF']?>" method="post" accept-charset="EUC-JP"> id<input type="text" name="id" value="<?php echo htmlspecialchars($_POST['id']);?>"><br> <font size="2">パスワード<input type="password" name="pass" value=""><br></font> <input type="submit" name="foo" value="送信"> </form> <?php include "/virtual/nyahi/db_connect.php";//DBに接続 if($_POST['id']){ $post_id= $_POST['id']; $post_pass= $_POST['pass']; if(ereg("'",$hoge) ){//シングルクオーテーションはDBに接続させない die("'←これは嫌い。"); } if(ereg("'",$_pass) ){//シングルクオーテーションはDBに接続させない die("'←これは嫌い。");} $sql = "SELECT *"; $sql.= "FROM user "; $sql.= "WHERE id='$post_id' and pass='$post_pass'"; $rs = mysql_query($sql,$conn); if($rs == FALSE){ die ("エラーですよ");} while($rec = mysql_fetch_array($rs,MYSQL_ASSOC) ){ $ok = 1;//whileループに入ったことで取得を確認 $id = $rec['id']; $pass = $rec['pass'];} if(!isset($ok) ){ echo "IDまたはログインパスワードが誤っています。ご確認のうえ、再度ご入力ください。"; }else{echo "ようこそ${id}さん。";}} ?>
>>723 > include "/virtual/nyahi/db_connect.php";//DBに接続
DBへの接続は入力値があった場合だけでいいのでは。
> if(ereg("'",$hoge) ){//シングルクオーテーションはDBに接続させない
> die("'←これは嫌い。");
> }
普通、mysql_escape_string等でエスケープした上でそのままSQL文に渡すとこだと思う。
まぁ、IDとパスでそんな文字はありえない、ってことならいきなり終了でもいいけど。
あと変数名の間違いについてはスルーでいいんだよね?
> while($rec = mysql_fetch_array($rs,MYSQL_ASSOC) ){
> $ok = 1;//whileループに入ったことで取得を確認
1回しか取得する必要がないものをあえてwhileで回す必要はないんでは。
if($rec = mysql〜) でいいんじゃないの?
まぁ、大して変わんないけど。
> if(!isset($ok) ){
issetじゃなくif($ok)で真か偽か見るようにして、最初に$okは$ok=0;で初期化するようにした方がいい。
register_globalsがOFFだから汚染されるはずがない、という思い込みはミスしたときが危険。
つか、fetchをwhileでなくifにしちゃえば、こんなフラグ判定は要らないと思うけど。
でかい配列のエイリアスを作ってカウントすると カウントが遅いんですがなぜですか? $a = array_fill(0, 100000, 0); $b = & $a; count($a);
>>723 eregよりstrposの方が数倍早いよ。
if (strpos($hoge, "/") !== FALSE) { echo "$hogeに/が含まれる"; }
>>725 でかいからでは?
それが$b = & $aを$b = $aに変えると遅くないんですよ。 でもエイリアスじゃなくするとreset($a)が遅くなるし・・。なんで?
便乗質問だけどeregって使い道が全くわからんだけど。 1バイト文字列の正規表現ならpreg系でいいし、正規表現使わないならstrposでいいし、マルチバイトならmb_ereg使うよね? 違うのかな?
>>728 その認識でほとんど問題ないよ。
Perl系正規表現を使うのに抵抗が無いならそれ使うのがいい。
ただ、ereg系ってのは伝統的な正規表現なので、
昔からのUNIX使いにはそっちの方が馴染みがある人も少なくない。
pregはあくまでPerlで勝手に拡張した方言なので。
慣れた方法を使えるよう複数のI/Fを提供するのがPHP流だよね。
それにpregとmb_eregを混在して使うと正規表現の記法がバラバラで
混乱を招きやすいって問題も出るね。
>>725 どの辺がどう影響してるのかはPHPのソース読まないとちと即答しかねるが、
PHPのリファレンス機能は基本的に劇遅です。
>>725 countは値渡しでresetは参照渡しだから
>>728 pregはNFAでeregはDFA
732 :
723 :2006/11/17(金) 18:00:48 ID:xFjRjRSM
mysqlとphpでブックマークプログラムを 作ろうと思うんですが、 ディレクトリ情報ってどんな感じでデータベースに格納すれば いいでしょうか? 固定ならかんがえやすいのですが、あとから 特定のリンクを別ディレクトリへ、と考えると 何かよい定義方法があるとおもうのですが。
>>725 やや抽象的な書き方になるけど、一般的に
$a = 大きな文字列or配列;
$b = & $a; // $a、$b、共に「自分のエイリアスが1つ以上存在する」というフラグみたいなのが立つ。
$x = $a; // エイリアスさえなければ働くはずの参照カウントが働かなくなり、コピーし始める。
$x = $b; // この場合も同様にコピーし始める。
って感じで、別の変数($x)への代入が遅くなる。
count($a);という呼び出し前には「$countの引数 = $a;」という内部動作が加わるから遅くなるんじゃないかな。
余談だけど、この応用で、
function hogehoge(& $b) {
という関数があると、この関数内での$hensuu = $b;は全て、&なしの場合より遅くなる。
}// ,=ミ、ヽ `ー、_;:;:;:;:;:;:;:;:;:;:;:;:;ヽ / /,.- 、 ヽヽヽ `゙''‐、;:;:;:;:;:;:;:;:| _rー、ヽヽ ー 、_ ブ;:;:;:;:;:} ミヽ● ! | | `ー‐ 、ヽ、 /;:;:;:;:;:;/ `ー' V , -──一ミ、 l/:;:;:;:;:/ ___ / r'´,二二`ヽ | |/;:;:;:;:;/ ,',',',' ( / 〈 ● 〉l l/ /;:;:;∠ ,','il',',',ヽ ヽ ヽ二 /'´ ノ ,','ヾ、',','`ー'ー^! / _r-'´ , ' , ' `ヽ、__, ' !、 // ' , ' , ' `ー, ' , '! `ー'/ ̄ ヽ、, ' , ' , ' , ', -' ,'/ ` ̄ ̄フT ´ -----一'´ | ::::::::::::::::::::::::/ ::::::::::::::::::::::/
736 :
723 :2006/11/17(金) 19:34:07 ID:xFjRjRSM
>>736 2行目の
if($_POST['subcheck']){
を
if(isset($_POST['subcheck'])){
に書き直すのがよろしいかと。
質問町あげ
741 :
nobodyさん :2006/11/18(土) 03:10:04 ID:+NG79cWW
指定したURLの画像を、phpの変数に読ませたいのですが、 どのようにしたらいいでしょうか?
ファイル出力するときfopenしたまんまDB接続とかしても大丈夫なんですかね?
無料でメール送信を利用した アクティベーションサービスを利用できる ASPサービスってないですか? 自分のメアドを登録すると、そこにメールが 送られてきて、メールを開くとURLが書いてあって、 それをクリックすると、 「登録が完了しました」 って出る、例のアレのことです。 そこのアクティベーションの部分だけお借りしたいのです。無料で。
>>743 いけました。こんな簡単にできるとは…。
ありがとうございました。
>>745 残念ながらここは自分でプログラムする人用の質問スレなんだ。
ファイル作成時文字エンコードを指定するにはどうすればいいんでしょうか?
そんな指定はできない
あ、マジですか 変な質問してすいませんでした
752 :
nobodyさん :2006/11/18(土) 10:28:28 ID:Ta87IDDV
session.auto_startをOnにしようとしています。 レンタルサーバーなのでphp.inはいじれません。 そこで.htaccessを使って何とかしようとしているのですがうまくいきません。 php_flag session.auto_start On php_value session.auto_start 1 検索したところこれらを書けばいいとのことでしたが変化ありません(phpinfo()で確認)。 よろしくお願いします。
>>752 そもそも.htaccessが使える鯖なんですか?
754 :
nobodyさん :2006/11/18(土) 10:34:13 ID:Ta87IDDV
756 :
755 :2006/11/18(土) 10:51:55 ID:???
$_SERVER['SCRIPT_FILENAME']で行けるのかな 自己レス
>>752 .htaccessではどこまでの設定が許可されてるの?
httpd.confのAllowOverrideは何に設定されてるんだろ。
>>752 htaccessに関しては
アクセス制限に関しての設定しかできないようにサーバ側で規制してるかもしれないよ。
もっかいサーバのマニュアル読んでこい。
>>759 rl.phpってのが実行されたとき、それが直接呼び出されたのか
あるいは他のファイルにincludeされたのかを知りたい、ってことでしょ。
>>756 や$_SERVER['PHP_SELF']見てファイル名違ったら後者、でいんでないの。
>>755 $ vi abc.php
$GLOBALS['require_id'] = 'abc';
require'/rl.php';
とかしないと無理じゃね
762 :
755 :2006/11/18(土) 11:27:58 ID:???
if ($_SERVER['SCRIPT_FILENAME'] == strtr(__FILE__,'\\','/')) としたけどPHP_SELFの方が良いのでしょうか? なんかSCRIPT_FILENAMEってdllとかで動かすと環境変数なかったような・・・
script_filenameなんて余計なもの含まれてないよ。 自分の結果がでるのがphp_selfならそれ使えばいいじゃん。
メソッドの因数の基本値に、 メンバ変数を指定することは出来ないんでしょうか? var $table= 'テーブル'; function test($table_name = 'this->table') { echo $$table_name; //テーブルを出力させたい } これだと何も出力されません。
eval ('$'. $table_name);
>>765 ごめんなさい。
Parse error: parse error, unexpected $end in と出てしまいます・・・
ところで、なんで可変変数なんて気持ち悪いことをしないとダメなの?
>>764 俺ならこうする
function test($table_name = NULL) {
if(! isset($table_name)) $table_name = $this->table;
echo $table_name;
}
770 :
nobodyさん :2006/11/18(土) 13:29:21 ID:8ao0Px63
初歩的な質問ですみません。 フォルダの中にある画像を001〜100.jpgまでナンバリングしています。 それらを「次へ」をクリックしたときに 001>002>003と順番に表示させたい場合はどうしたらいいでしょうか? ググってみたのですが、さっぱりわかりません…
>>770 <?php $no = (isset($_GET['no']))? intval($_GET['no']): 1; ?>
<html><body>
<img src="<?php echo sprintf("%03d", $no); ?>.jpg">
<a href="<?php echo sprintf("%03d", $no + 1); ?>.jpg">次へ</.a>
</body></html>
772 :
771 :2006/11/18(土) 13:34:53 ID:???
ごめん。間違い。 <?php $no = (isset($_GET['no']))? intval($_GET['no']): 1; ?> <html><body> <img src="<?php echo sprintf("%03d", $no); ?>.jpg"> <a href="<?php echo $_SERVER['PHP_SELF']?>?no=<?php echo $no + 1; ?>">次へ</.a> </body></html>
773 :
770 :2006/11/18(土) 13:48:03 ID:8ao0Px63
ありがとうございます! 成功しました!! 先ほど書けばよかったのですが… 100枚を超えたときに「index.html」に戻したい場合はどうしたらいいでしょうか? 何度もすみません…
質問と言うより丸投げですね 100枚を超えたらindex.htmlへ戻るように条件分岐させれば良いんじゃないすか?
おまえ、それゼミの宿題だろ。 同じような宿題やってるんだが、同じゼミ生か貴様w
776 :
770 :2006/11/18(土) 14:11:41 ID:8ao0Px63
違いますw 同人誌のサイトを作りたくて・・
どこが分からないのか書けば教えてやる
778 :
770 :2006/11/18(土) 14:19:40 ID:8ao0Px63
<img src="
http://hoge.com/img/<?php echo sprintf("%03d", $no); ?>.jpg">
<a href="<?php echo $_SERVER['PHP_SELF']?>?no=<?php echo $no - 1; ?>">
<br />
戻る</a> ・ <a href="<?php echo $_SERVER['PHP_SELF']?>?no=<?php echo $no + 1; if($no == 100 or $no == 0) { ?>">
次へ</a>
条件分岐ってこんな感じでいいのでしょうか?
if 100 or 0 だったときにindex.htmlへの飛ばし方がわかりません・・
>>779 $noに変な文字列がくるかもしれんので
「if(!($no>0 AND $no <=100)){」の方がいいかも新米。
# 小数点な数がきたりして
781 :
770 :2006/11/18(土) 15:30:27 ID:8ao0Px63
>>779 さん
>>780 さん
成功しました!
これで次に進むことができます!ありがとうございました!
>>775 ゼミ担当教官、同人誌サイト鋭意開発中ワロス
サイトの品質はゼミ生の出来に
掛かってるんだから超ガンガレ
$charset="Shift_JIS"; print('<meta http-equiv="Content-Type" content="text/html; charset={$charset}">'); という感じのソースなんですが、 {$charset}の部分がそのまま出てしまいます。 ""で囲んで、"をエスケープ処理orヒアドキュメントでもできるのはわかりますが、 この''で囲んだ場合、どのようにしたら思い通りになるか教えていただけませんか?
>>783 print('<meta http-equiv="Content-Type" content="text/html; charset=' . $charset . '">');
クオート範囲の外に出して文字列連結。
>>784 おぉ!お早いレスどうもありがとうございます!
なるほど、一回出して連結すればいいのですね。
大変助かりました。どうもありがとうございます。
786 :
nobodyさん :2006/11/18(土) 17:36:24 ID:lFfXscZq
PHPとは直接関係ないかもしれない質問ですが、 どなたかnotepad++でPHP書いてる方いませんか? コメントの部分に日本語を使うと文字化けするのですが、 私だけでしょうか・・・?
>>787 個別に指定しないとだめなんですね。
PHPのコメントのところのフォントを変えたらできました。
どうもお騒がせしました。
>>788 フォントの指定を1番上の空っぽのにしてしまえばデフォルトのを使うようになる。
元々の設定がコード部分とコメント部分とで異なるフォントにしてあるだけ。
790 :
nobodyさん :2006/11/18(土) 20:38:38 ID:IiQLRyMs
PHPからINSERT〜っていうSQL文を実行しようとしているのですが うまくいきません。。。 DBにぶち込むソースは既に動作確認できている部分かたとってきたので 動かないことはないかと思うんですが、SQL文の中に特定の文字が入っちゃいけないだとか 動かないときの常套手段なんかありましたらお願いします。
>>790 SQLのエラーメッセージ表示。
例えばmysqlなら
$result = mysql_query($conn, $sql);
echo mysql_error();
みたいな感じ。
コピペっていうんだからアカウントとパスワード、SQL側の設定等々とかも疑わないといけん 範囲広すぎ、エスパー居ませんか?となるわけだ
793 :
nobodyさん :2006/11/18(土) 21:23:00 ID:PIy0ZcR3
PHPから彼女にデータを挿入したいのですが 彼女にインサート権限がありません。どうしたらいいですか?
}// ,=ミ、ヽ `ー、_;:;:;:;:;:;:;:;:;:;:;:;:;ヽ / /,.- 、 ヽヽヽ `゙''‐、;:;:;:;:;:;:;:;:| _rー、ヽヽ ー 、_ ブ;:;:;:;:;:} ミヽ● ! | | `ー‐ 、ヽ、 /;:;:;:;:;:;/ `ー' V , -──一ミ、 l/:;:;:;:;:/ ___ / r'´,二二`ヽ | |/;:;:;:;:;/ ,',',',' ( / 〈 ● 〉l l/ /;:;:;∠ ,','il',',',ヽ ヽ ヽ二 /'´ ノ ,','ヾ、',','`ー'ー^! / _r-'´ , ' , ' `ヽ、__, ' !、 // ' , ' , ' `ー, ' , '! `ー'/ ̄ ヽ、, ' , ' , ' , ', -' ,'/ ` ̄ ̄フT ´ -----一'´ | ::::::::::::::::::::::::/ ::::::::::::::::::::::/
Zend社等の製品を使用しない限り、PHPは実行時に毎回コンパイルされ、キャッシュは されないそうですが、その場合、実行するファイルは小さい方が高速なのでしょうか? 例えば、たくさんの関数を定義してあるcommon_func.phpというファイル1つを作って毎回include するのと、関数毎に細かくfunc1.php, func2.php, func3.phpとファイルを分けて必要な場合だけ、 必要なファイルをincludeするのでは、後者の方が高速なのでしょうか?
ホントに初歩的で申し訳ないのですが、 tp://bbslabo.breeze.jp/c001_spam_lib_php_letsphp_ibbs.html のスパム耐性 PHP-I-BOARDをお借りしてローカルで動かしたのですが、 通常の書き込みはできるものの、返信をしようとするとなぜか関係ないページに飛ばされます。 (YouTubeだったり) phpのソースをみて youtubeのアドレスを探してもみつからず、なぜそうなるのかがわかりません。 なお、強制移動させられたあと戻るとちゃんと書き込みはできています すいませんがどこをいじったらこの現象が直るかおしえていただけないでしょうか?
799 :
798 :2006/11/19(日) 00:02:58 ID:???
まさかこんなのが被るとは思わんかった...
>>795 > Zend社等の製品を使用しない限り、PHPは実行時に毎回コンパイルされ、キャッシュは
> されないそうですが、
zend社以外でもキャッシュは可能。
eacceleratorとか。
残りの質問は実際に作って試してみれば?
PHPでクリティカルだったりリアルタイムな処理はしないだろうし、
性能向上はハードに任せてメンテナンス性を重視して設計するのも
ありでは?
あ、実験したら結果を発表してね。
つ
ttp://pear.php.net/package/Benchmark これ使うと便利だよ。
802 :
nobodyさん :2006/11/19(日) 02:13:59 ID:qt8hCJ5U
>>802 PEAR::HTTP_Requestとか使うと吉
>>795 キャッシュならAPCとかもあるね。
関数定義に関しては、1つにまとめるのも分けるのも
どっちも速度低下の可能性があります。
まず無駄な関数定義は速度低下の元です。
それから読み込むファイルの数が増えるのも速度低下になります。
ってことでバランスの問題でしょう。
805 :
nobodyさん :2006/11/19(日) 02:30:16 ID:qt8hCJ5U
>>803 なるほど、そんな感じの事になってしまうのですね
ありがとうございました
806 :
nobodyさん :2006/11/19(日) 03:51:16 ID:Zd3ixGQK
PDOで odbc:Driver={Microsoft Access Driver (*.mdb)}; な接続を行う場合、エンコードは指定可能でしょうか? デフォルトで CP932 (Shift_JIS) のようですが、 Unicode文字 (UTF-8) を扱えずに困っています。 Windows Server 2003 / IIS / PHP 5.2.0
php-5.2.0のインストールで、makeでエラーが出ています。 make: *** [sapi/apache/sapi_apache.lo] Error 1 configureで--with-apxs=/usr/local/apache/bin/apxsを付けています。 何が問題なんでしょう? Solaris10 x86です。 以下エラーあたりのログです。 In file included from /usr/local/apache/include/buff.h:32, from /usr/local/apache/include/httpd.h:36, from /var/spool/pkg/php-5.2.0/sapi/apache/php_apache_http.h:47, from /var/spool/pkg/php-5.2.0/sapi/apache/sapi_apache.c:24: /usr/local/include/openssl/ssl.h:747: error: syntax error before "X509_VERIFY_PA RAM" /usr/local/include/openssl/ssl.h:755: error: syntax error before '}' token /usr/local/include/openssl/ssl.h:896: error: syntax error before "X509_VERIFY_PA RAM" /usr/local/include/openssl/ssl.h:976: error: syntax error before '}' token In file included from /usr/local/include/openssl/ssl.h:983, from /usr/local/apache/include/buff.h:32,
ログの続きです。 from /usr/local/apache/include/httpd.h:36, from /var/spool/pkg/php-5.2.0/sapi/apache/php_apache_http.h:47, from /var/spool/pkg/php-5.2.0/sapi/apache/sapi_apache.c:24: /usr/local/include/openssl/ssl3.h:414: error: syntax error before "EC_KEY" /usr/local/include/openssl/ssl3.h:441: error: syntax error before '}' token /usr/local/include/openssl/ssl3.h:443: error: syntax error before '}' token In file included from /usr/local/apache/include/buff.h:32, from /usr/local/apache/include/httpd.h:36, from /var/spool/pkg/php-5.2.0/sapi/apache/php_apache_http.h:47, from /var/spool/pkg/php-5.2.0/sapi/apache/sapi_apache.c:24: /usr/local/include/openssl/ssl.h:1520: error: syntax error before "EC_KEY" /usr/local/include/openssl/ssl.h:1521: error: syntax error before ')' token /usr/local/include/openssl/ssl.h:1523: error: syntax error before "EC_KEY" /usr/local/include/openssl/ssl.h:1524: error: syntax error before ')' token make: *** [sapi/apache/sapi_apache.lo] Error 1 ご教授お願いします。
810 :
nobodyさん :2006/11/19(日) 11:07:15 ID:EVuH/Yur
>>801 > 性能向上はハードに任せてメンテナンス性を重視して設計するのも
> ありでは?
それはひょっとしてメンテナがタコだったりろくに設計能力が無いと永久に救われないという事を言っているのか?
813 :
nobodyさん :2006/11/19(日) 12:30:46 ID:Zd3ixGQK
>>809 UNIX で適当なスレが見当たらなくて…
あんまし、こんな構成で組んでいる人っていないんですかね。
私自身も、インターネットじゃ絶対にこんな構成では組まないのですが、
イントラ用に検討しているので。
>>807 opensslのヘッダファイルでエラーが出てるんだから
openssl周りじゃね?--with-opensslはつけてるのか?
そのログを見てわからないレベルって事は何もわかってないんだろうし 素直に素人でも使えるパッケージ系を使った方が良いと思う
PHPのinclude文でファイルを読み込む場合、これは実行時に読み込まれる のでしょうか?例えば、 if($flag == 1) { include("a.php"); } else { include("b.php"); } のようなプログラムの場合$flagが1の場合はb.phpは読み込まれないって 考えでいいでしょうか?それとも、初回のコンパイル時に全てのincludeファイル は読み込まれて、実行はされないってことでしょうか?
>>817 >>816 ではないが便乗質問。
ということは、APCやeacceleratorでキャッシュされる場合は条件が
変わるごとに書き換えられるのかな?
>>818 APCやeacceleratorのキャッシュの仕組みを
ちゃんと把握してるわけじゃないから確信はもてないが
書き換えというか一度includeされた時点でそのスクリプトの
キャッシュが作成されるっていう感じじゃないかな
とういうことは、たくさんの関数を1つのファイルに定義しておいて、 いろんなところで使いまわすより、関数を細かくファイルに分けておいて、 使う場合のみ、適宜includeした方のが、高速ということになりそうだね。
確認したわけではないけど確かAPCはインクルードファイルはキャッシュしないとか 何処かの記事で見たけど良くはしらね
おれの経験からいうと、インクルードではキャッシュ生成されない
pearのcache_liteだっけ?あれはわざとinclude使ってないとか書いてあったような
824 :
nobodyさん :2006/11/19(日) 15:57:45 ID:EVuH/Yur
会員登録制のシステムを作ろうとしています。
自分の考えている流れとしては、
1, 登録ページでIDとメールアドレスとパスワードの3点を入力してもらう
2, 登録されたメールアドレスにsession(?)とIDを後ろにつけた登録URLを送る
http://example.com/register.php?session=hogehoge &id=piyopiyo見たいな感じで。
3, 上記URLのアクセスがあった時点で会員登録完了
ただし24時間以内にアクセスがない場合無効。
という感じにしようと思います。(この時点で間違っているようでしたらご指摘ください)
そこで、今2の仮登録の情報をどこに保管するかで困っています。
自分の考えられる方法としては
1, 2の時点でMySQLに挿入してしまう(自分はMySQLを使っています)
2, どこかに一時ファイルとして作成して保管する
この二つです。
1はSQLの操作なのでなんとなくわかるのですが、24時間で消す方法がわかりません(クローン?使えばできる?)。
2はファイル操作をしたことがないので良くわからないです。
このような処理を行う場合どのようにすればいいでしょうか?
1,2のどちらのほうが良いか、また、それ以外に良い方法があるのなら教えていただきたいです。
よろしくお願いします。
どっちでもいいよ 仮登録した日時を取得しておいて本登録されるタイミングで 24時間過ぎていたら無効、んでその時とかに24時間過ぎてる情報は破棄
826 :
796 :2006/11/19(日) 17:00:23 ID:???
>>796 よろしくお願いします
他のCGIではならないのでどっかソースをいじるのだとは思うのですが
こんな症状になるのは自分だけでしょうか?
>>826 1、お前のパソコンが犯されている
2、お前の脳味噌が腐っている
3、宣伝
4、配布者が犯人
>>821-822 するする。設定によるかもしらんが。
うちでAPC使ってて、rsyncのミスでincludeファイルを
タイムスタンプを過去のもので上書きしちゃったら
思いっきり誤動作したもの。
includeファイルはそれぞれ個別にキャッシュを生成してる。
「戻る」(back)で戻ってる部分を探せよ。 そのせいだろ。
>>824 うちはDBに記録してる。
で、毎日1回のメンテナンスをcronで動かして
24時間以上経過してるのは削除してる。
831 :
796 :2006/11/19(日) 17:34:07 ID:???
>>827 PCがおかしいのですかね?
IEでやるとページが表示できませんってなって更新すると書き込みできてます。
戻る時のアドレスも ibbs.php 本体のままなのです
他の人がならないということがわかっただけでも助かりました。
2、
>>824 別にcron使わんでも、register.phpにアクセスされたときに、
ついでにその仮登録情報のチアムスタンプが24時間以内のものかどうか確認して、
期限を過ぎてたらDBから削除、過ぎてなかったら本登録処理、ってやればいいでしょ。
834 :
nobodyさん :2006/11/19(日) 23:12:50 ID:afBb4Sje
クラス名とその中のメソッド名は同じ名前が使えないのでしょうか?
this と selfの違いってなに?
それコンストラクタ
>>835 thisは自身のオブジェクト、オブジェクトの中からじゃないと使えない
selfは単なる自分のクラス名、スタティックコール内からでも使える
839 :
834 :2006/11/19(日) 23:26:24 ID:afBb4Sje
コンストラクタって newしたときに実行される関数というふうにとらえて間違いないでしょうか?
間違いないよ
841 :
nobodyさん :2006/11/19(日) 23:55:33 ID:QPerEU0+
Javaって最強ですか?
>>833 仮登録されたまま放置された登録レコードのゴミ掃除の話だと思ってたよ。
843 :
nobodyさん :2006/11/20(月) 00:04:20 ID:zRxNwc2j
レス遅くなりましたが
>>824 です。
答えてくれた方々ありがとうございました。
>>833 のチアムスタンプがググってもわからなかったのですが何のことでしょうか?
今のところDBに入れてcronで削除していこうと考えています。
>>843 833じゃないけどタイムスタンプの打ち間違いかと。
>>843 で、833+ゴミ掃除ってことで、「誰か」が本登録処理にアクセスしたときに
SQLで「delete from 登録 where 仮登録日付 < 24時間前」流せば一発で全部掃除できない?
最後の1人が放置したまま誰もアクセスしてこなくなったら掃除できないけど
そこまで気にするほどのものじゃあるまい。
847 :
nobodyさん :2006/11/20(月) 00:16:51 ID:zRxNwc2j
>>845 なるほど、ありがとうございます。
>>846 これならクローン使わずにもできますね。
こっちの方がよさそうです。
ありがとうございます。
>>847 この辺はユーザの登録数と登録アクセス頻度次第だよ。
ファイルでもDBでも数が多いところに削除の検索処理を入れると重くなる
(特にSQLのdeleteはロックがかかってその間のselectが停止する)ので、
全体のレスポンスに問題が出るケースもある。
そういう場合はcronでアクセス頻度の低い時間帯にメンテした方がいい。
その辺のTPOは踏まえた上で設計すべし。
849 :
nobodyさん :2006/11/20(月) 00:38:19 ID:zRxNwc2j
>>848 将来のことを見据えて(どうなるかわかりませんがw)
cronを使ってみます。
わからないことばかりですいませんでした。
いろいろとありがとうございました。
最初は逐次でやっといて困ってからcronにすりゃいいじゃん
851 :
nobodyさん :2006/11/20(月) 02:38:25 ID:fzLhPh+i
初心者ですが、セッションについて教えてください。 今、例えば、トップページがあって、そこからログイン→mypageでmixiみたいに 自分のページが表示されるような感じで、写真を投稿できるようになってます。 トップページには検索ができて、それは誰でもできるようになってるのですが、 ログインしたユーザー(セッションを持っている)は、その検索結果(写真)を 自分のページに保存できるような感じになってます。 これは、セッションを持つなら登録ボタン表示、持たないならボタンを非表示みたいな 感じにしています。 ここで、質問なんですが、このようにセッションを持つユーザーと持たないユーザーが 同じページを見れるのは危険でしょうか? セッションを持つユーザーが、セッションが必要なページと必要じゃないページを行ったり来たり できるのは、危険でしょうか? どうかアドバイスお願いします。
>>852 根拠は上の方に書いてあるこれ。
> で、この「PHPアクセラレータ」の種類がいろいろあるということはそれぞれ一長一短なワケですが、
> とりあえずあっちこっちのネット上における各種試用レポートなどを総合すると
> 「APC (Alternative PHP Cache)、eAccelerator、XCacheのうちのどれか」が無難なようです。
本人の考えってより、この人が発見できたネット上の試用レポートってのがどれなのか、が問題みたいね。
でもアクセラレータの試用レポートの類で「有料だから無視」とか言ってるのはほとんど無いと思うけど?
>>853 それじゃ根拠になってない。
「おすすめできない」と判断するに至ったソースも一切書かれてないし。
GIGAGINEの記事とかアテにすんなよ 自分でちゃんと調べてどれがいいのか決めた方がいい
>>855 それもそうだな。
じゃあお前の意見もアテにしないことにするわ。
そうそう。他人の意見なんかに耳傾けず自分で全部調査しなさいね。
うちは Zend Optimizer + eAccelerator の同居で成功していると思うけどな
>>181 の5000までの素数ベンチプログラムで
平均3.20-3.25 位
環境は
Athlon2800
M PC3200-512 x 2
OS WinXP
Apache 2.0.59
PHP 5.2
Zend Optimizer
eAccelerator
参考までに
MySQLでsort というフィールドに一意性を持たせて 順番データを保持させようとしています。 指定行の「一個上に上がる」をクリックしたら、 そのデータのsortを-1して、 そのままだと同じ値になってしまう行データのsortを+1したいと考えています。 ところが一意性を持たせてあるので、 「そのsortを-1して、」という時点で、 一意性がないぜゴルァというエラーが出てしまいます。 指定行の-1と 別指定行の+1を同時に処理させる方法はないでしょうか?
860 :
nobodyさん :2006/11/20(月) 10:48:14 ID:a1LEez8m
一意性を持たせない 一回削除しといて再度INSORTするとか
配列1つを引数にとって配列を返す関数 return_array($array) があるとして、 その戻り値の最初の要素の値を取り出したいのですが、 $result = return_array($array)[0]; と書くとParseErrorになります。 どう書けばよいのでしょうか?
>>861 $tmp = return_array($array);
$rsr = $tmp[0];
って書けば?
863 :
861 :2006/11/20(月) 12:04:17 ID:???
なるほど、やはり一度変数に入れるしかないのですね。 ありがとうございます。
>>858 実際のWebシステムでは、スクリプト本体よりもむしろ
サーバやDB入出力の部分がボトルネックになるので、
素数ベンチなんてほとんど意味がないけどな。
>>863 じゃあ
list($result, ) = return_array($array);
ありがとう。
868 :
859 :2006/11/20(月) 13:40:57 ID:???
>>860 さんの方法以外に良か方法なかとでしょうか
>>868 0をスワップ用にしといて片方を0にupdateしてから後2回updateするとか
870 :
859 :2006/11/20(月) 15:13:58 ID:???
>>869 天才を発見しますた
シンプルで楽層ですね、
ありがとうございます、その方法で行きます
いや最大で全件変えなきゃだめじゃん。 そういう関数作ったけど俺は。
>>859 一意性はスクリプト側で担保しろ。
別に難しいことじゃない。
任意のsortの値をINSERTかUPDATEする前に、
事前にSELECTしてみて存在するか否かを確認すればいいだけだ。
複数のレコードを一斉に変更してかつ一意を保とうとするなら 前後でのテーブルのLOCKを忘れるなよ。
オブジェクト指向PHPを意識しはじめたんですが、 肝心のオブジェクト指向がよくわからない・・・ 従来のプログラムを、適当に部分部分でパーツ化して、 それをメソッドにすればいいんでしょうか? オブジェクトにするメリットがわからない状態なので、 とりあえず適当にやってればそのうちわかるだろう程度に 考えているのですが、やっぱちゃんとした本買って勉強するべきですか?
焦らなくても、マニュアルを眺めていたらそのうち書けるようになる
書くのは慣れだけでいくらでもできるようになるが 設計はそれじゃいつまでもできるようにならんよ。 せめて他人が書いた(腐ってない)ソースを読むくらいしないと。
腐ってないソースを見つけるのが難しいんだけど・・・
さらに言えば、ソースが腐っているか否かを見極めるのがまた難しく、 それが出来るくらいの能力がある人なら既に設計能力も高いと思う。
結局、OOPの良書と言われている本を読まなきゃ駄目、でFA?
PEARなりフレームワークなりのソース読めばいいじゃん
882 :
nobodyさん :2006/11/20(月) 20:57:28 ID:zRxNwc2j
もう時代はAOPらしいけどね。 アスペクト指向だっけか? アスペクトPHPとかそのうちくるんだろうか・・・
そしてコンポーネント指向、次にエージェント指向
念のため、AOPはOOPを補助するものであってサヨナラOOPってわけじゃない。
言わばただのフィルタじゃん、AOPって
887 :
nobodyさん :2006/11/20(月) 21:30:15 ID:BPin2pz1
mb_ereg系はデフォルトで^が改行直後、$が改行直前にもマッチするってあちこちで書かれてるけど、
実際やってみたらマッチしませんでした。
で、オプションでmを指定したらマッチするようになりました。
サンプルコード:
echo mb_ereg_replace("^.", "", "123\n123") . "\n\n";
echo mb_ereg_replace(".$", "", "123\n123") . "\n\n";
echo mb_ereg_replace("^.", "", "123\n123", "m") . "\n\n";
echo mb_ereg_replace(".$", "", "123\n123", "m") . "\n\n";
結果:
23
123
123
12
23
23
12
12
バージョン: 5.0.5
でもマニュアルには
> m を指定した場合、マルチラインモードとなり、 改行文字も "." に含まれるようになります。
(
http://www.php.net/manual/ja/function.mb-ereg-replace.php )
としか書かれてません。
結局、デフォルトで^$が改行直後直前にマッチせず、mを指定するとマッチするようになるのが正しい挙動なんでしょうか。
それともこれはバグなのでしょうか。
あちこちってどこ?
889 :
nobodyさん :2006/11/20(月) 22:30:16 ID:efSEaAzM
PHPのモジュールをコンパイルしてインストールするに際に、phpizeコマンドが必要 ですよね? それで、PHPマニュアルに「もし phpize コマンドが見つからない場合は、 適切な devel 版の PHP パッケージをインストールしましょう。 PHP や拡張 モジュールをビルドするために必要なヘッダファイルや phpize コマンドは、この パッケージに含まれます。」 と書かれていたので、PHP-5.2.1-devをインストールしたのですが、phpizeコマンド が認識されません。phpizeコマンドを使うためには他に何が必要なのでしょうか?
891 :
889 :2006/11/20(月) 22:55:01 ID:efSEaAzM
>>890 確かに、パスを通す必要があったようです。
しかし、WindowsでPHPを使っているのですが、パスを通すといっても
phpizeを使うためにはどこを指定すれば良いのか分かりません。
よろしければ、教えていただきたいのですが。
ぐぐったほうが早い
phpizeってwinなら関係ないかと 具体的に何を入れたいんだよ
894 :
889 :2006/11/20(月) 23:04:45 ID:efSEaAzM
>>893 PHPでNamazuを呼び出すためのモジュールです。
phpizeコマンドを使えるようにして、configure,makeはcygwinでやろうと
思ったんですが。
>phpizeってwinなら関係ないかと・・・windowsでは必要ないんですか?
またおまえか ソースに付いてるREADME.WIN32-BUILD-SYSTEMは読んだのか?
ああwin用のPHPじゃなくてcygwinか、、、 でもcygwinでphp入れたならbinにphpize入ってないか?
>>894 linuxやcygwinでビルドしてもそれをwinのphpでは使えないよ
898 :
889 :2006/11/20(月) 23:20:34 ID:efSEaAzM
>>897 そ、そうだったんですか。。。
じゃあ、PHP自体もcygwinを使ってWindows用のではないPHPを入れなければ
いけないんですね?
>>898 うん、つーかcolinuxとかVMwareの方がいいと思うがcygwinなんかより
900 :
889 :2006/11/20(月) 23:33:46 ID:efSEaAzM
ありがとうございます。モジュール組込みの前に環境自体が 整っていなかったようですね。
初歩的な質問で申し訳ないのですが、 PHPをCronで実行する方法が判らなくて困っています。 どなたかご教授下さい。Fedora5です。
>>901 crontabにCLI版PHPで作ったスクリプトファイルをフルパスで登録してやるだけ。
CLI版PHPで作ったスクリプトファイルとは一体何でしょう(つд`;)
>>903 #!/usr/local/bin/php
<?php
:
?>
みたいなスタイルで書いたスクリプト。
1行目でCLI(コマンドラインインターフェース)版としてインストールしたPHPのフルパスを書く。
もしくは、crontabに /usr/local/bin/php スクリプトファイルのフルパス って指定をするのもアリ。 これならスクリプトファイルのパーミッションを実行可にしなくてもOK
906 :
nobodyさん :2006/11/21(火) 00:43:56 ID:+Nuu4hvh
超初心者ですがWAMPでデータベースを作ろうとMySQL5.0.27、PHP 5.2.0をインストールしたのですが、 ふと気付いたら鯖(Xserver)のスペックが以下の通りでした。 PHPバージョン 4.3.9 ( セキュリティパッチ適用済 ) MySQLバージョン 4.0.26 これって、自宅鯖や他の鯖を使わずにあくまでも今使ってるXserverでDBを利用するなら、 インストールし直してPHP4.3.9・MySQL4.0.26の環境でDBを作成しないと駄目なのでしょうか?(´・ω・`)
>>906 駄目ってことはないけど、どこが違うのか常に意識しとく必要はある。
初心者ならインストールし直して揃えといた方が無難。
>>904 何度もすみません;
#whereis phpとやったら
php: /usr/bin/php /etc/php.ini~ /etc/php.ini /etc/php.d /usr/lib/php
となったのでcrontabに
0,10,20,30,40,50 * * * * /usr/bin/php [対応スクリプトへのフルパス]
とやったものの10分経過しても更新されずでした・・・
service crond restartもやったのですが駄目でした('A`)
それでどうしろと?
910 :
nobodyさん :2006/11/21(火) 01:18:54 ID:+Nuu4hvh
>>907 有難う御座います、インストールし直してチャレンジしてみます!
>>908 まずスクリプトが実行されたのかどうかを確認してみては?
スクリプトの先頭にファイルへのログ出力を入れてみるとか。
ちなみにコマンドラインで
/usr/bin/php [対応スクリプトへのフルパス]
を実行したらそれはちゃんと動くんだろうね?
特にカレントディレクトリには気をつけた方がいいよ。
試しにrootディレクトリ上で実行してみるといい。
function dt ($method='select') { $array = $this->$method(); } こんな感じで因数内の文字列を使い、 メソッドを呼び出すと、エラーが出てしまいます。 Fatal error: Method name must be a string in これはあきらめるしかないんでしょうか・・・
いんすう!?
なんかデジャブ・・・764か? call_user_func()使えば。 あと因数でなく引数な。
>>912 $method ってちゃんと文字列になっているの?
nullか何かだろうな。変だと思ったらvar_dump()しろよ
918 :
nobodyさん :2006/11/21(火) 16:25:26 ID:bLvv9/Ln
class Hoge{ function A() { } function B() { function C() { } } } 上記の場合、 B ( )の中からA ( ) を呼び出すには $this->A() ですが、 B ( )の中からC ( ) を呼び出すには どう記述すればいいんでしょう???
functionをネストした場合実行時の定義になるから B()をコールした時に普通にグローバル関数としてC()が定義されるはず
920 :
918 :2006/11/21(火) 16:34:42 ID:???
>>912 function dt ($method = 'select') {
$array = call_user_func(array($this, $method));
}
試してないから動かないかもしれないけど...
>>914 ,921
call_user_func()でも可変関数でもどっちでもいいんじゃないの?
923 :
921 :2006/11/21(火) 17:40:18 ID:???
>>922 シングルトンパターンで、クラス内でオブジェクトを生成するときなんかは
$class = __CLASS__;
return new $class();
みたいにすると楽チンだよな。
912のコードをcall_user_func()を使って書き換える意義は何か、という意味なんだけど
諦めるよりは意義あるんじゃね
926 :
921 :2006/11/21(火) 18:02:59 ID:9jzN//PM
>>924 とりあえず、$methodにnullぶちこんでも警告が出るだけでエラーにはならなくなる。
「とりあえずそれで動いた」な対策は、phpがアップデートしたときに、 謎の不具合現象が発生し意図した動作をしない!どこだ、何だ!と 悩むことになるでしょう...。
クラスの関数に比べての優位性がよくわかりません、 プログラムを車にたとえば、 クラスはタイヤ、と表現してる本とかありますが、 それは関数も同じでは・・・? 単一関数で片付けられないようなものは クラス、という認識を持ってるのですが間違ってますよね?
関数はギアボックスの中の歯車でクラスはギアボックスの事を言う タイヤだとどちらでも良いイメージだな
スレ違いだけどタイヤはどう見ても式じゃない
いや、俺らのレベルが高いんじゃなくてキミのれべry
933 :
nobodyさん :2006/11/21(火) 21:31:39 ID:PV0heR9Q
定型の決まった文字を、自動的に2chの掲示板に書き込んでくれるようなソフトって作れますか?
次の質問どうぞ
メソッドがタイヤ って書いてるんじゃないか?
GD使って棒グラフを生成したいのだが、どっかにライブラリ落ちてない?
ぐぐれば出てくるんじゃないの jpgraphとかpearのimage_graphとかsparklineとか
938 :
nobodyさん :2006/11/21(火) 22:42:42 ID:d5GN+nTA
windowsXPにapache1.3とphp4.4です。 初期設定の段階なんですが<?php phpinfo(); ?> がブラウザでそのまま表示されます。 どこが悪いんですか?
頭ですね。手遅れです。
そりゃ大変だ
>>938 httpd.confに
AddType application/x-httpd-php .php
942 :
983 :2006/11/21(火) 23:02:05 ID:d5GN+nTA
httpd.confに AddType application/x-httpd-php .php入ってます
apache再起動
944 :
983 :2006/11/21(火) 23:06:58 ID:d5GN+nTA
再起動しました
LoadModule/AddModule
コマンドプロンプトから format c:
何も起こりませんでしたが何か?
非WindowsでPHP書いてる方は何人いるのかな? うちはWindows使えない時だけだけど。。。
うちはむしろUNIX使えないときだけWindows。
951 :
nobodyさん :2006/11/22(水) 02:16:11 ID:3AXcb0+r
フォームで$_GETを使用したいのですが セキュリティ上の不安があります。 たとえば、値が未入力であったり不正な場合 TOPページに飛ばしたいのですがどうすればよいでしょうか
format c:を打てば実行されると思ってるバカがいるスレですね。
954 :
nobodyさん :2006/11/22(水) 02:27:21 ID:aJWjKYEf
オブジェクト指向について教えてください。
>>954 PHP = オブジェクト指向でないから、スレ違い。。。火星にでも行ってろ
956 :
nobodyさん :2006/11/22(水) 02:34:50 ID:3AXcb0+r
>>952 わお ありがとうございます。未入力の場合はこれで解決しそうです。
あと、値にタグを入力された場合、表示が少しおかしくなるのですが
タグの無効化的なものはありますでしょうか
strip_tags()かhtmlspecialchars()
>>956 XSSとかわからないなら配布済みのスクリプト使えば
strip_tags()かhtmlspecialchars()もわからないのなら致命的だとおもうよ
ちょいと質問です。
WindowsXP/Apache2.0.58/PHP5.2.0 を自PCに入れ、Webアプリをぽちぽち作っているんですが
・php.ini側で"session.use_trans_sid = 0"にして、URLにもSIDを埋め込まず
・かつ、クライアント側で 全てのCookieを拒否、念のため全てのゾーンのセキュリティを'高'にしても
Cookie受け入れ拒否&URLに差し込んでもいないのに、セッションが成立してしまっています。
(ただセッション変数が引き継がれているからってセッションが成立してない、とか?あるんかなそんな事…)
これって何故なのでしょうか?
------------------以下テスト.phpソース------------------
<?
session_start();
if (!isset($_SESSION['count'])) { $_SESSION['count'] = 0 ;}
$_SESSION['count']++;
?>
<html>
<body>
あなたは <?= $_SESSION['count'] ?> 回目の訪問です。
<a href="<?php echo $PHP_SELF ?>">カウントを増やす</a>
<?php
echo '<BR><BR>TEST<BR><BR>' . $PHPSESSID ;
?>
------------------以上テスト.phpソース------------------
.phpへのアクセスは
ttp://localhost/***.php で行っています。
すみません、書き忘れで追記です。 複数ブラウザを立ち上げて同時に前述の.phpにアクセスした時に $PHPSESSIDは毎回違う値になってます。 %USERPROFILE%\Cookies\ 配下には(当然ながら)当該Cookieが存在しない…様に見えます。 ボスケテ。
セッションクッキーを受け入れてるから
SIDは別に1PCに1IDではないので複数のブラウザで開けば当然そうなります。 アカウントか何かを発行しているサイトであればアカウントから割り当てるが 宜しいかと。
<script>document.write(document.cookie)</script> みたいなのを入れてcookieが どうなってるのかみてみたら ブラウザのURL入れるところに javascript:alert(document.cookie) と入れるとか
964 :
959 :2006/11/22(水) 12:11:38 ID:???
>>961 ,962,963
ご教授ありがとうございます。
恥ずかしながら普通のクッキーとは別物の"セッションクッキー"なんてのがあるなんて知りませんでした。
確かに
>>963 の scriptで見てみたら見事に $PHPSESSID=*********** が入ってました。
# これって単一のCookieファイルに保存されてるんじゃ無いですね。
また、Cookie関連設定全て拒否にしても
>>959 で書いた.phpにてカウンタが回っていたのは
.phpにアクセスする際に
ttp://localhost/ にしていたからでした。
hostsに "(自IP) testtest.net" と記述、
ttp://testtest.net/***.php でアクセスしたらば
期待通りカウンタが常に1になる結果となりました。
お騒がせしてすみません…
セッションクッキーにSIDが入ってる即ちそれを読みとればハイジャック出来てしまうので
何かCookieにtokenでも入れて正当性を確保するロジックでも作ってきます。
>>961 ,962,963 、ありがとうございました。
____ __,,/ _, ----`ヽ :. :. / _ ___ 、\ / / i \ \\ :. :. ,'./ i ヽ:. ヽ:.:.. ヽ.ヽ ,'/ / .ハ ヽ ヽ:.:.:.:. ヽ::.. ヽヽ :. :. |i .i i .i / ヽ ト 、 \、:.:.:. ',:.',:.:.lヽ} |i .i l :N_, -弋 \弌弋ナ:}:.:} :. |i∧ ', :{ ,ィjモト \ イjミトイイV :. な… .| :メヽ.', `ozZ} izN。ハ::{ なんなんですか? :. | :ヾ_! ゝ "゙゙ ' `゙ ハ.:', :. ここ、どこですか? | :.:_イ .:.ヽ. (二フ , イ :.:.:!:.ヽ なんであたし :. / rィイ | :.:.ヽ: >r/`<ノ .:.::.}ヽ、\:. 貼られたんですか? / ∧l;l ! :.:.:.://{二 ̄ .} ..:..::リ//ハ.:\ :. / .{. ',ヾ、ヽi .:.:.{ /(^` |.:.:.:.//: : :.}: . ヽ.:. / / ) ヽ ヾ、ヽ:.ハ ヤ{ ∧/.-‐'": : |:.:. i ', ./ .,イ .:..} : :\ヾレ'ハ ∧__ノノハヾ、 : : : l:.:.: .ハ ', { /| .:.:ハ : : :i Y {ヾ`Yヽニン'ノ}: : } : : : :/:.:.:/ }:.} V | .:.:/:.:|_,ィ' ̄ ヽ三{ `ー-ノ : イ : : :/:.:i.:{ リ ヽ:.:{、.:.V : : ヘ : : {: : :/:.::∧|
こういう女が実際に回りにいたらむかついてくる
>>964 ># これって単一のCookieファイルに保存されてるんじゃ無い
ん?
>.phpにアクセスする際に
ttp://localhost/ にしていたから
んん??
>Cookieにtokenでも入れて正当性を確保する
んんん???
>>964 セッションクッキーは普通のクッキーだ
ワンセッション限りのクッキーはファイルには保存されない(オンメモリ)
> ワンセッション限りのクッキーはファイルには保存されない(オンメモリ) この「ワンセッション限りの」の「セッション」(ブラウザのセッション)と PHPの「セッション」の区別が付いてないやつは意味がわからないだろうね
うちのブラウザは賢いからクラッシュしてもセッション復元できるよ
PHPのマニュアルに、
> year
> 年。2 桁または 4 桁の値を指定可能で、 0-69 の間の値は 2000-2069 に、
> 70-100 は 1970-2000 にマップされます。 今日最も一般的なシステム、
> すなわち time_t が 32 ビットの符号付き整数である システムでは year
> として有効な範囲は 1901 から 2038 の間ですが、この制限は
> PHP 5.1.0 以降なくなりました。
ttp://jp.php.net/manual/ja/function.mktime.php と書いてあるけど、
% uname -a
FreeBSD xxx.yyy.zzz 6.2-PRERELEASE FreeBSD 6.2-PRERELEASE #0: Fri Oct 6 13:59:46 JST 2006
[email protected] :/usr/src/sys/i386/compile/GENERIC i386
% php -v
PHP 5.2.0 (cli) (built: Nov 16 2006 17:47:45)
の環境で、
% php -r "echo mktime(0, 0, 0, 2, 1, 2038);"
としても値が返ってこないのですが・・・。
上記の引用部分はどういう意味ですか?
2038年1月19日までは値が返ってきます。
2005|aaaaaaaa|12345 2005|bbbbbbbb|12345 2005|cccccccc|12345 2006|aaaaaaaa|12345 2007|aaaaaaaa|12345 みたいな感じのテキストファイルから、 2005の部分だけを取り出して表示するスクリプトを作りたいのですが、 (結果が下のようになるように) 2005|aaaaaaaa|12345 2005|bbbbbbbb|12345 2005|cccccccc|12345 fopenでこのテキストファイルを開いた後、 どういう処理を書けばいいのかわかりません。 どなたか使うべき関数とか手法などヒントいただけませんでしょうか?
そのときだけのSIDをのっとってどうするってか? そんなに怖いんなら、SSLにすべきだろう。
mixiみたいにログインを自動化(=cookieにSIDを残してる)ならば
問題あるだろうけど、そうじゃないなら心配する必要ないわな。
>>975 の言うとおり。
>>973 「値が返ってこない」ってのがどういう状態かよくわからんけど。
英語のマニュアル見ると、
the valid range for year is somewhere
between 1901 and 2038, although this limitation is overcome
as of PHP 5.1.0.
と、かいてあって、俺の読解力だと、
5.1.0以降、PHPでの制限はないんだけど、それにもかかわらず、
システム(OS?)によっては(システムの制限があって)2038年までしか
使えないんだよ、って書いてあるようにも読めますけど。
(5.1.0の前は、OSが対応しててもPHPがヘッポコで2038年までに
なっていたんでは)
ちなみにうちのLinuxだとこうなる。
$ php -r "echo mktime(0, 0, 0, 2, 1, 2038);"
-14462
$ php -v
PHP 4.3.10-16 (cli) (built: Aug 24 2005 20:25:01)
ここらへん、全然知らないんだけど、2038年以降は時間はマイナスになる、、、のでは? 違うん?
ビットが溢れるだけ
>>972 クラッシュする時点で馬鹿だろw
>>974 lineとってstrposで2005が0なら良いんじゃね
次スレまだかよボンクラ
982 :
nobodyさん :2006/11/22(水) 19:05:54 ID:Dl80shfx
vodafone(softbank)の3G携帯にphpから絵文字付きでメール送る方法をいろいろ模索してるのですが分かりません。 どなたか情報をお持ちで無いでしょうか?
>>977 値が返ってこないというのはそのままの意味で、何も表示されずにプロンプト(%)が
返ってきます。
システムに依存するのはいいんだけど、日本語マニュアルの書きっぷりでは
システムに関係なく2038年以降のタイムスタンプも取得できそうな気がしたので・・・
>>983 そもそも他の関数は返って来るの?
configureの問題もあるきがするしエラー表示しないようになっているオチでは??
>>983 例えば?
php.iniでは
error_reporting = E_ALL
にしてるけど?
986 :
nobodyさん :2006/11/22(水) 19:49:24 ID:9Mp292iZ
質問します! windowsでPHPを使用しているのですが、 ローカル環境で <? include("../home/httpd/html/template/top.html"); ?> の相対パスを <? include("/home/httpd/html/template/top.html"); ?> に変えて表示する事ってできるのでしょうか?
falseだろ 値が帰って来ないってフィルタアプリじゃねーんだからよ
>>983 何も表示されないのは改行コードが入ってないから
\nつけるかvar_dumpしたらfalseが返ってるはず
>>986 意味がわからんが、その上のコードを下のコードにPHPで書き替えたいってことか?
>>986 <?php
$directory = realpath("../home/httpd/html/template/top.html");
include($directory);
てこと?
>> Googleで "vodafone 絵文字コード" と検索しる。
誰か次スレ頼む。俺は無理だった
スレは立てるけど後は頼むw
995 :
994 :2006/11/23(木) 00:14:22 ID:???
立てれなかったorz
テンプレの修正はあるの?
997 :
996 :2006/11/23(木) 00:31:34 ID:???
>>996 あなたが弄るっていうなら私にはなにもできない
おせーよw
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。