【PHP】質問スレッドpart25【php】
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
04/11/22 17:25:42ID:???・新規質問の方は上げてください。age進行でお願いします。
・質問する際には環境も明記。
・正しい日本語で分かりやすく。
・レスがつかないからって逆切れする厨お断り。
・解決しなくてもこたえてもらったら礼を。
■本家
http://www.php.net/
■日本 PHP ユーザ会
http://www.php.gr.jp/
■PHP マニュアル
http://www.php.net/manual/ja/
■PEAR マニュアル
http://pear.php.net/manual/ja/
過去スレ, 関連スレ等>>2-4
0002nobodyさん
04/11/22 17:27:59ID:HPZgqIhK00033
04/11/22 17:30:21ID:???【PHP】質問スレッドpart24【php】
http://pc5.2ch.net/test/read.cgi/php/1099249755/l50
関連スレ
【PHP】くだらねぇ質問はここに書き込みやがれ
http://pc5.2ch.net/test/read.cgi/php/1099322141/l50
Pear
http://pc5.2ch.net/test/read.cgi/php/985665522/l50
【PHP】Smarty【Template】
http://pc5.2ch.net/test/read.cgi/php/1047225437/l50
00044
04/11/22 17:31:29ID:???http://pc5.2ch.net/test/read.cgi/php/1094725439/l50
PukiWikiスレ Part1
http://pc5.2ch.net/test/read.cgi/php/1084907353/l50
[PHP-users MLヲチ6] 教えていただけませんか?
http://pc5.2ch.net/test/read.cgi/php/1096871691/l50
★負荷軽減対策委員会(Perl、PHP)★
http://pc5.2ch.net/test/read.cgi/php/1034645635/l50
PHPBB
http://pc5.2ch.net/test/read.cgi/php/1065334037/l50
PHPでPDF
http://pc5.2ch.net/test/read.cgi/php/983858078/l50
【PHP】Phrameを使う【フレームワーク】
http://pc5.2ch.net/test/read.cgi/php/1093238107/l50
【PHP】セッションについて語ろう!【PHP】
http://pc5.2ch.net/test/read.cgi/php/1064399467/l50
PHPエディタって、どうよ?
http://pc5.2ch.net/test/read.cgi/php/1079460638/l50
【PHP】自作スクリプト発表会
http://pc5.2ch.net/test/read.cgi/php/1017456911/l50
PHPで2chを真似てこんなモン作ってみますた。
http://pc5.2ch.net/test/read.cgi/php/1019451204/l50
PHP + PostgreSQL
http://pc5.2ch.net/test/read.cgi/php/983128806/l50
PHPで構築されたサイト
http://pc5.2ch.net/test/read.cgi/php/1085302527/l50
親切な人が初心者にPHPの関数を使い方を教える
http://pc5.2ch.net/test/read.cgi/php/1068190843/l50
0005nobodyさん
04/11/22 18:00:24ID:???0006nobodyさん
04/11/22 19:04:57ID:5v0Qpc9vコールバック関数を引数で指定したいんですけど。
0007nobodyさん
04/11/22 19:22:30ID:???0008nobodyさん
04/11/22 19:24:53ID:???0009nobodyさん
04/11/22 19:32:29ID:sWiZ7QKfカウントすることは出来ないでしょうか?
0011nobodyさん
04/11/22 19:49:53ID:???00126
04/11/22 20:06:41ID:5v0Qpc9vなんかそんな感じのどうさになっているよう。。。
0013nobodyさん
04/11/22 20:12:05ID:???例えば"abcdefg.mp3"の文字列から"abcdefg"だけを取り出したいのですが、
どうすれば良いのでしょう。
逆に".mp3"ならばすぐに取り出せるのですが。
echo strstr("abcdefg.mp3",'.')とか・・・
よろしこ
0014nobodyさん
04/11/22 20:33:36ID:HopG55j+0015nobodyさん
04/11/22 20:43:14ID:???mixed jddayofweek ( int julianday, int mode)
--enable-calendarを指定して PHPをコンパイルする必要があります。
0016nobodyさん
04/11/22 21:07:17ID:???乙
>>13
そこまで分かっていながらなぜ応用できない?
$str = 'abcdefg.mp3';
echo substr( $str, 0, strpos( $str, '.mp3' ) );
>>14
echo date( 'l', mktime( 0, 0, 0, 11, 1, 2004 ) );
0017nobodyさん
04/11/22 21:25:00ID:???>>16 の方法以外にも basename() を使う方法もある。
echo basename('abcdefg.mp3', '.mp3');
0018nobodyさん
04/11/22 21:36:04ID:???ありがとうございました。
>>16さんの手段で出来ました。
>>17さんの手段も試してみます。
どうもでしたm(_ _)m
date関数参照
0021nobodyさん
04/11/23 01:24:19ID:HlpT5KHTセルにIDを振り、クリックされたら
#cell1{background-color:#000}
と書き足して、URLを例えば「?cell1=yes&cell2=yes...」のようにしたいのですが
セルにIDを振ったところで行き詰ってしまいました。
次々に加えていくにはどうしたらいいでしょうか?
0022nobodyさん
04/11/23 01:26:47ID:???javascriptのが楽チンポ
0024nobodyさん
04/11/23 02:14:11ID:???この喜び誰かに伝えたかっただけなんだ
スレ違いもわかっている
しかし伝えたかったんだ
げっとーーーーーーー
0025nobodyさん
04/11/23 09:13:06ID:???1クリックごとに、セッション変数に登録していくとか・・・・
変数の数を増やしたくなければ、配列にして入れていけばいいだろうし。
?cell1=yes
でリクエストが行ったとして、
<?php
foreach($_REQUEST as $key=>$val){
if($key が "cell"で始まるなら){
if(eregi("yes",$val)){
$_SESSION['cell'][$key]=true;
}else{
$_SESSION['cell'][$key]=false;
}
}
}
?>
<td id="cell1">の部分を、
<td <?php if($_SESSION['cell']['cell1']){ echo 'id="cell1"'; } ?>>
ってのはどう?
あぁ、久々の二日酔いで、気持ち悪。
002621
04/11/23 10:38:52ID:HlpT5KHTおはようございます。
早速やってみたらうまくできました。ありがとうございました。
あと、もう一度クリックされた時に$keyを削除するにはどうしたら良いでしょうか。
0027nobodyさん
04/11/23 10:46:50ID:dbSyw8j5でうまくいかない・・・誰か取り方教えて下さい。お願いします。
print_r($_array);
Array
(
[return] => Array
(
[rslt1] => 1
[rslt2] => 2
[rslt3] =>
)
[url] => http://www.foo.com/
)
0028nobodyさん
04/11/23 10:54:14ID:???002927
04/11/23 11:08:06ID:???取れました!ありがとうございました。
ただ、$_array[return]['rslt1'];
と、''と省略するとダメなんでつね・・・これも試したんですが、
かなりはまりました。おかげさまで助かりました。
0030nobodyさん
04/11/23 11:11:46ID:v88Yo34b複雑なオブジェクトでは無理なのでしょうか?
継承を使ったクラスのオブジェクトを
serializeしてechoすると
N;
と表示されました。
単純なクラスを書いてテストすると
ちゃんと中身が表示されました。
いったいどういうことなのでしょうか?
ちなみにPHP5です。
003230
04/11/23 11:39:02ID:???__call関数を定義している場合にこのようになるようです。
これはバグですかね?
php5でも、php4のようにプログラミングしておいた方がいいということでしょうか…orz
003330
04/11/23 14:38:28ID:???staticなプロパティーのあるオブジェクトも
正常にserialize→unserialize出来ない感じです。
要するにphp5独自の命令はserializeできないと?
このあたり詳しい人いませんか?
0035nobodyさん
04/11/23 15:29:14ID:???0036nobodyさん
04/11/23 17:59:12ID:fG+RzSBW$connect = mysql_connect("localhost", "***", "***");
phpファイルに上のようなID/PASSWORDを書き込んで使用すると
思うんですが、とある京大卒のシステムエンジニアが以前
「web上のプログラムのphpやcgiのコードなんかすぐ見れるんだよ」と
言っていました。
その人の言うことが正しいと、上記のようなコーディングで
ID/PASSWORDが○見えってことなんですが、
マジですか?イマイチ信じがたいんですが。
みなさんはどうやって対処してるんでしょうか?
0038nobodyさん
04/11/23 19:03:37ID:???ごめん、どうやるのか教えてください。
例えばログのテキストファイルを拡張子 cgi にしてれば他人に読まれることはない
と思っていたんだけど、だめなんですか? >36みたいな書き方もしてました。
0039nobodyさん
04/11/23 19:09:07ID:???鯖の管理者か、ユーザを乗っ取られなければ見られない。
パーミッションを適切に設定しないと、同じ鯖を使ってる人にファイルの中身を覗かれる
可能性がある。
0040nobodyさん
04/11/23 19:19:30ID:???これでいいでしょうか?もっとスマートにできませんかね。ご意見お願いします。
$lines = file($log);
for ($i=0; $i<count($lines); $i++) {
list($r1[$i], $r2[$i],) = explode("<>", $lines[$i]);
}
$result = array_search($st, $r2, true);
if ($result !== FALSE){
unset($lines[$result]);
}
004125
04/11/23 20:30:17ID:???もう解決したかな?
?cell1=yes
というパラメータを出力する部分を
$key = cell1;
だとして、
<a href="hoge.php?<php if($_SESSION['cell'][$key]){
echo $key."=no"; <- yes以外を渡す
}else{
echo $key."=yes";
}
?>">hoge.php</a>
みたいにすれば、良いんでない?
htmlは汚くなるけどねぇ。
0042nobodyさん
04/11/23 20:40:15ID:???初心者の回答で申し訳ないが漏れならばこうかな
$i=0;$lines=array();
foreach ( file($log) as $line ) {
list( $r1, $r2,) = explode("<>", $line);
if ( $r2 != $st ) { $lines[$i] = $line; $i++; }
}
0043nobodyさん
04/11/23 20:43:17ID:???PHP Version 4.3.8で、Server APIはCGIです。
さくらインターネット共用鯖を使っています。
http://php.s3.to/man/features.http-auth.html
上記ページには、CGI版では利用出来ないと書かれているBASIC認証ですが、
さくらインターネットのスレッドでこの件が少し前に話題に上っていて、
http://pc5.2ch.net/test/read.cgi/hosting/1100674985/96
辺りからなんですが、普通に使えるそうなんです。
http://pc5.2ch.net/test/read.cgi/hosting/1100674985/119
それで、試したところ、認証画面(IDとPASSを入力するところ)は出るんですが、
いくら正しいIDとパスを入れても認証されません。
試したのは下記のコードです。
<?php
if (!isset($_SERVER['PHP_AUTH_USER'])) {
header("WWW-Authenticate: Basic realm=\"My Realm\"");
header("HTTP/1.0 401 Unauthorized");
echo "FAILED\n";
exit;
} else {
echo "<p>こんにちは、{$_SERVER['PHP_AUTH_USER']} さん。</p>";
echo "<p>あなたは、{$_SERVER['PHP_AUTH_PW']} をパスワードとして入力しました。</p>";
exit;
}
?>
ホントは出来ないのに釣られてるとしたら恥ずかしいんですが、
どなたかお力添えお願いします。
004443
04/11/23 20:45:08ID:deYy9Umy0045nobodyさん
04/11/23 21:03:29ID:???逃げ道としてmod_rewriteを使った方法がuser noteに載ってたよ。
0048nobodyさん
04/11/24 00:53:44ID:TtNOWNs7ここのsessin_handler.php ってのを流用させてもらってるんですが、
>define(S_RAW_DATA_FIELDNAME, "rawdata");
この書式なんかおかしい?
なんかdefine行のエラーがログに残ってしまうんだけど。
0049nobodyさん
04/11/24 01:16:28ID:???0050nobodyさん
04/11/24 02:43:35ID:???結局見れないってことでおーけー?
漏れもつい最近php始めたばかりだから
passとかそのまま書いてあるファイルをアップするのに
すごく抵抗あった。
0053nobodyさん
04/11/24 06:49:34ID:???仕組みを理解できないやつは
共有サーバでPHP使うなってことでいいじゃん
>>50
見れないんじゃない
見れる場合もあるし見れない場合もある
絶対に見れないなんてサーバごとの設定で変わる
怖いなら自分でサーバ立てて遊べ
0054nobodyさん
04/11/24 10:54:03ID:???$txt = "ほげhttp://www.hogehoge.com/hoge.php?hoge=hogehogeうげ";
$html = mbereg_replace('https?://[a-zA-Z0-9.]{2,}(:[0-9]+)?(/[-_.!~*a-zA-
Z0-9;/?:@&=+$,%#]+)?','<a href="\0">\0</a>',$txt);
コレをWindowsのネットワーク参照の場合でもリンク張るようにしたいです。
(\\testsub\_public\テストフォルダ\ という文字列があった場合<a href="\\testsub\_public\テストフォルダ\">\\testsub\_public\テストフォルダ\</a> って結果が得たい)
正規表現とかよーわからんので誰か教えて頂けませんか。
0055nobodyさん
04/11/24 11:02:12ID:???0056nobodyさん
04/11/24 11:19:31ID:???正規表現道場@2ch Part3 s/煽り|荒らし/あぼーん/g
http://pc5.2ch.net/test/read.cgi/php/1069245758/
ただし行った先でも同じ扱いされるオチ
0057nobodyさん
04/11/24 14:26:34ID:uMAYUbw6既に稼動しているサーバーのPHP4.1を
4.3にバージョンアップしたいんですが、
動いているDBやプログラムなどに影響なく上書き可能なものでしょうか?
その際、注意する点など教えてください。
0058nobodyさん
04/11/24 14:48:10ID:???日本PHPユーザ会のウェブページに各バージョンのチェンジログがあるので(日本語)、
それを確認されたし。影響が出るかどうかは今までのコーディングスタイルによる
ところが大きいので一般論としてどうこうは言えない。
0060 ◆.jC7ANgFY.
04/11/24 17:44:46ID:u2c0bqPjロックもちゃんとできているはずなのにカウンターが崩壊して
しまいました。flockでは不完全なことがあるのでしょうか。
環境はFreeBSD 4.10-RELEASE[i386] + Apache/1.3.29 + PHP/4.3.6です。
アクセスログから得られる当時の状況としては
1秒に30回上がる状況でした。
$log = './counter.dat';
$fn = fopen($log, 'r+');
if (flock($fn, LOCK_EX)) {
$cnt = unserialize(fread($fn, filesize($log)));
define('UNIX_DAY', intval((intval(time() / 3600) + 9) / 24));
if ($cnt['day'] == UNIX_DAY) {
$cnt['tdy']++; $cnt['cnt']++;
} else {
$cnt['day'] = UNIX_DAY; $cnt['yes'] = $cnt['tdy'];
$cnt['tdy'] = 1; $cnt['cnt']++;
}
ftruncate($fn, 0); rewind($fn);
fwrite($fn, serialize($cnt));
}
fclose($fn);
0061nobodyさん
04/11/24 18:06:10ID:U8iE6hyFindex.phpに
<?
$hoge="ABCDE";
include("inc.php");
?>
inc.phpに、
<?
echo "$hoge";
?>
index.phpを実行すると
ABCDEと出力されて欲しいんですが、何も出ません。
こういう形でinc.php、に出力処理を書くようなのは、間違った使い方なんでしょうか??
0062nobodyさん
04/11/24 18:12:00ID:???おかしいね。出力されるはずだけど
http://www.php.net/manual/ja/language.variables.scope.php
006461
04/11/24 18:46:43ID:rINoz0G+include("http://hoge.com/inc.php")
という形で、絶対パスで指定しています。
ちなみに、
inc.phpに
<?
$hoge="ABCDE";
echo"hoge";
?>
としてやって、index.phpを実行すると、ABCDEと出力されます。
include自体は成功していて、変数の受け渡しが出来ていないのだ、と思うんですが・・。
0067nobodyさん
04/11/24 19:46:20ID:T2L7eVOoArray([0]=>1[1]=>10[2]=>15[3]=>30[4]=>50)
とformから受け取ったのを、値をカンマ区切りで
$id<>$name<>$mail<>1,10,15,30,50<>
とログに書き出したいのですがどうしたらいいですか?
006967
04/11/24 20:02:06ID:T2L7eVOoArrayに入ってくる値の数はまちまちです。
このまちまちなのをどうしたらいいのかが分かりません。
よろしくお願いします。。
0070nobodyさん
04/11/24 20:02:48ID:???マニュアルの配列関数を眺めるべし。
http://php.benscom.com/manual/ja/ref.array.php
0072nobodyさん
04/11/24 20:18:06ID:iZEscFNu一台認証サーバを用意するべきですか?
他に方法があれば教えて下さい。
007367
04/11/24 20:25:26ID:T2L7eVOoありがとうございました!
それで
$id<>$name<>$mail<>1,10,15,30,50<>
$id<>$name<>$mail<>2,12,16,30,60<>
こんな感じになったログから
何番が何回選ばれているかカウントするにはどうしたらいいですか?
0075nobodyさん
04/11/24 21:44:53ID:???そこでこれだ。
select number, count(number) from tablename group by number;
0076nobodyさん
04/11/24 22:01:24ID:???あなたは 趣味でPHPやってるの? それならマニュアルじっくり読むなり、自分でじっくり考えるなり
時間をかけてでも自分でやろうとしろよ。
もし、仕事でやってるなら 転職しろ。
0077nobodyさん
04/11/24 22:41:23ID:???007861
04/11/24 22:47:07ID:rINoz0G+ヒントありがとうございます。
include($_SERVER['DOCUMENT_ROOT'].'/inc.php');
で、無事動くようになりました。
他のサーバにあるPHPを勝手に動かす事が出来ないように、こう記述しないとダメ、という理解でいいんでしょうか?
# http://〜って、なんて言ったらいいんでしょうか…
0079nobodyさん
04/11/24 23:43:19ID:???以前に似たような話で指摘した気がするけど、原因はこの部分。
> ftruncate($fn, 0); rewind($fn);
一時的にでもファイルサイズを 0 にすると、その間に別の httpd のプロセスが
ファイルサイズ 0 のキャッシュを読んでカウンタファイルが壊れる可能性がある。
FreeBSD では試していないけど、Linux でもそれと同じスクリプトを試してみたら、
簡単にカウンタファイルを壊すことができた。flock() は正常でもファイルキャッシュ
とかの関係で壊れることが多い。
とりあえず、Apache 付属の ab でも使って思うので試してみたら?
FreeBSD でも簡単に壊れると思うし、エラーログを見ればエラーが
出力されているはず。コマンドはこんな感じ。
/usr/local/apache/bin/ab -n 1000 -c 5 http://example.com/count.php
Linux で確認したカウンタファイルを壊さないようにするための回避方法だけど、
fopen() の行の前に clearstatcache() を入れておくとファイルサイズ 0 の
キャッシュを読み込んでカウンタを壊すことはなくなった。
または、
ftruncate($fn, 0); rewind($fn);
fwrite($fn, serialize($cnt));
の部分を以下のように修正するというのでも回避可能だった。
rewind($fn);
fwrite($fn, serialize($cnt));
ftruncate($fn, ftell($fn));
FreeBSD で壊れない方法を確認してその方法を採用すれば良いと思う。
0080nobodyさん
04/11/25 00:20:10ID:???海外では確認画面って概念がないのか?
どうも確認画面のことを考えられてないぽ。
返信ありがとうございます。当方FreeBSDでは崩壊を確認することはできませんでした。
しかしそのような事例があるのであれば今後、気をつけていこうかと思います。
対策については前者の方法(clearstatcache)でいこうかと思います。
後者の場合はたまたま(桁数はなかなか変わらないので)ファイルサイズが一定
だったために壊れなかったものだと思いますので。一応以下にabの出力概略を。
/usr/local/apache/bin/ab -n 1000 -c 1000 [URL]
Concurrency Level: 1000
Time taken for tests: 6.702 seconds
Complete requests: 1000
Requests per second: 149.21 [#/sec] (mean)
Time per request: 6.70 [ms]
Connnection Times (ms)
min mean[+/-sd] median max
Connect: 2 94 333.5 47 3099
Processing: 124 799 210.5 809 1355
Waiting: 49 799 210.8 808 1354
Total: 124 893 394.3 846 4018
0082nobodyさん
04/11/25 01:11:43ID:???さっき、FreeBSD 5.2-RELEASE Apache 1.3.31 + PHP 4.3.6 を起動して試したら
clearstatcache() を入れない場合、カウンタファイルは壊れたけど。
FreeBSD 4.x は手元に環境がないので試せない。
一応、もう少し調べて分かったのは、ab はローカルホストに対して実行すると
カウンタファイルは壊れにくい。外部から ab を実行すると壊れるかもしれない。
あと、-c はあまり大きい値にしてもあまり意味はなかったような気がする。
まあ、本当にカウントファイルが壊れないかどうかは flock() の後に
usleep() や sleep() を入れてから ab を実行すれば良い訳だけど。
0083nobodyさん
04/11/25 01:30:01ID:???ディレクトリの空き容量を調べたいと思って
diskfreespace($path_name);
を使いましたが、ドライブ全体の容量が表示されてしまいます。
ディスククォータにて容量を制限したディレクトリの空き容量だけを
表示する方法は無いものでしょうか?
宜しくお願いします。
0084nobodyさん
04/11/25 01:31:27ID:????id=nnnって感じでgetでそれぞれのレコードの詳細ページを読むだけで
そのレコードののアクセス数をカウントアップ、更新をする、っていうのを作ってずっと動かしてるんですが、壊れません。
f5とかを数人でかましてみましたが、大丈夫っぽいです。
こういうのは、方法として気違いっぽいですか?
0085nobodyさん
04/11/25 02:07:41ID:???DBMS使ってそれがよろしくやってくれてるんだろ。
コンテンツ毎のカウンタが重要で、さほどコンテンツも
参照されないサイトかな。現状で不満がないならそれで良い。
参照頻度が増えるとその設計はきついけどな。
0086nobodyさん
04/11/25 10:45:56ID:???<>がよく使われますがその他使いやすい物はありますでしょうか?
0088nobodyさん
04/11/25 11:06:23ID:???0089nobodyさん
04/11/25 11:09:20ID:???超既出。
掲示板などで投稿データを保存する前に<を<、>を>に変換する場合、
データに<>が含まれる事が無から。
>>86
データによる。
<>が含まれる可能性があるなら<>区切りは止めた方が良いし、タブが含まれるなら
タブ区切りは止めた方が良い。
0090nobodyさん
04/11/25 11:14:04ID:???セパレータ<>ってstrip_tags後のデータをログに保存する前提なんじゃない?
多分だけど。
という俺もタブ区切り派。
でも、昔 explode("\t", $line); で空カラム(\t\t\tとかなってるところ)が
うまく読まれなかった経験あり。
最近気にしたことなかったんで気付かなかったけど、
今はそのバグらしきものは再現しない。
0091nobodyさん
04/11/25 11:15:13ID:???テキストをコピペしてタブが入る可能性があるので、<>にして
<>が入力された場合は<>で置換しようと思います。
色々と意見が聞けて安心しました。ありがとうございました。
0093nobodyさん
04/11/25 11:16:43ID:???0094nobodyさん
04/11/25 11:18:47ID:???掲示板などのデータをテキストで保存するなら保存前にサニタイジングが
当たり前。
改行を<br>に変えないと、1行に保存出来ないし、<br>を変換する前に、
<と>は<と>に変えた方が楽。
負荷的にも、読む度に変換するより、保存時に変換する方が良い。
0095nobodyさん
04/11/25 11:18:59ID:???それとも\\tという風にしてしまうんだろうか・・教えてエロイ人
0097nobodyさん
04/11/25 11:23:53ID:???なるほどね。最近DBに保存ってのしかしてないから、そこら辺疎い。
データとビューは分離するものと思ってるし。
# 負荷はなんとでもなると思う。
0098nobodyさん
04/11/25 11:58:09ID:???でも、それだとHTML以外への利用がしにくくなるよね。
メールで送るとか、エクセルで一覧表示とか。
だからログはできるかぎりそのままで保存しておきたいと思ってるんだけど。
俺はタブと改行を別文字に置換してタブ区切りで保存してるよ。
0100nobodyさん
04/11/25 12:04:12ID:???んー、俺はメリットを聞きたかったんだがそれは理由だよね。。
セパレータだけで2byte食うしExcelで簡単に開けないし
デメリットの方が多いように感じる
0101nobodyさん
04/11/25 12:09:33ID:???設定変更すりゃいいけどさ。
■ このスレッドは過去ログ倉庫に格納されています