【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
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
0753nobodyさん
04/11/17 13:15:02ID:???ありがとうございました。
一部だけ小文字にしたいので strtr を使おうとマニュアルを見たら
> 引数を2つ指定してコールっ_場合
なんてのが。
0754695
04/11/17 14:02:03ID:???最終的に検索クエリが遅いのは明らかなので、
ページングした際に再度クエリを投げないで済めば
早くなるのはわかっているんです。
なので、limit掛けない結果をキャッシュするしかないかなぁ?
ってのが>>742です。
>>750
文字列マッチでの検索とかした場合ですか?
シーケンシャルに読むだけならクエリー自体が軽いので、
ページングしても重くならないと思います。
もし文字列マッチでも早いなら、ソース見るしかないですかね・・・。
0755nobodyさん
04/11/17 14:12:32ID:???を試しているのですが、register_shutdown_functionに登録された
関数内において、ログファイルの書き出しも、クラスファイル等のincludeも
いずれもpermissionエラーとなって実行できないのですが、
register_shutdown_functionの実行権限は、mainの処理とは異なるのでしょうか?
バージョンは4.2.3です。
0756nobodyさん
04/11/17 15:06:42ID:???返ってくるけど。
0757nobodyさん
04/11/17 15:11:44ID:eshx/1+6>>688で可変長引数の質問について教えてください。
function test() {
list($a, $b, $c) = func_get_args();
}
のように、可変長引数にするメリットはなんでしょうか?
あんまり思いつかないのですが…。
>>691で言われているようにデフォルトを与えた方が
楽な気がします。
0758nobodyさん
04/11/17 15:22:26ID:???apacheをどのような設定にすれば使用出来るようになるのでしょうか?
0760nobodyさん
04/11/17 15:35:58ID:???文字列マッチの場合なり
0761695
04/11/17 16:04:49ID:???どひゃー。
ちょっと検索対象のフィールドの定義と、
1レコードのバイト数(概算)教えてもらえますか?
(中間一致ならindexは効かないですもんね)
他になにかやらかしてそうな設定ってあるかな・・・
0762nobodyさん
04/11/17 16:09:58ID:???0763nobodyさん
04/11/17 16:12:20ID:ewTnqAG8だとした場合、二つをマッチングさせて、マッチしたら1,マッチしなかたら
0を入れた配列$cを作りたいのですが、可能でしょうか?
$cの値は、0,0,1としたいんです。
どういうことかといいますと、$aが商品番号の配列。$bがユーザが持って
いる(購入済)商品番号。この情報から購入フラグ(購入済み0,未購入1)
配列を作りたいんです。どうかお知恵をお貸し下さい。よろしくお願い
致します。
0764nobodyさん
04/11/17 16:12:37ID:???0765763
04/11/17 16:15:42ID:ewTnqAG8出来ましたら、$cは連想配列にして、echo $c[one];としたら0
と出したいんです。自分にはむずかしすぎて、取っ掛かりさえつかめない
状態です。
0767748
04/11/17 16:42:06ID:???いやぁ、私が言いたかったのは、別に自前でキャッシュなんてしなくても、
limitかけないでクエリー発行して、mysql_data_seek()をつかえば、
MySQLの方でやってくれるぞ。って話で。
その際システム側でどんだけメモリなりのリソース食うかは預かりしらんが、って事で。
0768nobodyさん
04/11/17 16:51:04ID:???どのへんがどうわからないの?答えようにも自分には(質問の意図をつかむのが)むずかしすぎて、取っ掛かりさえつかめない状態です。
とりあえず「いち、に、木」はやめよう。
0769nobodyさん
04/11/17 16:52:34ID:???0770768
04/11/17 17:01:31ID:???あれだけじゃ悪いから、スマートじゃないけど分かりやすい例ね。配列関連の関数を探すともうちょっと上手くかけるよ。
$a = array('one', 'two', 'three');
$b = array('three');
foreach ($a as $shohin) {
foreach ($b as $konyuzumi) {
if ($shohin == $konyuzumi) {
$c[] = 1;
} else {
$c[] = 0;
}
}
}
echo $c[0],'<br />';
echo $c[1],'<br />';
echo $c[2];
0771695
04/11/17 17:07:52ID:???となると、MySQLの設定の問題又はサーバースペックの問題ってことですね。
スレ違い申し訳ない。
たしかに、そんなにスペックのいいサーバーではないのですが、
普通に1.5秒以上掛かります・・・
0773nobodyさん
04/11/17 17:23:22ID:zF/X7yAnダウンロードダイアログ画面を出して
ファイルをダウンロードさせたいのですが、
大きいファイルだと保存画面がでるまでかなり時間がかかります。
これは何とかなりますか??
<?php
//down.php?file=ダウンロードファイル でアクセス
download($file);
function download($file){
//ファイルサイズ
if (($content_length = filesize($file)) == 0) {
die("error1");
}
//ヘッダ送信
header("Content-Disposition: attachment; filename=\"".basename($file)."\"");
header("Content-Length: ".$content_length);
header("Content-Type: application/octet-stream-dummy");
//出力
if (!readfile($path_file)) {
die("error2");
}
}
?>
0775nobodyさん
04/11/17 17:35:00ID:???仮に「自前でキャッシュ」するなら
「limitかけないでクエリー発行して、mysql_data_seek()をつかう」
の場合でも、どちらもシステム(PHP側)のリソースは食うので後者でOkかと。
サーバサイドカーソルはPHPでは無理だし。
しかしMySQLでlimit掛けても、内部的に条件判別に利用された結果
(全結果ではなく対象リストみたいなもの)はキャッシュされるので、
テーブルの値に変化とかなければ、2回目以降は比較的早く出る筈なんだが
システム上の作りが変なのか、特殊なのか…
0776nobodyさん
04/11/17 17:55:44ID:???だよね。0.05秒だったのが次やったら0.01秒切ったし。
0778nobodyさん
04/11/17 19:39:20ID:???0779822
04/11/17 21:14:58ID:???あとPEAR::DBとの比較ってどっかにありますか??
0780773
04/11/17 21:36:19ID:zF/X7yAnまさにwinで↑なんですが解決法書いてあらず・・
0782781
04/11/17 22:36:30ID:???0783781
04/11/17 22:42:49ID:???>>773のスクリプトそのままで開いてみたけど特に問題は無いよ。
PHP 自体のバグだと思うから Version Up すれば解決するぽ
0784nobodyさん
04/11/17 23:59:10ID:OsVB8E9H借りてるレン鯖で設定しているあるメールアドレス宛てにメールが届いたら、
そのメール受信をキッカケにプログラム(自作のPHP)を
起動させてそのメールを処理(データベースに収納したり自動返信したり等)を
させたいのですが、そういうことは可能でしょうか?
自分で思いつく限り検索してみたところ、MTAでパイプ渡しが
どうのこうの・・・と、意味がよく分かりませんでした。
それに、そういうことは共用鯖では実現が難しそうな感じでした。
やっぱり専用鯖が必要なのでしょうか?(専鯖ならどこでも可能??)
すみません、自分のレベルが低いので分かりにくい質問かもしれませんが
どなたか技術的に分かる方がいらっしゃいましたら教えてください。
0785nobodyさん
04/11/18 00:14:18ID:???forwardやprocmail等を使えば可能だけど共用鯖なら無理かも知れんね。
専鯖でも使えるかどうかはその鯖の設定次第。
0786773
04/11/18 00:20:26ID:???ありがとうございます。
環境変えてやってみます。
0787nobodyさん
04/11/18 00:34:20ID:GCCM5gSlお答えありがとうございます。
ということは、「forward」や「procmail」というのが
使えるかどうかを鯖会社に質問すればOKですか??
もしかしたら専鯖じゃなくてVPSっていうのでも出来るのかな・・・?
0789nobodyさん
04/11/18 01:02:50ID:???0790nobodyさん
04/11/18 01:50:03ID:AjTyCRAuマニュアルを探したんですけど日付に変換するものしかなくて・・・
例えば、6000秒で01:40:00って表示するようなのが欲しいんです
0791nobodyさん
04/11/18 02:01:24ID:???0792nobodyさん
04/11/18 02:19:03ID:???$sec = 6000;
echo date('H:i:s', mktime(0, 0, $sec));
一応mktimeでいけるね
24時間以上だとこのままでは無理だけど
0793792
04/11/18 02:32:31ID:???参考になるか分からんけど漏れが作った奴載せとく
function sectohour($sec) {
$hour = floor($sec / 3600);
$sec %= 3600;
$min = floor($sec / 60);
$sec %= 60;
return(sprintf('%02d:%02d:%02d', $hour, $min, $sec));
}
0794nobodyさん
04/11/18 03:35:35ID:???FOMA端末のUA識別は
"DoCoMo/^2\.0" という表記で良いんでしょうか?
<?
$ua = $_SERVER["HTTP_USER_AGENT"];
if(ereg("DoCoMo/^2\.0",$ua)){
header("Location: aaa.html");
exit;
}else {
header("Location: bbb.html");
exit;
}?>
FOMAで「aaa.html」 それ以外は「bbb.html」へ飛ばすようにしてるつもりなのですが、
上手く動作しません。
0795nobodyさん
04/11/18 04:36:45ID:???location hoge は絶対パスで書かないと駄目だとか
0796790
04/11/18 08:35:27ID:???レスありがとうございます。なるほど、mktimeですか気付きませんでした。
しかし、24時間以上を扱う予定なので793さんのコードを参考に作ってみます。
みなさんありがとうございました。
■ このスレッドは過去ログ倉庫に格納されています