【PHP】下らねぇ質問はここに書き込みやがれ 41
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2007/03/06(火) 15:39:46ID:naBsdy1ZPHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。
過去スレ、関連スレ、FAQなどは>>2-10辺り
◆前スレ
【PHP】下らねぇ質問はここに書き込みやがれ 40
http://pc11.2ch.net/test/read.cgi/php/1172151461/
◆質問する時の注意
・ 自分のIDを表示させること。(メール欄に何も記述しないこと。空白も入力しちゃダメ)
・ サーバーのOS(Linux、Windows他)、WebサーバーとPHPの種類やバージョン等を明記すること。
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
◆質問後の注意
・偽者防止に必ずIDを表示させること。(メール欄に何も記述しない)
・2回目以降は最初に質問した際のレス番号を名前欄に入れること。
・解決しなくても回答をもらった場合はお礼を言うこと。
(荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)
◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
【その他諸注意】
・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ http://pc10.2ch.net/php/subback.html
・SQLについての質問はデータベース板(PCカテゴリ)の各スレで http://pc10.2ch.net/db/subback.html
0263nobodyさん
2007/03/08(木) 03:34:05ID:???0265nobodyさん
2007/03/08(木) 04:32:23ID:???0266nobodyさん
2007/03/08(木) 04:39:23ID:???画像サイズにする必要があるんじゃないか?
縦だけあるいは横だけ4/3倍とか縦横ともに√(4/3)倍するとか。
0267nobodyさん
2007/03/08(木) 04:45:21ID:???っていうか簡単に言えば、
JPEGは同じ縦横サイズなら、PNGの3/4のファイルサイズになる
ってことでは?
0268nobodyさん
2007/03/08(木) 04:55:21ID:???0269nobodyさん
2007/03/08(木) 08:58:17ID:a3iASN9B何かお勧めの本が前に紹介されたしたが
何という本でした?
0270nobodyさん
2007/03/08(木) 09:25:21ID:WIAr6em1マシンでは正常にプログラムが動作するのに、もう片方ではエラーがたくさん
出ます。
OSは同じ(Windows XP)ですし、インストールディレクトリも同じにしました。
こういうことってあるものなんでしょうか?
0271nobodyさん
2007/03/08(木) 09:46:23ID:???iniをWINDOWSにつっこんでないとか
dllをWINDOWS\system32につっこんでないとかそういうのだろ。
0272270
2007/03/08(木) 09:57:01ID:WIAr6em1そういうのではありません。
php,Apacheはバージョンとインストールディレクトリを正常に動いている
マシンと同じにすれば、設定ファイルをそのままかぶせても問題ありません
よね?
0274nobodyさん
2007/03/08(木) 10:05:45ID:???0275nobodyさん
2007/03/08(木) 11:27:27ID:???エラーとだけいわれてもね
ApacheのエラーなのかPHPのエラーなのか
肝心のエラーの内容も書いてないし
0276nobodyさん
2007/03/08(木) 13:06:56ID:Y9DHbA2v<?if(条件式){?>
出力するhtml
<?}else{?>
出力するhtml
<?}?>
という風に書けますよね.
for文ではこのような表記は存在しないのですか?
0277nobodyさん
2007/03/08(木) 13:11:58ID:???0278nobodyさん
2007/03/08(木) 13:17:15ID:Y9DHbA2v出力html
<?}?>
ってことですか?
0281nobodyさん
2007/03/08(木) 14:03:46ID:ZuqlBOaNもうクリアになったのでおkです.回答ありがとうございました.
0282nobodyさん
2007/03/08(木) 14:19:05ID:???以下のようなファイル・ディレクトリで運用しています。
/var/www/hoge/file1.php
/var/www/hoge/fuga/file2.php
(DocumentRootは/var/wwwに設定)
file2.php内にてHTML部分で<A href="/hoge/file1.php">等でリンクを貼ると、
ページを表示した際に問題なくリンクをたどれるのですが、
file2.phpにおいてrequire_once("/hoge/file1.php")とすると
ファイルがないとエラーが出てしまいます。
今後いろいろなディレクトリからfile1.phpをインクルードする必要があるので、
相対パスではなくドキュメントルートからのパスを指定することにより記述を統一したいのですが、
このようなことは可能でしょうか?
(ちなみにrequire_once("/var/www/hoge/file1.php")とすると問題なく読み込めました。)
Debian Sarge+apache2+php4です。
よろしくお願いします。
0283nobodyさん
2007/03/08(木) 14:20:35ID:???require_once($_SERVER["DOCUMENT_ROOT"] . "/hoge/file1.php");
でいーんじゃない?
0285282
2007/03/08(木) 14:37:42ID:???表示用のhtmlと処理用のphpを分けてサイトを作る場合、一般的にはどのような方法で表示用htmlに反映させて表示させるのでしょうか?
現在のところ、表示用のhtmlに{$contents}等を埋め込んでおき、処理用phpにて最後にincludeしてやっているのですが、
これだと、表示用html内で使用している画像等のパスは処理用phpを基準として設定しなければならないため、
すべてを>>282で質問したようにDocumentRootからのパスを指定してやる必要があります。
修正するのはたいした手間ではないのですが、皆さんこのようにして作成しているものなのでしょうか?
0286282=285
2007/03/08(木) 14:39:02ID:???スレ汚し申し訳ありません。
0287nobodyさん
2007/03/08(木) 14:57:14ID:???0288nobodyさん
2007/03/08(木) 15:03:27ID:???> これだと、表示用html内で使用している画像等のパスは処理用phpを基準として設定しなければならないため、
ごめん。これの意味が分からない。
「処理用php」ってのは一体どこのディレクトリに置かれてるんだ??
0289285=282
2007/03/08(木) 15:31:16ID:???レスありがとうございます。
Smarty導入には未だ踏み出せずにいました。検討してみます。
処理用phpは複数あり、それぞれ表示用htmlより下のディレクトリに置く予定です。
ご意見ありましたらよろしくお願いします。
0290nobodyさん
2007/03/08(木) 15:34:34ID:???サブディレクトリに分ける必要がある=システム的にカテゴリを定義している=カテゴリ別にディレクトリ設定を持てる、ので
その場合は定義されたディレクトリ設定をリンクに付加するだけだから特に悩むこともない。
0291nobodyさん
2007/03/08(木) 15:42:08ID:???普通、画像の置き場所なんてドキュメントルート基準かスクリプトからの相対位置基準かどっちかにしかしないから
普通に <img src="/image/画像.jpg"> か <img src="./image/画像.jpg"> かでいいんじゃないの?
それで済まないのは根本的にディレクトリ構成がおかしい気がするんだけど。
0292nobodyさん
2007/03/08(木) 16:47:37ID:???で困ったことがあります。
それは、HTTP_Request::addFile() でアップロードしたファイルを
受け取る側のPHPスクリプトの $_FILES['foobar'] で参照できないのです。
これを解決する方法はあるでしょうか?
0293nobodyさん
2007/03/08(木) 17:06:36ID:???SEO的に有利だからね。
0294nobodyさん
2007/03/08(木) 17:14:55ID:???$_FILESに入ってないんだったらアップロードに失敗してるんだろ
addFileでちゃんとtrue返って来てる?
>>293
SEO的に有利な根拠は?
0295nobodyさん
2007/03/08(木) 17:32:51ID:???ログイン画面にてeuc-jpを選択してもログイン後にutf8に変わってしまいます。
また、phpからEUCでMysqlに登録したデータもphpmyadmin上では文字化けして表示されてしまいます。
なんとかして文字コードを変更することは可能でしょうか?
Mysql4.1.11 phpMyadmin2.6.2を使用しています。
よろしくお願いします。
0296nobodyさん
2007/03/08(木) 17:41:41ID:???MySQLからデータをとりだして表示しているページがAU機では表示されません。
色々調べてみると
1.日本語のみ表示されていない
2.文字化けではなくNULL状態
3.URLに勝手にx-up-destcharset=17がはいる
var_dumpしてみても日本語が入っている変数はNULLになっています。
どなたかお力お貸しください
0298nobodyさん
2007/03/08(木) 18:04:32ID:???>var_dumpしてみても日本語が入っている変数はNULLになっています
って、スクリプトミスっているんじゃないのか?
そら、何も入っていないのに表示されるわけない
0299189
2007/03/08(木) 18:07:24ID:RD7yuDJrそれを外して再コンパイルしたところ、4.4.2 と同じ結果が返ってくるようになりました。
本当にこれが原因かどうかはもう少し調べてみないとわかりませんが、
とりあえずこれで使ってみようと思います。
お騒がせしました。
0300nobodyさん
2007/03/08(木) 18:43:32ID:???があるとして、
以下のようなことをしたいのですが、
explode($array)を介さずに直接$a_cに代入できるような関数ってないでしょうか?
$array に余計なメモリを食いたくない、かつわかり易いように
連想配列を使いたい、という状況です。
$array = explode(",", $var);
$a_c['A'] = $array[0];
$a_c['B'] = $array[1];
$a_c['C'] = $array[2];
0301nobodyさん
2007/03/08(木) 19:07:14ID:???list($a_c["A"], $a_c["B"], $a_c["C"]) = explode(",", $var);
0302nobodyさん
2007/03/08(木) 19:08:16ID:???NULLというか
$hoge=''
という形で入っています。
PCやドコモ機で見るときちんと文字が入っています
0303nobodyさん
2007/03/08(木) 19:10:11ID:???画面に出しても文字コードの関係で表示されないだけ?
画面やvar_dumpの内容をob関数使ってファイルに出力してみると謎が解けそう。
0304nobodyさん
2007/03/08(木) 20:36:58ID:???これの意味がわからない。
だれかおしえてw
0305nobodyさん
2007/03/08(木) 22:11:34ID:???/hogehoge/
├/app/ ここにスクリプト
└/public_html/ 実行ファイル
こういうことじゃね?
まぁ、レンタルサーバでドキュメントルートより上に置けないサーバー結構あるわけだが。
自鯖でやってるやつなんてほんの一部だろうし。
0306nobodyさん
2007/03/08(木) 22:51:46ID:???0307nobodyさん
2007/03/08(木) 23:06:52ID:???それかスクリプト本体をサブディレクトに置くといいたかったのかね。
どっちにせよ謎い。
0308nobodyさん
2007/03/08(木) 23:20:03ID:???0309nobodyさん
2007/03/08(木) 23:38:41ID:lSyqksIJphp.iniを見てみたのですがphp_mbstring.dllという記述が見つかりません。
どうすればmb関連の関数を使えるよう設定できますか?
0311nobodyさん
2007/03/09(金) 00:17:00ID:???0312nobodyさん
2007/03/09(金) 00:31:15ID:???あ、俺インストーラ使ったこと無いな
インストーラでインスコするとどうなるの?
zip解凍して自分で配置したのと同じ?
0313nobodyさん
2007/03/09(金) 01:42:30ID:???これで一つのメールアドレスを含む文字列は置換できるんだけど、
二つ以上になるとリンク部分がバグる
どこか間違ってるかな?
$msg = mb_eregi_replace("([a-z0-9\._-]+)@(.+)\.([a-z]{2,4})",
'<a href="mailto:\\1@\\2.\\3">\\1@\\2.\\3</a>', $msg);
mb_internal_encoding('SJIS');
mb_regex_encoding('SJIS');
にはしてある
PHP5.1
0314nobodyさん
2007/03/09(金) 01:45:43ID:???0316nobodyさん
2007/03/09(金) 01:52:30ID:???いやホントに
まるでHTML覚えたてのように余計なとこまでリンク化されてるみたいな
>>315
全然おkですが?
0317nobodyさん
2007/03/09(金) 01:53:45ID:???0318nobodyさん
2007/03/09(金) 02:23:37ID:???0319nobodyさん
2007/03/09(金) 02:26:35ID:???バグるって最初から内容ぐらい書けよお前。
今回は半角英数字だから問題ないだろうけど
あとMS系の言語以外でSJISは出来るだけ使うな
しかも>>314のいうとおりco.jpは無理だろそれ?
どこまでもリンクが続くって事は</a>が上手く付いて
ないんだろ?
そこを何とか調べてみろ
0321313
2007/03/09(金) 02:34:53ID:???二番目のカッコがダメダメっぽい
普段単体のメールアドレスチェックに(.+)@(.+)\.(.+)で済ませてる身に
正規表現はキツイわw
0322nobodyさん
2007/03/09(金) 02:40:03ID:???メールの正規表現はなにげにむずいぞ。
ついでにいうと大文字も可能。
それと、その正規表現じゃ例えば、
.com.com.com.comなんかもメールアドレスとして扱われる。
もうちょっとましな書き方したほうがいいと思う。
0323313
2007/03/09(金) 02:49:28ID:???自分ではシンプルかつエレガントに構文を作ったつもりだったんだけど
検索しても長ったらしいのばかりで
まあ弱い頭ひねって、もうちょい考えてみますわ
0324nobodyさん
2007/03/09(金) 02:49:42ID:???0325nobodyさん
2007/03/09(金) 02:53:23ID:czcTDFU5アクセスされたファイルごとのアクセス数をカウントするだけです。
なので、ログを一行ずつ読んで、アクセスされたファイル名をキーにしたハッシュをカウンタとして使用しようとしました。
$counter=Array();
while(!logeof()) { // ログファイルの最後までループ
$filename = getlog(); // ログを一行読んで、アクセスされたファイルを返す
$counter[$filename]++;
}
foreach($counter as $filename=>$count) { // 結果表示
print "$filename = $count\n";
}
ところがファイルが多く、オンメモリでの処理が厳しくなってきました。
そこで質問なのですが、PHP で簡単に使えるファイルベースのデータベースのようなものは無いでしょうか?
とりあえずハッシュが使えればいいです。
Microsoft Access の MDB みたいな、SQL が使えるやつにも興味があります。
ご存知でしたら教えてください。
0331330
2007/03/09(金) 03:09:57ID:???0332nobodyさん
2007/03/09(金) 03:23:30ID:???0333nobodyさん
2007/03/09(金) 03:28:31ID:???0334nobodyさん
2007/03/09(金) 03:36:12ID:???0335325
2007/03/09(金) 03:38:59ID:???でも、>>332 の mysql lite というのと同じかわかりませんが、SQLite というのが使えそうな気がしますので、
これを検討します。
ありがとうございました。
0336nobodyさん
2007/03/09(金) 03:45:05ID:???まぁ待て。
確かにファイルベースのSQLiteっちゅうのはある。
MySQLぐらい高速らしい。
だがちょっと待ってほしい。
お前はどこでDBを使うつもりだ?
0337325
2007/03/09(金) 03:52:27ID:???Linux な WEBサーバ上で使おうと思います。
モジュールの追加は比較的自由にできますので、多分導入も問題無いんじゃないかと思います。
ただ、MySQL みたいにサーバを起動するのは面倒なので、避けたいと思いました。
ついでに、やりたかったこと自体は >>325 のようにファイル毎のアクセス数を数えるということだけだったのですが、
SQL も使えるようなのでもうちょっと高級な集計にも手を出してみようかと思います(ファイル毎のリファラの集計など)。
というつもりなのですが、何か問題になりそうでしょうか?
0339nobodyさん
2007/03/09(金) 03:59:03ID:???0340325
2007/03/09(金) 04:04:47ID:???はい。ハッシュでファイル毎のカウントを求めようと思ったら、配列のサイズが大きくなりすぎてエラーになるケースが出てきたのです。
ファイルの数だけはとても多いので、ハッシュでやると要素数が多くなるのです。
PHP にメモリリミットを設定していまして、16MB くらいでエラーになります。
>>339
その通りなのですが、DBを使いたいという動機ではなく、オンメモリで処理するのをやめたい、というのが目的です。
0341nobodyさん
2007/03/09(金) 04:35:46ID:???0342nobodyさん
2007/03/09(金) 05:05:42ID:???そんなに重い処理でもないしメモリを食う処理でもない。
ひとえにお前の実装が糞過ぎるだけ。
0343nobodyさん
2007/03/09(金) 05:09:51ID:???index.phpにアクセスしたときに_blankで新しいページ(例えばindex2.html)を開くようにすることはできるでしょうか?
index.phpがjavascriptを書き出してウィンドウをオープンさせる手は思いつくのですが
phpの関数だけで新しいページを開かせたいと思っています。
もしかしたら超初心者な質問かもしれないですけれどお願いいたします。
0344nobodyさん
2007/03/09(金) 05:13:05ID:???HTML(XHTML)の勉強で事足りる。Strictではtarget属性廃止されてるからTransitionalでね。
ツールバーなしorサイズ指定のウィンドウ出したいならjavascriptで。
0345nobodyさん
2007/03/09(金) 05:22:52ID:IclYPYCtPHPで
http://pc11.2ch.net/test/read.cgi/php/1173163186
この末尾の1173163186を1づつ増やして、
そのページにアクセスし、そのページに特定の文字列があった場合のみ、
そのアドレスをテキストファイルに書き込んでいく
なんて、スクリプトを書く事は出来ますか?
0346nobodyさん
2007/03/09(金) 05:24:18ID:???0347nobodyさん
2007/03/09(金) 05:26:10ID:IclYPYCtどうもです。
0348nobodyさん
2007/03/09(金) 05:36:02ID:gCb65kdamysql_connect("localhost","root","") or die("Error MySQL First Test");
echo "Success MySQL First Test";
?>
↑を表示させようとするとCall to undefined function mysql_connect()がでます。
phpのフォルダにはlibmysql.dllが入っており、パスも通ってます。
また、php_mysql.dllも入っており、php.ini内のextension=php_mysql.dllのコメントもはずしました。
初歩的すぎるところですが、お願いします。
0349nobodyさん
2007/03/09(金) 05:56:39ID:???0350348
2007/03/09(金) 06:27:57ID:gCb65kdaレスありがとうございます。
phpinfo()にはmysqlが表示されてないです。
extension_dir も PHPIniDir も正しく、
Configuration File (php.ini) Path も正しくiniが表示されています。
環境を書き忘れてました、申し訳ありません。以下の通りです。
Apache 2.2.4、PHP 5.2.1、MySQL 5.0.27
0351nobodyさん
2007/03/09(金) 06:37:21ID:???0352348
2007/03/09(金) 06:52:09ID:gCb65kda再起動はしまくってます。
と、申し訳ないです、libmysql.dllをC:WINDOWSに入れたらなんか出来ました…
phpインストールフォルダじゃだめなんですね、これ。お騒がせしました。
0353nobodyさん
2007/03/09(金) 07:06:55ID:???どんだけファイルが多いのか
それともメモリがしょぼいのか
ファイルが100万個あっても余裕だろ
まさかログファイルをいっぺんに読み込んでるとか
0355nobodyさん
2007/03/09(金) 07:24:53ID:lsaQKE2M$hoge1=$_POST['hoge1'];
$hoge2=$_POST['hoge2'];
$hoge3=$_POST['hoge3'];
$hoge4=$_POST['hoge4'];
$hoge5=$_POST['hoge5'];
for($i=1 ; $i<=5 ; $i++){
if(${a."$i"} != ""){
print<<<EOT
<INPUT type="hidden" name="hoge$i" value="${hoge"."$i}">
EOT;
}
}
name=""の部分をどうすればhoge1からhoge5までで出力できるのでしょうか?
0356nobodyさん
2007/03/09(金) 07:25:07ID:???0357nobodyさん
2007/03/09(金) 07:27:45ID:???0358nobodyさん
2007/03/09(金) 07:56:51ID:yU3jvLcG&ってURLに含まれていますよね?
<a href="$url">htmlspecialchars($url)</a>
だとXSSの危険性があるので、
htmlspecialcharsから&をとりのぞいた関数を作ればいいでしょうか?
それとも他に何かベストな方法がありますでしょうか?
0360nobodyさん
2007/03/09(金) 08:14:37ID:yU3jvLcGおー。こんな関数があったのですね。
これを使いたいと思います。
どうもありがとうございました。
0361nobodyさん
2007/03/09(金) 08:15:44ID:???0362325
2007/03/09(金) 10:25:45ID:???単にファイル名ごとのカウントを数えるだけなのですが、それをシンプルに実現するために使えそうなアルゴリズムって
どんなのがあるでしょうか?
>>325 のカウンタは見ての通り、$counter['/index.html'] とか $counter['/images/top.gif'] みたいな配列です。
>>353
集計したいファイル数は10万弱程度なのですが、とりあえずファイル名長が平均約 80文字と仮定して、
要素数100万のハッシュ配列を作成できるか実験してみました。
for($i=0; $i<1000000; $i++) { $counter[sprintf("%080x",$i)]++; print "$i\n"; }
18万個弱で
Fatal error: Allowed memory size of 25165824 bytes exhausted (tried to allocate 12 bytes) in - on line 1
となりました。
ちなみにログファイル自体は 100万行以上 x 日数分 ありまして、もちろん全部まとめて読むなんてことはしてません。
あ、メモリリミットは 16MB じゃなくて 24MB にしてました。
25165824 ってのは 24MB のことだと思います。
■ このスレッドは過去ログ倉庫に格納されています