【復活求む!】惜しくも解散してしまったバンド|J-ROCK編 >>

PHPバージョン5.2.4を使っています。
下のような localhost/c.php とアクセスして
a.phpのf()関数をb.phpの中で使った時に、f()の中でb.phpのパスを取得したいのですが
そのような関数はあるのでしょうか?$_SERVERだとc.phpのパス(アクセスファイル)は取得できるのですが
b.phpはありませんでした。
(呼び出し先と呼び出し元が、自分の中でごっちゃになってて言い方が逆かもしれません・・・)

[a.php]
function f()
{
//ここで呼び出し元のパスを取得したい
}

[b.php] ← このファイルパスを取得したい
require_once 'a.php';
f();

[c.php] ← このファイルを実行
require_once 'b.php';

このQ&Aに関連する最新のQ&A

A 回答 (2件)

debug_backtrace関数を使用することで取れますよ。



参考URL:http://jp2.php.net/manual/ja/function.debug-back …
    • good
    • 0
この回答へのお礼

ご返答ありがとうございます。
なるほど、この関数はいろんな値が取れそうですね。

お礼日時:2008/02/13 20:46

そういう関数はありません。

呼び出し元で決められた変数にセットしておくなど、あくまでも「自分で管理」してください。
    • good
    • 0
この回答へのお礼

ご返答ありがとうございます。
う~ん、そうですか・・・
例えばログなどを記録する時にこういう使い方をすると思うのですが、
記録した(その関数を使った)場所も知りたいと思いました。
上の例だと次のように変更

[a.php]
function f($path, $message)
{
write('場所:' . $path . ' 内容:' . $message);
}

[b.php]
require_once 'a.php';
f('ここのファイルパス', 'エラー内容');

とすればできると思いますが、こういう書き方は良くない気がしたので
何かないかと質問しました。

お礼日時:2008/02/12 21:48

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q文字列から、特定の文字を削除したい

アンケートで入力された値を受け取り、メールで送信しているのですが、受け取った値から、特定の文字列を削除することは可能でしょうか?

例えば電話番号の入力の場合、
03-xxxx-xxxx →03xxxxxxxx
077-xxx-xxxx →077xxxxxxx
のように、-(ハイフン)が入力されていたら、-を削除した文字列に置換してメール送信したいのです。
入力する時に、3つのテキストエリアに分けるのは諸事情でできないので、特定の文字を削除する関数か処理方法がありましたら、教えていただきたいです。
よろしくお願いします。

Aベストアンサー

str_replace
http://itbtech.itboost.co.jp/man/php_man/function.str-replace.html

<?php
$orig_telno = "03-xxxx-xxxx";

$telno = str_replace("-", "", $orig_telno);
echo $telno;

03xxxxxxxx

“PHP 文字列” あたりをキーワードに検索すれば
そんなに難しいものでもないような。

Qinclude先でのinclude元の変数について

度々お世話になっています。
include先でのinclude元の変数の扱いについて疑問に思ったので質問させて下さい。
include元ファイルtest.php include先ファイルinclude.phpとしてtest.php内の変数をinclude.phpに渡したいと考え以下のコードを書きました。

test.php
<?php
$test = "いけるかな?";
include "include.php";
?>

include.php
<?php
echo $test;
?>

結果、$testの値を表示する事が出来なかったのですが、$testの値を表示するためにはどのような記述方法があるのでしょうか?
また、このような動作を期待している理由としてはPHP部分とHTMLを分離させたいと考えており、ユーザ定義関数に変数を引数として渡して、出力処理をユーザ定義関数内で行うという事も考えたのですが、include先に値を渡す事が出来れば、非常にわかりやすく分離出来ると考えたからです。

他に、PHP部分とHTML部分をファイル分けするやり方などありましたら教えて頂けますとうれしいです。

度々お世話になっています。
include先でのinclude元の変数の扱いについて疑問に思ったので質問させて下さい。
include元ファイルtest.php include先ファイルinclude.phpとしてtest.php内の変数をinclude.phpに渡したいと考え以下のコードを書きました。

test.php
<?php
$test = "いけるかな?";
include "include.php";
?>

include.php
<?php
echo $test;
?>

結果、$testの値を表示する事が出来なかったのですが、$testの値を表示するためにはどのような記述方法があるのでしょうか?
また、...続きを読む

Aベストアンサー

>変数$aはインクルードされた b.inc スクリプトの中でも利用可能です。
<?php
$a = 1;
include 'b.inc';
?>

問題なさそうに見えますけど、記述ミスとかありませんか?
先頭に
ini_set('display_errors', 1);
error_reporting(E_ALL);
としたら何か表示されますか?

include は割と自由度が高いので失敗すると余計分かりにくくなりますが
ロジックと出力の分離としては基本的な設計と思います。
この構成に、View(HTML)用の値を格納する箱(オブジェクト等)を作り、
Viewはその箱の値を操作するようにする、とかやっていけば
いわゆるMVCモデリングに近づきます。

参考URL:http://jp2.php.net/include/

Qillegal string offset

php5.3では動いていたプログラムをphp 5.4 で動かしたらwarning illegal string offsetが出て困っています。以下のプログラムでwarningが出ないようにするにはどのようにコーディングすればよいのでしょうか?


$a = array('exists' => 'foo');
if ($a['exists']['non_existent']) {
print 1;
}
print 2;
exit;

Aベストアンサー

isset()を使えばいいと思います

Qsyntax error, unexpected '}' というエラーの対処法

PHPを習い始めて三日目になるのですがParse error: syntax error, unexpected '}' in C:\Program Files\Apache Group\Apache2\htdocs\****\****\game.php on line 33
というエラーがでるのですが33行目前後のどこをなおせばいいのでしょうか?
・game.php
<html>
<head>
<title>数当てゲーム</title>
</head>
<body>
<h1 style="background:#cccccc">数当てゲーム</h1>
<form method="POST" action="game.php">
1~100までの数を入力してください
<input type="text" name="answer" size="5" maxlength="3" />
<input type="sbumit" value=回答" />
</form>
<hr />
<?php
session_start();
if(is_null($_SESSION['answer'])){
mt_stand(microtime()*1000000);
$_SESSION['answer']=mt_rand(1,100);
$_SESSION['game_cnt']=0;
}
if($_POST['answer']!=""){
$_SESSION['game_cnt']++;
if($_session['answer']==$_POST['answer']){
print("おめでとうございます".
$_SESSION['game_cnt']."回で正解しました!");
session_destroy();
}else{
if($_SESSION['answer']>$_POST['answer']){
print("もう少し大きいです。");
}else
print("もう少し小さいです。");
}
}
}
?>
</body>
</html>
それとこの間違えたところをなおしたあとはいつもコンピュータを再起動しないと修正したところが適用されないのですがほかに方法はないですか?基本的な質問ですいません。

PHPを習い始めて三日目になるのですがParse error: syntax error, unexpected '}' in C:\Program Files\Apache Group\Apache2\htdocs\****\****\game.php on line 33
というエラーがでるのですが33行目前後のどこをなおせばいいのでしょうか?
・game.php
<html>
<head>
<title>数当てゲーム</title>
</head>
<body>
<h1 style="background:#cccccc">数当てゲーム</h1>
<form method="POST" action="game.php">
1~100までの数を入力してください
<input type="text" name="answer" size="5" max...続きを読む

Aベストアンサー

print("もう少し大きいです。");
}else
print("もう少し小さいです。");
のelseの後に{がないようですが、大丈夫でしょうか?

QリダイレクトでPOST

教えてください。

リダイレクトの際、POSTで次のページにデータを渡すことは可能でしょうか?

GETだと
header("Location: "a.php?no=".$no);
と、問題なくできるのですが、
できれば、パラメータを隠したいと思います。

以上ですが、よろしくお願いします。

Aベストアンサー

多分できないです。
それに、結局クライアント側に情報を送信しているのだから、POSTにしたところでパラメータを隠した事にはならないですし。
本当に隠すならサーバ側でセッション情報を引き継ぐような形にしないとダメでしょう。

AJAXのかたちにして、ページ遷移を見えなくするというのが手っ取り早いかも。

Q【PHP】ひとつ前のURLを常時得る方法は?

レンタルのPHP5使用者です。
自分が作ったサイト内リンクだけでの話なのですが、ひとつ前に見たページが何かによって処理を分岐させたいことがあります。
はじめは $_SERVER[HTTP_REFERER] を見ればOK!と考えていたのですが、リダイレクト遷移の場合は取得不可能なことがわかりました。
では一体どうすれば…
3時間ほど考えた結果は以下の通りです。

$_GET[ ] 使用 → 値を容易に改ざんされるので×。
$_POST[ ] 使用 → $_SERVER[HTTP_REFERER]同様リダイレクト時に無理。
SESSION 使用 → 直前のURLとは限らない(直前が、静的ページ/リダイレクト/ブックマーク の場合さらに古いURLを得てしまう)
Cookie  使用 → 同上

<条件>
*停止させている方も多いため、勝手ながら今回javascriptは使わないことを前提にさせてください。
*直前が静的ページ/ブックマーク等なら値なしでOKです。

一見簡単そうに見えた問題があまりに難しいので悩みました。「あきらめろ」という回答でもOKです。よろしくお願いいたします。

レンタルのPHP5使用者です。
自分が作ったサイト内リンクだけでの話なのですが、ひとつ前に見たページが何かによって処理を分岐させたいことがあります。
はじめは $_SERVER[HTTP_REFERER] を見ればOK!と考えていたのですが、リダイレクト遷移の場合は取得不可能なことがわかりました。
では一体どうすれば…
3時間ほど考えた結果は以下の通りです。

$_GET[ ] 使用 → 値を容易に改ざんされるので×。
$_POST[ ] 使用 → $_SERVER[HTTP_REFERER]同様リダイレクト時に無理。
SESSION 使用 → ...続きを読む

Aベストアンサー

##現実的には ある程度無効/偽装されてしまうことも考慮したうえで私がやるとしたら cookie を使うと思います。

静的なページ(普通の .htm など)でも固定された値のcookieなら発行できます
また 同じNameのCookieは上書きされますので

全てのページで 例えば view=ページ名 という内容のCookieを発行します
00.htm内でだと <HEAD>~~</HEAD>内に
<meta http-equiv="Set-Cookie" content="view=00.htm">
と記述すればOKです。

Cookieを受け取る設定のブラウザで 00.htm にアクセスした後
phpのページにアクセスして print_r($_SERVER); で確認してください
 (確認用のphpではCookieを取り合えず発行しないで置く事)
[HTTP_COOKIE] => view=00.htm と成っているはずです。

で、別のページ 例えば abc.htm に同様のmetaタグを記述してから
また確認用phpにアクセスすると
[HTTP_COOKIE] => view=abc.htm に変化している筈です。

##あまり現実的ではない方法でならば
お使いのレンタルサーバーではユーザー用のログfileは無いのですか?
例えば Xserverなら http://www.xserver.ne.jp/man_server_log.php
さくらインターネットなら http://faq.sakura.ad.jp/faq/1032/app/servlet/qadoc?000514
に説明が有ります。
CGI/PHPでそれらのユーザー用アクセスログを読み込むことが出来るなら
読み込み>$_SERVER["REMOTE_ADDR"]と比較>抽出 すれば不可能ではないかと思います。

が、そこまでするのもやはり現実的ではないでしょうね。

##現実的には ある程度無効/偽装されてしまうことも考慮したうえで私がやるとしたら cookie を使うと思います。

静的なページ(普通の .htm など)でも固定された値のcookieなら発行できます
また 同じNameのCookieは上書きされますので

全てのページで 例えば view=ページ名 という内容のCookieを発行します
00.htm内でだと <HEAD>~~</HEAD>内に
<meta http-equiv="Set-Cookie" content="view=00.htm">
と記述すればOKです。

Cookieを受け取る設定のブラウザで 00.htm にアクセスした後
phpのペー...続きを読む

QリンクでPOSTデータを送信することは可能ですか?

はじめまして。
Submitボタンを使用せずに<A>リンクでFORMのPOSTメソッドデータを送信することは可能でしょうか?
やはりURLにデータを付加して送信するしかないのでしょうか?
ご教授よろしくお願い致します。

Aベストアンサー

javascript を使えば可能です。大雑把にはこんな感じ。

・パラメータが全部 hidden な form を記述しておく(ブラウザでは表示されない)
・<a href> では、その form を submit するように javascript を記述する

試してないですけど、こんな感じ。

<form name=f method=POST action="http://どこか">
<input type=hidden name=x1 value=v1>
</form>

<a href="javascript:document.f.submit()">リンクから submit</a>

QPHPで呼び出し元の関数名の取得方法

PHPで呼び出し元の関数名(メソッド名)を取得する関数や定数はありますか?
function hoge() {
  fuga(__FUNCTION__);
}
とすれば、fugaに対して、'hoge'を渡すことができると思いますが、
毎回、__FUNCTION__ と書くのは面倒です。

現在、
function fuga() {
  $backtraces = debug_backtrace();
  $filename = $backtraces[1]['function'];
}
として、呼び出し元を摘出していますが、他にいい方法はありますか?

Aベストアンサー

しまった・・・もとの質問にバックトレースしていると書いてありましたね
失礼しました。

>debug_backtrace()で代用するのがお決まりのやり方なんでしょうか?

そもそもどういう運用を考えているかによるのでは?
呼び出し元の関数名が必要になることはそれほど多いとは思えません。
どんな特殊なことをやろうとしているのでしょうか?

Qシェルスクリプトからphpファイルを実行する方法

phpのカテゴリなのか迷いましたが、質問させて下さい。


実行するファイルは、a.php、b.php、c.phpの3ファイルになり、SQL文が記載されています。
この3ファイルを.sh(シェルスクリプト)から実行したいと考えております。
どなたか参考サイトまたは実装方法をご教示頂けないでしょうか。

よろしくお願いいたします。

Aベストアンサー

php a.php
php b.php
php c.php

こんな感じ?

参考URL:http://manual.xwd.jp/features.commandline.html

Q配列をPOSTで受けとる

タイトルのまんまですが
配列をformで送って
それをPOSTで受け取りたいのですが
うまくいきません

具体的に言うと
<?php
print"<form method=POST action=action.php>";

for($i=0; $i<$n; $i++){
   print"<input type=text name=foo[$i]>";
}
print"<input type=hidden name=n value=$n>";
print"<input type=submit value=go>";
print"<form>";
?>


///////////以下action.php//////////////////
<?php
$n = $_POST["n"];
for($j=0; $j<$n; $j++){
   $foo[$j] = $_POST["foo[$j]"];
   print"$foo[$j]";
}
?>


こんな感じのことがしたいのですが
うまくいきません
どうもPOSTされてないみたいでfoo[$j]はnullです
凡ミスな気がしなくもないんですが...プログラム初心者なんで↓↓
教えてください
よろしくお願いします

タイトルのまんまですが
配列をformで送って
それをPOSTで受け取りたいのですが
うまくいきません

具体的に言うと
<?php
print"<form method=POST action=action.php>";

for($i=0; $i<$n; $i++){
   print"<input type=text name=foo[$i]>";
}
print"<input type=hidden name=n value=$n>";
print"<input type=submit value=go>";
print"<form>";
?>


///////////以下action.php//////////////////
<?php
$n = $_POST["n"];
for($j=0; $j<$n; $j++){
   $foo[$j] = $_POST["foo[$j...続きを読む

Aベストアンサー

atsuGTさんこんにちは。


受け取り側は

$foo = $_POST["foo"];

とするだけで$fooに送信された配列が格納されます。


$_POST["foo[添え字]"] ではなく、
$_POST["foo"][添え字] となります。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング