【PHP】下らねぇ質問はここに書き込みやがれ 22
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2006/06/08(木) 05:09:28ID:5gGJKVO4ここなら本スレで回答のないお前の下らない質問に回答があるかも知れません。
まず読め【PHP マニュアル】
http://www.php.net/manual/ja/
過去スレは>>2
0046452
2006/06/08(木) 19:10:25ID:???0047nobodyさん
2006/06/08(木) 20:33:19ID:???0048nobodyさん
2006/06/08(木) 21:07:52ID:???違うよ
「データベース」という意味なら同じだけど、
データベースのソフトが違うから使う関数も違ってくる。
MySQL関数とPostgreSQL関数が違うのと一緒。
MySQL使ってるならコッチ使いましょう。
ttp://www.php.net/manual/ja/ref.mysql.php
0049nobodyさん
2006/06/08(木) 21:25:56ID:???<?php
/*
ここにたくさんのメモ
*/
?>
みたいな使い方をするのは、
誰からも見えない自分だけのメモになりそうな気がするのです。
0051nobodyさん
2006/06/08(木) 21:31:01ID:???ありがとうございます。
MySQLを使っているわけではないのですが、
別のサーバを用意しなくてもデーターベースが使えそうだったので気になりました。
0052nobodyさん
2006/06/08(木) 21:35:16ID:???なんか勘違いしてないか?
データベースとPHPは関係ないぞ
データベースが無いと話にならん
PHPっはデータベースにアクセスする方法を提供してるだけだ
0053nobodyさん
2006/06/08(木) 21:37:14ID:???それくらい普通にやってるだろ
HTMLのコメントにするとソース見られたときに分かるから
見られたくないのはPHPコメントを利用する
ただこれやると改行が崩れるのが玉に瑕
0054nobodyさん
2006/06/08(木) 22:08:56ID:???dbmopenでは引数でファイル名を指定しているので、直接ファイルを操作するものと思い込んでました。
実際には何らかのソフトがファイルを開いて処理しているということでしょうか?
005520
2006/06/08(木) 22:12:08ID:???CSVは複数行入っています。
fputsすると1個のディレクトリにあるログデータしか取れなかったりします。
で>>21の$lineにひとつの変数に溜まっているはずなのですがなぜかそれを
fwiteやfputsしてもうまくいかない状況なので悩んでしまっているのです。
0056nobodyさん
2006/06/08(木) 22:25:40ID:???太古のヤツはそんなのあったけどね。
まず「データベースとは何か」から調べましょう。
それとDBMの使用は推奨されてなかったような気がするです。
0057nobodyさん
2006/06/09(金) 00:44:58ID:???英語のスパムに毎日悩んでおります。
ひらがな/カタカナを含まない投稿を拒否したいのですが、Perlで
if ($in{'comment'} !~ /(\x82[\x9F-\xF2])|(\x83[\x40-\x96])/) {
&error("日本語を書いてください。");
}
と書くところをPHPではどう書いたらよろしいのでしょうか?
・・・すごい初歩の質問だと思うのですが、よろしくお願いいたします。
0058nobodyさん
2006/06/09(金) 04:04:44ID:???PHPのsafe_modeをonにするとphpMyAdminが使えません。
どうにかしてsafe_mode=onで使えるようにできないでしょうか?
よろしくお願いします。
>>57
if(preg_match("/[ぁ-んァ-ヶ亜-瑤]{2}/", $comment)){
echo "日本語です";
}else{
echo "日本語がありません";
}
005958
2006/06/09(金) 04:09:48ID:???echo "日本語です";
}else{
echo "日本語がありません";
}
# {2}が不要だった
0060nobodyさん
2006/06/09(金) 04:12:22ID:???セーフモードがonの場合、PHPは、 現在のスクリプトの所有者がファイル関数により処理されているファイルまたはディレクトリ の所有者に一致するかどうかを調べます。
0062nobodyさん
2006/06/09(金) 07:44:44ID:???Compilation failed: range out of order in character class at offset 4 in
0064軟式PHP
2006/06/09(金) 10:11:24ID:???最後の行にprint_r( $line );もしくはvar_dump( $line);
ってやって中身確認してみたら?
006520
2006/06/09(金) 11:52:02ID:???最後の行にprint_rやvar_dumpを$lineにかけますと、
Array ( [0] => ディレクトリ名 [1] => ログ列1 [2] => ログ列2 )と表示されます。
これを以下のようにfputsすると当然ですが1行しかログが書き込まれません。
何かforなどで繰り返し最後まで繰り返し書き込む必要があると思うのですが、
そこがわからないという状態です・・・。
$fp = fopen("log.csv", "w");
flock($fp, LOCK_EX);
fputs($fp, implode(",", $line) . "\n");
flock($fp, LOCK_UN);
fclose($fp);
0066軟式PHP
2006/06/09(金) 12:04:05ID:???1行しか入ってないなら当然それしか書き込まれないな。
$lineを二次元配列化するか、foreachの中でfwriteすれば出来るんじゃないの?
print "\"$line[2]\",";
print "\n";
fputs($fp, implode(",", $line) . "\n"); <<追加
}
fopen、fcloseはforeachの外で行うこと。
0067nobodyさん
2006/06/09(金) 12:36:07ID:0pUzo2Bw0068nobodyさん
2006/06/09(金) 13:47:11ID:???0071nobodyさん
2006/06/09(金) 14:15:41ID:???>>70sumaso
スマーティーで$i++みたいな処理({foreach}内で1個ずつ上がってくれる数値)できますでしょうか?
もしご存知でしたらやり方ご教示くださいな
007220
2006/06/09(金) 15:21:56ID:???以下をforeach($logs as $value)に入れたらログにきちんと書き込むことが出来ました。
$fp = fopen("log.csv", "w");ですと1行しか書き込めなかったのですがfopenのオプションを
"a"にしたらきちんと全部書き込んでくれました。
$fp = fopen("log.csv", "a");
flock($fp, LOCK_EX);
fputs($fp, implode(",", $line) . "\n");
flock($fp, LOCK_UN);
fclose($fp);
0073nobodyさん
2006/06/09(金) 15:26:10ID:???iterationでどない
http://sunset.freespace.jp/smarty/SmartyManual_2-6-3J_html/language.function.foreach.html
0074軟式PHP
2006/06/09(金) 15:46:03ID:???まぁ、「動くレベル」ならそれでもいいけどループ毎にfopenしてたらボトルネックになるし、ロックも怪しくならんかね。
1行しか書き込まれなかったのは"w"で書き込んでたからだろうと思ったから
最後にfopen,fcloseはforeachの外で行うことと補足してたんだが。
>>67にあるようにバッファをためて最後に書き出すのが一番いいと思うぞ。
0075nobodyさん
2006/06/09(金) 17:07:05ID:5EGQXMwmsection
0076nobodyさん
2006/06/09(金) 17:14:26ID:???こんなとき、手早く共通モジュールに移す方法ってどうやってます?
ウチだと普段はDB関係は独自クラスかpearを共通クラスで一発読みなんだけど…。
0078nobodyさん
2006/06/09(金) 18:27:31ID:96A8iKx8何を使ってですか?
秀丸では開ききれないくらいのファイル数です。
しかも、中の書き方もめちゃくちゃだし。
接続して、何か処理をはさんでデータベース選択したり…。
0081nobodyさん
2006/06/09(金) 21:55:08ID:???例えば
define('DATA','123');
define('DATA','456');
echo DATA;
とすると最初に定義した'123'が表示されてしまいます。
後からクリアしたり再設定出来ないのでしょうか?
0082nobodyさん
2006/06/09(金) 22:07:18ID:???0084nobodyさん
2006/06/09(金) 22:25:15ID:???http://localhost/というのは、
C:\Program Files\Apache Group\Apache2\htdocs\ですよね。
それを、他の場所で(例えばマイドキュメント)で実行したいのですが
どうすればよいですか?
0085nobodyさん
2006/06/09(金) 22:27:50ID:???つhttpd.conf
0086nobodyさん
2006/06/09(金) 22:29:57ID:???http://localhost/というのは、
C:\Program Files\Apache Group\Apache2\htdocs\ではない
0087nobodyさん
2006/06/09(金) 22:30:08ID:???設定ファイルのhttpd.confを良く読んでごらん。分からん場合は適当な板へGo。
0088nobodyさん
2006/06/09(金) 22:55:23ID:uli7/Tc4すみません、解決できました。
httpd.confのDocumentRoot "E:/Web"に設定しなおしました。
その下に、
<Directory "C:/Program Files/Apache Group/Apache2/htdocs">
とあるのですが、これも変更する必要はあるのでしょうか?
0090nobodyさん
2006/06/09(金) 23:29:05ID:???NOARCHIVEで書き出すようにしたら誰かに怒られますか?
0091nobodyさん
2006/06/10(土) 00:02:37ID:3lMQcCFE俺優しいから教えてやるよ
【Windows】Apache初心者質問スレ 3鯖目【専門】
http://pc8.2ch.net/test/read.cgi/mysv/1128473338/
0092nobodyさん
2006/06/10(土) 00:11:34ID:BKZjDDwvめんどくさいんですが、下記のコードでいいんでしょうか。
本当にGETかPOSTか判定したいときはそのときに$_SERVER['REQUEST_METHOD']
を見るつもりです。
$_REQUESTはCOOKIEまで混ざっちゃうみたいなんでやめとこうかな、と。
NULLバイト攻撃への対策のためNULL文字列は除去しています。
if ($_SERVER['REQUEST_METHOD']=='POST') {
$GET = $POST;
}
$_GET = remove_nullchar($_GET);
$_COOKIE = remove_nullchar($_COOKIE);
//NULL文字列の除去
function remove_nullchar( $arr ) {
if ( is_array( $arr ) ) {
return array_map( 'remove_nullchar', $arr );
}
return str_replace( "\0", "", $arr );
}
0093nobodyさん
2006/06/10(土) 00:17:25ID:???そのページがどのような中身か判断する為に、
fileやfopenで調べようとしたのですが、
携帯で、作成したPHPにアクセスしても、
fileやfopenで中身を調べるとPC版を見に行ってしまいます。
携帯版の中身を調べる方法はありませんでしょうか?
0094nobodyさん
2006/06/10(土) 00:25:59ID:OH+eichSそんなことはしないけどずっと疑問に思っているので教えてください。
0095nobodyさん
2006/06/10(土) 00:48:42ID:???MySQLが多いようですが、他のとは何か違うのでしょうか?
0096nobodyさん
2006/06/10(土) 00:59:08ID:???これをcatchすることはできますか。
try {
include('file.php');
}
catch (Exception $ex) {
..処理..
}
でキャッチできるかと思いましたが、できませんでした。
0097nobodyさん
2006/06/10(土) 01:51:42ID:akgzroAUarray_shift($array);
print_r($array);
最初に連想配列のキー名に文字列の1を渡してるのですが、
array_shiftすると'2'=>'x'が返ってくると思いきや
'0'=>'x'になってしまいました。
数値として認識されてしまうのかもしれませんが、どうにか
'2'=>'x'として返す手段はないでしょうか。
0098nobodyさん
2006/06/10(土) 02:22:26ID:rIPxBbNz0100nobodyさん
2006/06/10(土) 02:36:24ID:???本当だ、普通に添え字(数値の)として判断されるっぽいな。
俺にはどうしたら言いか分からん買った・・・
ただ、もしどうしてもそれでやりたいというのなら、array_shift関数を実行した
回数を変数に持っといて、取り出したい値(添え字)にそれを足すってやったらおkじゃない?
0102nobodyさん
2006/06/10(土) 03:09:03ID:???マニュアル-配列より引用
>あるキーが、整数の標準的な表現形式である場合、 そのように解釈されます
>(つまり、"8" は 8 として解釈されます。一方、 "08" は "08" として解釈されます)。
http://jp.php.net/manual/ja/language.types.array.php
面倒だけど$array = array('01' => 'x', '02' => 'x'); みたいにキーの最初にゼロとかつければいける
取り出さなくてもいいなら101かな
0103nobodyさん
2006/06/10(土) 03:16:20ID:3lMQcCFEてかあんたどの質問したの?
0104nobodyさん
2006/06/10(土) 04:02:04ID:???http://akky.cjb.net/download/speeeeed.html
0106nobodyさん
2006/06/10(土) 09:16:24ID:???キーの型(数値、文字列)をどのように解釈するかはこの場合関係なくて、
array_shift/array_unshift/array_push/array_popは
「常に配列のキーを連番に振り直す」ので、
array_shift/push系を使う限り、キーを利用する事は不可能
キーも利用したければarray_slice/+演算子/array_mergeを使うべき
0107nobodyさん
2006/06/10(土) 12:21:23ID:???導入してるレンタルサーバーが多い。
お手軽。検索早め。
読み込みメインのDBならmySQLがお勧め。
更新メインのDBならPgがお勧め
かな><
0108nobodyさん
2006/06/10(土) 12:47:08ID:???PHPでこのような処理を行うにはどうしたらいいでしょうか
$sr[$i] の部分が原因のようなのですが、この先の手がかりがありませんorz
for ($i = 0; $i <= 21; $i++) {
if ( $st[$i] == "6" ) { $stt1 = "<font color=red><b>$st[$i]</b></font>" }
else{ $stt1 = $st[$i] }
$i++;
if ( $st[$i] == "6" ) { $st[$i] = "<font color=red><b>$st[$i]</b></font>" }
else{ $stt2 = $st[$i] }
$i++;
if ( $st[$i] == "12" ) { $st[$i] = "<font color=red><b>$st[$i]</b></font>" }
else{ $stt3 = $st[$i] }
array_push($st2, "$stt1", "$stt2", "$stt3");
}
010996
2006/06/10(土) 12:59:26ID:???include()したファイルにsyntax errorとかがあった場合、それをcatchしたいのですが。
0111nobodyさん
2006/06/10(土) 13:17:40ID:???try,catchは実行時例外を捕捉する構文。
~~~~~~~
パースエラーは「実行」以前に、コードを解析した時点で発生するエラー。
~~~~~~~~~~~~~~
どうしても希望するような動作をさせたいなら
http://jp2.php.net/manual/ja/function.runkit-lint-file.php
こういうのを使って構文エラーがあった場合、
例外を投げるような関数でも作ればいいんじゃないかい。
0112nobodyさん
2006/06/10(土) 13:22:47ID:???・includeはエラーにならない。
・try-catchは例外を受け取るためのものなので、エラーやウォーニングは直接には関係しない
0113nobodyさん
2006/06/10(土) 13:31:38ID:???このような、すばらしいレビューサイトを作るには
何について勉強していけばいいですか?
「html」と「css」以外のことは、ど素人で何もわかりません。
自分の考えでは、PHP+データーベースについて
勉強すればいいのかな、と感じたんですが、
何分、無知なもので、その考えが合っているかもわかりません。
PHPの基礎を勉強するのは、当たり前ですが
具体的な勉強課程というのが、見えてこないのが現状です。
011496
2006/06/10(土) 15:31:25ID:???さんくすです。結局は補足できないというのが答えということですか。
runkit_lint_file()なる関数を教えてもらいましたが、戻り値がbooleanで
エラーがあったかどうかしか分からず、構文エラーメッセージがわからないので
今回の目的では使用できないです。残念。
やろうとしているのは、PHPコードを自動生成して一時ファイルに書き出し、
それをincludeするこで実行時にクラスを作成することでした。
一時ファイルはすぐに消すんですけど、生成されたPHPコードに構文エラーがあると
include()したときにPHPが終了してしまい、一時ファイルが残ってしまうため、
なんとかエラーをcatchして一時ファイルを削除したいと考えていました。
またinclude()じゃなくてrequire()やeval()だとエラーがあっても分からないので、
これはこれで問題あるし。
なかなかうまくいかないもんですね。
0115nobodyさん
2006/06/10(土) 15:55:22ID:???UAで分けているとしたら
例えばどのような形でUAを送信すればよいのでしょうか?
$url='http://www.yahoo.co.jp';
$ua='DoCoMo/2.0 F900i(c100;TB;W18H10)';
fopen,file,headerなどを利用するのでしょうか?
0116nobodyさん
2006/06/10(土) 16:03:29ID:???parseIntをPHPでどう書けばいいかわからず迷ってます。
for (var i = 0; i < x; i++)
a = parseInt("0x" + b.substr(1 + (i + 1) * 2, 2));
for (var i = 0; i < k; i++)
c[i] = d.charCodeAt(i);
c[0] = parseInt("0x" + b.substr(1, 2));
0117nobodyさん
2006/06/10(土) 16:10:59ID:???JavaScriptスレでparseIntがどういう動作をするものか聞いてくる
0119116
2006/06/10(土) 16:30:42ID:???サンクスです。助かります。
>>116の2行目の場合だと
$a = hexdec(substr($b, 1 +($i +1) * 2, 2));
という感じでいいのでしょうか。
0122nobodyさん
2006/06/10(土) 18:18:25ID:???では不満だということ?
関数を定義するぐらいしかないような。
012336=39
2006/06/10(土) 18:43:20ID:???$_SESSION = $hage;
この書き方自体にはPHPの文法上は問題は無いが、
現在の$_SESSIONの仕様上$_SESSION['hage']=云々と書く必要がある、
という解釈で良いのでしょうか?
0124nobodyさん
2006/06/10(土) 18:55:59ID:???できるよ。
0125nobodyさん
2006/06/10(土) 18:57:26ID:???セッションID強制的に変える場合とかやらないといけないし。
012636
2006/06/10(土) 19:44:18ID:???工エエェェ(´д`)ェェエエ工
これでもセッションとしてちゃんと動くんですか!
でも>>36の通り、この方法で入れた$_SESSIONは少なくとも私の環境では
ページを移った時に保持されていないんですが…もしかして
私のPHP環境が異常なんでしょうか。
0127nobodyさん
2006/06/10(土) 20:57:53ID:???ttp://jp2.php.net/manual/ja/ref.filesystem.php
マニュアル嫁
012936
2006/06/10(土) 21:17:57ID:???以下のように書いてチェックしました。
<?php
session_start();
if ($_SESSION) { print_r($_SESSION); } else { print "はげ\n"; }
$hage = array('a' => "あむろ", 'b' => "ぶらいと", 'c' => "きゃすばる");
$_SESSION = $hage;
?>
Cookieを読めるブラウザでこのスクリプトを何度かリロードすると
$_SESSIONがあるならその中身が表示されるはずですが、
実際には何度やっても"はげ"としか表示されません。
一方で
<?php
session_start();
if ($_SESSION) { print_r($_SESSION); } else { print "はげ\n"; }
$hage = array('a' => "あむろ", 'b' => "ぶらいと", 'c' => "きゃすばる");
$_SESSION = $hage;
$_SESSION['a'] = $hage['a'];
?>
このように書いた場合は$_SESSIONの中身(3つ)が全て表示されました。
0130nobodyさん
2006/06/10(土) 21:29:35ID:???すみません遅くなりました。回答ありがとうございます。
なるほど、いろんなレンタルサーバーで使われているのですね。
掲示板がメインだったらMySQLのほうが良いのかな?
ちなみに、最終的にはFFAのようなゲームを作ってみたいと思っています。
ttp://www.pc-house.net/free/ffa/cgi-bin/ffa/others.cgi
最初はどんなことから勉強すればよいのでしょうか?
0131nobodyさん
2006/06/10(土) 22:13:12ID:???0132nobodyさん
2006/06/10(土) 22:15:29ID:???今はなんでもかんでも続行できなきゃFatal Errorで終了で、
他の言語みたいにevalでcompile errorをcatchしたりはできないけど、
PHP5以降のバージョンが普及すればevalが例外を投げてくれるように
書き直されるかも。
なんでもかんでもエラーなら終了ってのも動的言語としては微妙だよね。
PHP5以降が普及する前に他の言語に今の座を奪われなければいいけど。
>>130
とりあえず似たような機能を実装してるオープンソースのアプリのコードを読むのがいいんじゃない?
0134nobodyさん
2006/06/11(日) 03:29:00ID:???フォームに書いた文字をデータとしてデータベースに入れているのですが、
データの中にタグ(「<」や「>」など)がある場合はPHPに送ることもできません。
どうすればちゃんと送れるでしょうか?
0135nobodyさん
2006/06/11(日) 03:59:04ID:???0138nobodyさん
2006/06/11(日) 12:27:15ID:VeszItwI0139nobodyさん
2006/06/11(日) 12:32:46ID:???ぜんぜn逆アクセス解析じゃねーし
0140nobodyさん
2006/06/11(日) 12:49:00ID:VeszItwIちなみに、正しい逆アクセス解析って、どんなんでしょうか?
0141nobodyさん
2006/06/11(日) 13:04:14ID:???自分のコンテンツが、自分以外のどのコンテンツから参照されているかの調査解析。
つか無理して理解が不十分な言葉を使う必要はないよ。その分冗長にはなるけど。
0142nobodyさん
2006/06/11(日) 15:20:00ID:???現在ファイルのアップロードが行える掲示板系のシステムをPHPで作成しています。
プログラム自体はそんなに苦労していないんですが、ひとつ付け加えたいものがあって悩んでいます。
大容量のファイルをアップロードする際、アップロードが終わらないと別の処理ができません。
そこで、「現在アップロードをしている」ことをわかりやすくするために、HTML_Progressを使ったポップアップウインドウで実現しています。
しかし、サンプルサイトをみても「総容量に対し、どれだけアップロードできたか」の進捗状況を表示するのではなく、
アップロードが終わるまでアニメーションを行い、アップロードができたらストップさせる形でした。
これを、「総容量に対し、どれだけアップロードできたか」の進捗状況を表示するようには、どうすればいいのでしょうか。
また、アップロードを行うフォームはHTML_QuickFormを使っているのですが、
アップロード中にブラウザを中止させたり、閉じたりした場合、進捗バーが止まらず、見かけ上常にアップロードしているように見えます。
できることなら、アップロード中にブラウザ側でなんらかのエラーが起きてアップロードができなくなったとき、
進捗バーを止め、エラーを表示したいのです。
アップロードに使っている関数はHTML_QuickForm_File::moveUploadedFileです。
この関数ではアップロードが「できた」か「できなかった」かの状態が取れるはずなのですが、
ブラウザからの中断には対応していないのでしょうか。
長くなりましたが、お答え願えれば幸いです。
最後に、もうひとつ質問なのですが、同システムをPerlでやろうとした場合、
PHPで行うより簡単になりますか?
0143nobodyさん
2006/06/11(日) 15:23:36ID:???「php progress file upload」あたりでググってみそ。
0145nobodyさん
2006/06/11(日) 16:56:49ID:???PHPの標準では、そのものの機能がないので工夫が必要。
tmpディレクトリのアップロード途中のファイルの
サイズを読んで返すという仕組みで実現する。
143のキーワード以外に「PHP upload progress-bar」とか。
■ このスレッドは過去ログ倉庫に格納されています