【PHP】質問スレッドpart24【php】
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
04/11/01 04:09:15ID:???・新規質問の方は上げてください。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
0653nobodyさん
04/11/14 17:01:12ID:TN0m6TVj$str = "94852-769493"
if(ereg("[0-9\-]",$str2))
この場合だと\\-じゃなくて\-なんだけど
\\-になるときと\-になる違いていうのはなんですか?
参考書しらべまくってるんだけど正規表現あんまり詳しくのってないんです
ご存知のかたいたら教えてください。お願いします。
""で囲む時の\の動作が一定じゃないのよね。
"\\-" == "\-"
"\\n" != "\n"
echoして調べてみるべし。
0655nobodyさん
04/11/14 20:19:07ID:???マニュアルにも載っているのだが、
ttp://jp.php.net/manual/ja/language.types.string.php#language.types.string.syntax.double
>この他の文字をエスケープしようとした場合には、バックスラッシュも出力されます!
\が出力されるのは、-や.がエスケープシーケンスに含まれていないのがその理由
0656nobodyさん
04/11/14 21:28:42ID:???まぁ自作スクリプトのヘタレ具合は別として、TOPページを
index.shtml としてperlでシコシコ書いたものと、
index.php としてphpでシコシコ書いたものでは、どちらが負荷が大きいんでしょう?
全部のページを解析しようとすると、全ページ XXX.php に?
コレって負荷大きすぎないんですか?
ヘタレですけど、がんばりますんで よろしくお願いします。
0657nobodyさん
04/11/14 21:56:42ID:???おかずにより、負荷がかなりことなります。
0658nobodyさん
04/11/14 22:01:51ID:???普通はサーバのログから解析するもんだと思うが。
特に負荷云々を気にするぐらいなら。
サーバでログ出力させた方が遥かに負荷が少ない。
0659nobodyさん
04/11/14 22:15:59ID:???まぁたしかにそうなのかも・・・・ ありがとう。
0662nobodyさん
04/11/14 23:59:40ID:???HTMLのフォームでやたら<hidden>が多くなってしまいました。
なんか、見ためかっちょ悪いです。
0663nobodyさん
04/11/15 00:10:28ID:???0664nobodyさん
04/11/15 00:29:48ID:???そういう場合はしょうがないのでしょうか。
0665nobodyさん
04/11/15 01:11:07ID:Uy1hSbYj以下のように、ディレクトリ名を取得してアンカーを指定したいのですが、
ディレクトリ以外のもの、(ディレクトリの中には、htmlファイル以外を置かないのでhtmlファイル)
をとってきてしまい困っています。
$cd = $_REQUEST['path'];
$cdir = opendir("/myhome$cd/");
while(($dname = readdir($cdir)) !==false){
if(is_dir($dname) && $dname != "." && $dname != ".."){
print "<b><a href=$dname/index.html target=main src $dname/index.html>$dname</a> </b></font>";
}
}
$dnameがディレクトリのときだけアンカーをつけて表示させるように記述しているのに
どうしても、htmlファイルを取ってきてしまいます。どうすれば、ディレクトリ名だけを取るのか
ご存知の方、お知恵をお貸しください、
0666nobodyさん
04/11/15 02:23:42ID:???aタグにsrcなんて属性あったっけ?
つーか、タグが滅茶苦茶だ。開いてないのに閉じてるし。
まあ、どうでもイイコトはおいといて、
$cdの行をコメントアウトして、$cdirに自分のホームディレクトリを指定して他は"そのまま"動かしたけど
ちゃんと、ディレクトリのみリンクが表示されたよ。
変数を一個一個echoして表示させてみたら?
例えば、ifの前後に$dnameをechoしてみるとか。
#環境も書かないでどうしたいのだろうか?
0669nobodyさん
04/11/15 10:03:08ID:???hidden の値がクライアント側で変化するか否かできまるんじゃない?
変化しないなら、サーバ側で、$_SESSIONで代替できるだろうし。
変化するなら、使わざるを得ないと。
0670nobodyさん
04/11/15 18:42:53ID:ObsXoKC2判断することって出来ますか?
0673nobodyさん
04/11/15 19:26:11ID:???MySQLサーバやクライアントのバージョンも、
PHPのバージョンも書いて無いので回答に困る
(バージョンによる差異の大きいところだから)が、
一般的にはSHOW STATUSで取れる
最近では関数も増えて
http://www.php.net/manual/ja/function.mysql-stat.php
http://www.php.net/manual/ja/function.mysql-client-encoding.php
なども使える。
phpmyadminでやってないのは、ひとつの言語でエンコードが複数あるなんて
言語(アジア圏)は余りないからでしょ。
0674673
04/11/15 19:28:05ID:???エンコーディングなんで注意してね。(つまりMySQL4.1以降)
0675673
04/11/15 19:31:47ID:???×:SHOW STATUS
○:SHOW VARIABLES
0676670
04/11/15 19:44:03ID:???ありがとです。
0677nobodyさん
04/11/15 19:44:59ID:HnT7CqLI<input type=hidden name=mode value="weq">
<input type=hidden name=name value=ore>
<input type=hidden name=id value=042>
<input type=image src='http://aaa.com/img/bbb.gif' width=60 height=30'>ddd</form>
↑こんな感じのCGIへ送信するフォームを
例えば30分ごとに繰り返したい場合 、
前後をどんな風にすればいいでしょうか。
0679nobodyさん
04/11/15 19:58:57ID:???違うフォームを30分ごとに生成すんのか?
初心者にも判るように正確に丁寧に質問してください。
0680nobodyさん
04/11/15 21:09:53ID:???MySQLで日本語のソーティングがうまくいかないときは
Binaryモードに変更すればいい。たいていの場合は
解決できると思う。
0684665
04/11/15 22:21:09ID:Uy1hSbYjRedHat9
PHP4です。
>666さん
私も、ホームディレクトリでは動きました。
しかし、その下の「/homedir/hoge」まで記述すると何もとらなくなってしまいます。
ところが、「is_dir」を「!is_dir」にすると、ディレクトリとともにhtmlファイルもとってきてしまいました。
ためしに、hoge.jpgとダミーのファイルを置いたらそれもとってきてしまいました。
まぁ当然といえば当然なのですが、なぜ「!is_dir」でディレクトリまで取得するのがわかりません。
ソースを元に戻して、hoge配下にindex.htmlファイルとDirディレクトリを置いて、
if文の前後にechoを記述したところif文の前に書いたecho文に「...index.htmlDir」
と出てきてしまいました。これは、どういう意味なのでしょうか?
また、どうすれば、「Dir」だけを取り出せるのでしょうか
お知恵をお貸しください。
0685nobodyさん
04/11/15 22:23:45ID:Uy1hSbYjありがとうございます。
>666, 667 html部分はコピペで気づかずそのまま利用してしまいました。
申し訳ないです。<font>もコピーするとき切れてしまいました。・・・orz
0686nobodyさん
04/11/15 22:29:31ID:???ΩΩΩ ナンダッテー!!
0687nobodyさん
04/11/15 22:47:05ID:???まだ解決してなかったのかい。
例えば
$dname = readdir($cdir)
この $dname はパスを含まないファイル名かディレクトリ名。
だからファイル操作する時の引数には $cdir.$dname にしないとだめだ。
>なぜ「!is_dir」でディレクトリまで取得するのがわかりません。
存在しないファイル名を is_dir で判定してたら全部 false になって当然。
0688nobodyさん
04/11/15 23:59:08ID:7AtpKkGf以下のような感じで書きました。
function test(){
$num = func_num_args();
if ($num > 0){
$a = func_get_arg();
}
if ($num > 1){
$b = func_get_arg();
}
if ($num > 2){
$c = func_get_arg();
}
}
ifの羅列がいまいちやぼったい気がします。
もっとエクセレントな書き方はないものでしょうか?
0689nobodyさん
04/11/16 00:05:42ID:2ZViTd8dありがとうございます。
パスをつけて実行したらうまくいきました。
パスが必要だったとは・・・orz
感謝感謝です。
これで動かないことはない、って感じ。
指定されてないものにはNULLが入ります。
function test() {
list($a, $b, $c) = func_get_args();
}
0691nobodyさん
04/11/16 00:58:36ID:???$a,$b,$c…ってのに納めようとするから野暮ったくなってるんでは?
なんかに格納したいんなら、素直に、配列に落とし込めば良いと思う。
あるいは、最大で3つしか引数を取らないって言うなら、3引数の関数作って
デフォルトを与えた方が良いと思う。
0692nobodyさん
04/11/16 01:48:09ID:L8Qhj36n同じ制御構造で代入以外の操作をしたいなら
switch(func_num_args()){
case 1:
/* 引数1つ以上のときの操作 */
case 2:
/* 引数2つ以上のときの操作 */
・・・
case n:
/* 引数nのときの操作 */
break;
default:
/* その他 */
}
まぁ、>688の場合は>>690
0693nobodyさん
04/11/16 02:42:05ID:???なるほど!勉強になります。
690さんの方法で行こうと思います。ちょうどNULLが入って欲しかったので!
ありがとうございました。
0695nobodyさん
04/11/16 10:31:57ID:kHelo3UAこんなときの対処法を教えていただきたいのですが。
環境は Linux+PHP4+Smarty+Apache+MySQL4.0です。
文字列検索をクエリーで行い、結果のリストを表示します。
リストはページングします。
select * from tablename where search_text like '%入力値%' limit x, y;
みたいな検索をするのですが、
対象データが10万件とかを超えるような場合、
結果表示が遅いことが想像できると思います。
なにも考えずに作ると、
ページを移動する毎に(limit指定のみ変わった)
重いクエリーを実行する必要があるため、
パフォーマンスの問題があります。
最初の一回のクエリーは重くてもいいとして、
ページングを軽くする方法はないでしょうか?
0696nobodyさん
04/11/16 11:12:45ID:t4iPftE+PHP4.3.4
ですが、
セッンションを登録すると
内容が、すべて、Nになっているのですが、
何かヒントございませんでしょうか
よろしくお願いします
$s_start_time = strftime("",time()); ←ココでは、$s_start_timeに現在時刻(文字列)がきちんと入っている
session_start(); の後、
session_register("start_time");
として、trueが帰ってくる
結果をみるために、プリントすると
print "[".trim($start_time)."]"; ←こちらは、現在日付時刻が入っている
print "[".trim($_SESSION["start_time"])."]";
←コチラは、空文字になっている
0697nobodyさん
04/11/16 11:14:46ID:t4iPftE+レス送信失敗…
修正
$s_start_time = strftime("",time()); ←ココでは、$s_start_timeに現在時刻(文字列)がきちんと入っている
↓
$s_start_time = strftime("%Y-%m-%d %H:%M:%S",time()); ←ココでは、$s_start_timeに現在時刻(文字列)がきちんと入っている
です
0699nobodyさん
04/11/16 12:38:46ID:t4iPftE+セッションオートスタートがオンになってると、
セッション変数不可
って項目ですよね
オフに、なっているんですが…
0701nobodyさん
04/11/16 13:17:15ID:t4iPftE+え、その関数は不可ですんか…
アリガトンゴザイマスタ
0702nobodyさん
04/11/16 13:21:00ID:t4iPftE+セッションファイルにもきちんと値が入りマスタ
アリガトンゴザイマスタ
0703nobodyさん
04/11/16 13:25:08ID:???0704yoro
04/11/16 14:44:19ID:???「Parse error: parse error, unexpected $ in /test.php on line 3」
となります。
<?php
$val = 1;
print <<<END
\$val= $val
END;
?>
環境はローカルにインストールしたPHP4.3.9(DSO版)ですが、同じスクリプトをレンタルサーバー(PHP4.3.3 CGI版)に入れて実行するとなんの問題もありません。
ヒアドキュメント内の変数の展開を無効にするような設定ってありますか?
php.iniとかhttpd.confをあさったのですが、原因となりそうな設定項目はないように見えました。
ちなみに、ヒアドキュメントを使わずに
<?php
$val = 1;
print "\$val= $val";
?>
とした場合はエラーは出ませんので、ヒアドキュメント以外では変数の展開ができている模様です。
ヒアドキュメントを使えないとツラいので何とかしたいのですが、どなたか原因がわかる方がいらっしゃったら教えてください。
よろしくお願いします。
0705nobodyさん
04/11/16 15:03:40ID:???0706nobodyさん
04/11/16 15:22:12ID:kHelo3UA余計なインデントとかスペースとか入ってんじゃね?
ENDの後とか
ひとまず、マニュアルのソースコピーして貼り付け。
実行してみること。
http://www.php.net/manual/ja/language.types.string.php#language.types.string.syntax.heredoc
0707nobodyさん
04/11/16 15:49:12ID:wLOJos/kたとえば、helloを返す関数、hello()があったとして、
$msg=hello();
な感じです。色々試してみましたが取れないです。hello()ではただ
echo "hello"; としてるだけです。
達人のみなさま、なにとぞ宜しくお願い致しまする。
0709707
04/11/16 15:58:17ID:???ありがとうございました。
echoでなく、returnにしたらおかげ様で出来ました。
マニュアル読んだつもりになってましたが、全然読めてなかったんです
ね。反省いたします。
0710yoro
04/11/16 16:21:53ID:iDIPDCBPご返答ありがとうございます。
指示されたようにマニュアルのコピー&ペーストをして再度試しましたが、やはり同じ結果でした。
先にも書きましたが、同じファイルが別のサーバーではきちんと実行できることを考えると単純なスクリプトの間違いではないように思います。
なにか他の可能性が考えられれば、ご示唆いただければうれしいです。よろしくお願いします。
ローカルにインストールしたPHP4.3.9はPHPの本家からリンクされているバイナリーパッケージ(Mac OSX版)を使ったので問題はなかろうと思っていますが、PHPをきちんとソースからコンパイルして入れ直した方がいいのかも知れません。
0711nobodyさん
04/11/16 16:59:43ID:???Mac OS X 10.3.6 & PHP 4.3.9(自前コンパイル)
END;の前にインデント入ったりはしてないよね?
0712yoro
04/11/16 17:00:05ID:iDIPDCBP改行コードの問題だと判明しました。
Mac上で実行する場合、改行コードがCR(Mac)だとエラーになるようです。
LF (Unix)またはCR+LF(DOS)にすれば大丈夫なようです。
リモートでは問題がなかったのは、Linuxサーバーだったからだと思います。
ヒントをいただいてありがとうございました。
0715yoro
04/11/16 17:09:03ID:iDIPDCBPありがとうございました。
DreamWeaverで書いたコードの改行コードがCR(Mac)になってたのが原因だったのですが、DreamWeaverの環境設定にCode Formatというタブがあり、そこで改行コードをLF(Unix)に設定するオプションがありました。
今後は安心して書けると思います。お騒がせしました。
0716nobodyさん
04/11/16 17:09:35ID:wLOJos/k先程から初心者な質問ですいません。
0717nobodyさん
04/11/16 17:25:02ID:???特定する必要があるのか、ただ取り出せばいいのか
マニュアルの配列の項目
http://jp2.php.net/manual/ja/ref.array.php
の下のほうをじーーーと見れば、何を使えばいいのか分かる
直接関数がないなら、ひっくり返して前から取ればよくない?
0718nobodyさん
04/11/16 17:37:53ID:???配列の要素数を返す関数 count() を調べろ。
それで最後の配列要素を取り出すことは出来る。
もしくは>>717のようにreverseさせて先頭要素[0]を取り出す手もある。
てかこのくらいGoogleかなんかでPHP講座とか探して勉強しろ。
0719nobodyさん
04/11/16 17:43:46ID:???>>718
連想配列使って、
$temp_val = $val["インデックス"]
ってな具合に、取り出すのは、2度出間すかね?
0720nobodyさん
04/11/16 17:46:59ID:???0721nobodyさん
04/11/16 19:36:37ID:???0722716
04/11/16 20:02:01ID:???おっしゃるようにカウンタ使っていたんですが、もっとスマートな
方法がないものか模索しておりましたが、array_pop()を使うことに
致しました。下記に作った自身のログファイル名を定義するスクリプトです。
もっと短くしたいんですが、これ以上無理でしょうか・・・
$res=split("/",$_SERVER['SCRIPT_NAME']);
$res=split("\.",array_pop($res));
$logfile="$res[0].log";
$logdir="./log";
$log="$logdir/$logfile";
0723nobodyさん
04/11/16 20:21:22ID:???0724nobodyさん
04/11/16 20:30:06ID:???正規表現、勉強しような
0725nobodyさん
04/11/16 20:48:36ID:???$filename = basename($_SERVER['SCRIPT_NAME'], ".php");
$filename.= ".log";
$log = "./log/{$filename}";
って書く
0726nobodyさん
04/11/16 22:32:23ID:???$log = "./log/{$filename}.log";
でもいいわけだ。
0727nobodyさん
04/11/16 23:22:24ID:s1qPu0YC0728727
04/11/16 23:26:42ID:s1qPu0YC今日の日付 date() から1ヶ月先の日付を取得する方法を教えてくだせぇ。
お願いします。
unixタイムスタンプから1ヶ月分足す方法になると思うのですが、
1か月分のunixタイムスタンプがわからないっす
0729727
04/11/16 23:29:08ID:???スマソ。
727だけ教えてくださいませ
0730nobodyさん
04/11/16 23:32:02ID:???速い方法はほかにあるけどphpだからこその簡単な方法は
strtotime('+1 Month')
0732nobodyさん
04/11/16 23:37:31ID:tAnxVLV8.....<? echo $test1 ?>
フォームのPHPの埋め込みなんですけど、いきなり?
からはじまってます。。<?php echo >て言う感じにphpはいれなくていいんですか?
いれるときといれないときの違いっていうのはどういうことなんでしょうか?
ほんとに初心者からはじめれる本っていうのなんですけど、まったくこういうことに
ふれてないです><おしえてもらえればありがたいです
0733727
04/11/16 23:37:51ID:???分かりますた、ずばり日を1日に指定してそこから1日引くのですな!!
0734nobodyさん
04/11/16 23:43:44ID:???echoなら<?=$hoge?>でも可能。
<?php echo 'A'; ?>
<?php echo 'A' ?>
<? echo 'A'; ?>
<? echo 'A' ?>
<?='A'?>
全部同じ意味です。ほかにscriptタグ使う奴
とかもあるけど気にしなくていい。
0736nobodyさん
04/11/16 23:55:32ID:???すわっ新種の顔文字かと思った。
0737nobodyさん
04/11/16 23:58:37ID:???まぬあるにかいてあるべ
0738nobodyさん
04/11/17 00:38:37ID:???0739nobodyさん
04/11/17 00:55:24ID:???確かどこかにエラーメッセ出てたよね?
0741nobodyさん
04/11/17 06:32:42ID:???0742695
04/11/17 10:30:45ID:???やっぱり、自作で結果をキャッシュするしかないかな・・・。
0743nobodyさん
04/11/17 10:50:38ID:???質問には答えられないけど、シチュエーションに興味あり。
0745nobodyさん
04/11/17 11:18:07ID:???基本的に日本語バグトラッキングシステムてPHPのやつ。
# 影舞いいんだけどRubyだし。
0747695
04/11/17 11:32:22ID:???10万件ヒットではなく、検索対象が10万件ですー。
そのうち20万件とか30万件が対象になる予定なんですけど。
これぐらいだと普通にありますよね?
0749nobodyさん
04/11/17 12:23:16ID:???tr/A-V/a-v/ をしたいのです。
0750nobodyさん
04/11/17 12:41:09ID:???phpPgAdminで10万件ヒットの結果をviewingしても、最初の画面だけ
ちょっと待たされるものの、あとはそれほど重く感じない。
0751nobodyさん
04/11/17 12:42:17ID:???http://jp2.php.net/manual/ja/function.strtr.php
■ このスレッドは過去ログ倉庫に格納されています