仕事と子育てを両立。働くママを、もっと笑顔に!>>

includeでおかしな動きがあり、困っています。

●ケース1
include ("check.php");

こちらは問題なく稼働します。

●ケース2

include ("http://xxx.com/check.php");

この書式だと動作しません。
ちなみに、ケース1の場合も、実行ファイル、includeするファイルとも、
http://xxx.com/ 配下に存在しています。

ケース2のように、URL表記で外部ファイルを取り込むようにするには
どうすればよろしいのでしょうか?

よろしくご指導お願いいたします。

A 回答 (3件)

>ケース1の場合は、phpinfo()の結果が表示されます。


>ケース2の場合には、何も表示されません。
>これは、正しい動きなのでしょうか?

正しい動きだと思います。
ケース1の時はinclude元(check.phpではない方)の処理の一環として phpinfo() が実行されますので、正しく出力されます。

ケース2の場合はinclude元に phpinfo() の実行結果がincludeされます。
(ブラウザで http://xxx.com/chekc.php へアクセした際のHTMLソースがincludeされます)
結果として、PHPのプログラムの中にHTMLが紛れ込むので正しく出力されない可能性が高いと思われます。(プログラム次第では正しく表示できる可能性もあるとは思いますが)
    • good
    • 0
この回答へのお礼

おかげさまで、現象とその理由がよくわかりました。

ありがとうございました。

お礼日時:2009/10/08 17:18

ケース2の時 xxx.com のhttpサーバは check.php のソースを返してきているのでしょうか?



もし check.php の処理結果を返してきていたらエラーになります。

この回答への補足

コメントありがとうございます。

includeしているファイルは以下の通りです。

●check.php
<?php
print phpinfo();
?>

ケース1の場合は、phpinfo()の結果が表示されます。
ケース2の場合には、何も表示されません。

これは、正しい動きなのでしょうか?

補足日時:2009/10/08 16:05
    • good
    • 0

マニュアルを見ましょう。



一言言わせてもらうと、実務でリモートのファイルをインクルードする必要があった試しがありませんが。

参考URL:http://jp.php.net/manual/ja/function.include.php

この回答への補足

コメントありがとうございます。

ご紹介いただいたマニュアル(URL)は既に拝見した上での質問でした。

該当URLの、『例3 HTTP経由のinclude()』 が関係している箇所とは思うのですが、私には力量不足で理解できませんでした。

補足説明をいただれば幸いです。

補足日時:2009/10/08 16:16
    • good
    • 0

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

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

Q複数のsubmitボタンで押されたボタンを取得する方法

form内の、submitボタンの値が拾えません。
1つだけsubmitボタンを設置すると値が拾えますが、
2つ以上submitボタンを設置すると拾えません。
仕様上、無理なのでしょうか?

<SCRIPT language="JavaScript">
function move_post(){
alert(document.frmMvPost.btn.value);
}
</SCRIPT>

<FORM name="frmMvPost" action="" method="post" onsubmit="return move_post()">
<INPUT type="submit" name="btn" value="テスト1">
<INPUT type="submit" name="btn" value="テスト2">
<INPUT type="submit" name="btn" value="テスト3">
</form>

Aベストアンサー

> alert(document.frmMvPost.btn.value);

btnというオブジェクトが複数あるため、btnは配列になってしまうため、
document.frmMvPost.btn.valueでは値が取れません。

回避策はonClickイベントにて値をHiddenへ格納すればOKです。

_____________________________________________________________

<SCRIPT language="JavaScript">
function move_post(){
alert(document.frmMvPost.onbtn.value);
}

function set_value(s_val)
{
document.frmMvPost.onbtn.value = s_val;
}

</SCRIPT>

<FORM name="frmMvPost" action="" method="post" onsubmit="return move_post()">
<INPUT type="submit" name="btn" value="テスト1" onClick="set_value('テスト1')">
<INPUT type="submit" name="btn" value="テスト2" onClick="set_value('テスト2')">
<INPUT type="submit" name="btn" value="テスト3" onClick="set_value('テスト3')">
<INPUT type="hidden" name="onbtn">
</form>

_____________________________________________________________


※テストしていないため動作は保証しません。問題ある場合にはお手数ですが何かしら手を加えてください。

> alert(document.frmMvPost.btn.value);

btnというオブジェクトが複数あるため、btnは配列になってしまうため、
document.frmMvPost.btn.valueでは値が取れません。

回避策はonClickイベントにて値をHiddenへ格納すればOKです。

_____________________________________________________________

<SCRIPT language="JavaScript">
function move_post(){
alert(document.frmMvPost.onbtn.value);
}

function set_value(s_val)
{
document.frmMvPost.onbtn.value = s_val;
}

</SCRIPT...続きを読む

QFORMで送信ボタンと戻るボタンを2つつけてそれぞれ遷移先を変えたい

  
以下のような画面を作りたいのですが↓

--------------------------------------------------------------------------------
● a.php (ユーザ情報入力画面) ※フォームに入力する画面
 
 <FORM method="POST" action="b.php">
  <INPUT type="text" name="mail">
  <INPUT type="submit" name="submit" value="確認">
 </FORM>

● b.php (ユーザ情報入力確認画面)※フォームに入力された値を表示する画面

 <FORM method="POST" action="c.php">
  <!-- ここには、フォームに入力された値を表示する -->
  <INPUT type="submit" name="submit" value="登録"> // c.php に遷移する
  <INPUT type="submit" name="submit" value="戻る"> // a.php に戻る
 </FORM>

● c.php (完了画面)
--------------------------------------------------------------------------------
b.php について質問なのですが、
b.phpにおいて、登録ボタンと戻るボタンを2つつけて、
それぞれ遷移先を変えたいのですが、どうすればいいんでしょうか・・・?
<FORM method="POST" action="c.php">と書いてしまうと、
戻るボタンを押しても戻らずに、c.phpに遷移してしまいますよね??
こういう場合ってJavaScriptとかで遷移先を指定するんですか・・?
もしそうでしたら、JavaScriptがよくわからないので
できればサンプルコード示していただけると助かります・・・。
  

  
以下のような画面を作りたいのですが↓

--------------------------------------------------------------------------------
● a.php (ユーザ情報入力画面) ※フォームに入力する画面
 
 <FORM method="POST" action="b.php">
  <INPUT type="text" name="mail">
  <INPUT type="submit" name="submit" value="確認">
 </FORM>

● b.php (ユーザ情報入力確認画面)※フォームに入力された値を表示する画面

 <FORM method="POST" action="c.php">
  <!-- ここには、フォームに入...続きを読む

Aベストアンサー

はじめまして。

<INPUT type="submit" name="submit" value="登録" onClick="form.action='c.php';return true">
<INPUT type="submit" name="submit" value="戻る" onClick="form.action='a.php';return true">

でいいと思います。(実際、このコードで使っています)
値を渡すには、FORM内にhiddenで、値を設定しておいて、methodをPOSTに設定しておけば、渡せます。

Qインクルードした部分が表示されない

サイドバーなど、すべてのページに共有する部分を外部ファイルにし、下の例のようにインクルードさせています。
↓(例)↓
<?
php require("http://○○○/sample.txt");
?>
拡張子は、htmlにしたかったので、PHPが利用できるように、.htaccessで設定しています。

これで普通のページはちゃんと表示され、問題はなかったのですが、
メールフォームやYomi-Search、Movable Typeの検索結果など、
CGI?(? % & などがつくURL)のページでは
インクルードさせている部分が真っ白になってしまいます。

ソースを見ると、
<?
php require("http://○○○/sample.txt")
?
>
のままになっていました。

? % & などがつくURLでは、インクルードできないということでしょうか?

解決法をご存知の方は、どうかご教授お願いいたします。

Aベストアンサー

include,requireというものを誤解されているようです。

includeは「コードを取得・解釈し、実行する」ためのものです。
外部のサーバの場合、許可されていない状態ですと「コードを取得」の時点でコケます。
普通は外部に許可させません。
画面が白いのはerrorが標準出力に出ない設定になっているからでしょう。

http://jp.php.net/manual/ja/function.include.php
セキュリティの警告の部分にありますが、
http経由の出力を単純に取得したいならreadfileなどを使いましょう。

QsmartyでMySQLから連想配列取り出しと表示

フォーム(POST)を使ってMySQLにデータを挿入し、
mysql_fetch_assocにて連想配列で取り出して、
whileで表示する場合、

========================================
$sql = "SELECT * hogehoge";
$result = mysql_query($sql);
while ($row = mysql_fetch_assoc($result)) {
echo $row["userid"];
echo $row["name"];
echo $row["sex"];
}
========================================
とすれば、MySQLから値を取りだして表示できます。

ただ、それをsmartyに置き換えて以下のようにすると、

========================================
{foreach from=$row item=hoge}
<tr>
<td>{$row.userid}</td>
<td>{$row.name}</td>
<td>{$row.sex}</td>
</tr>
{/foreach}
========================================

同じ値が$rowの値の数だけ返されてしまいます。

例だと、

1 太郎 男
2 花子 女
3 一郎 男
4 陽子 女
5 良子 女

と表示したいものが、

1 太郎 男
1 太郎 男
1 太郎 男

となってしまいます。
これを解決するには、どのようにすればよろしいのでしょうか?

フォーム(POST)を使ってMySQLにデータを挿入し、
mysql_fetch_assocにて連想配列で取り出して、
whileで表示する場合、

========================================
$sql = "SELECT * hogehoge";
$result = mysql_query($sql);
while ($row = mysql_fetch_assoc($result)) {
echo $row["userid"];
echo $row["name"];
echo $row["sex"];
}
========================================
とすれば、MySQLから値を取りだして表示できます。

ただ、それをsmartyに置き換えて以下のようにすると、

======...続きを読む

Aベストアンサー

No.1 の方の回答とほぼ同じ内容ですが

mysql_query の戻り値は
http://www.php.net/manual/ja/function.mysql-query.php
をみると resource となっていますよね。

なので、このリソースから検索結果がダラダラとストリーム的に取得できるわけです。

while の例では、このリソースから1行分取得した結果を、mysql_fetch_assocを使ってカラム名の配列にしているわけですよね。

Smarty の foreach の場合は $row が assign されているのかな?
そこら辺の記述が抜けているので、想像ですが、1件目しか表示されていないので

$smarty = new Smarty;
$row = mysql_fetch_assoc( $result );
$smarty->assign( 'row', $row );

$smarty->dislpay('なんかテンプレート');

のような記述にしていませんか?
これでは、行に関して順次処理していないので、Smarty 側の変数 row は1行目のカラムの配列しか入りませんよね?

なので、

$smarty = new Smarty;
while( $row = mysql_fetch_assoc( $result ) ) {
$smarty->append( 'row', $row );
}

$smarty->dislpay('なんかテンプレート');

のように append メソッドで追加してみてはどうでしょうか?

また、その場合はSmarty側の変数 row は
$row = array(
array( 'userid' => 1, 'name' => '太郎', 'sex' => '男' ),
array( 'userid' => 2, 'name' => '花子', 'sex' => '女' ),
:
);
のような構造になりますから、テンプレート側の記述は

{foreach from=$row item=hoge}
<tr>
<td>{$hoge.userid}</td>
<td>{$hoge.name}</td>
<td>{$hoge.sex}</td>
</tr>
{/foreach}

のような記述になります。
これは PHP でいうところの

$template = <<<EOL
<tr>
<td>%s</td>
<td>%s</td>
<td>%s</td>
</tr>

EOL;

foreach( $row as $hoge ) {
printf( $template, $hoge['userid'] ,$hoge['name'], $hoge['sex'] );
}

という解釈と同じような意味になります。

Smartyの場合は、どのような構造のオブジェクトを assign したかが重要なので、その辺の情報を記述した方がいいと思います。

No.1 の方の回答とほぼ同じ内容ですが

mysql_query の戻り値は
http://www.php.net/manual/ja/function.mysql-query.php
をみると resource となっていますよね。

なので、このリソースから検索結果がダラダラとストリーム的に取得できるわけです。

while の例では、このリソースから1行分取得した結果を、mysql_fetch_assocを使ってカラム名の配列にしているわけですよね。

Smarty の foreach の場合は $row が assign されているのかな?
そこら辺の記述が抜けているので、想像ですが、1件目しか表示され...続きを読む

QHTMLに埋め込んだPHPがうまく出力できない

PHP初心者です。
PHPファイルで、HTMLに埋め込んだPHPがうまく出力できません。
このファイルはもう一つのPHPファイルに読み込んで実行しています。
例えば、

<?php
echo "<p>こんにちは</p>";
?>

とすると、

こんにちは

"; ?>

と出力されてしまいます。
とても初歩的なところで詰まっているようでお恥ずかしいのですが、
原因が分からないので回答よろしくお願いします。

Aベストアンサー

おそらく

"; ?>

が基のファイルに余分に入っていると思われます。
include先のファイルと見比べて慎重にチェックしてみてください。

▼基のファイルは、
--------------------------
<?php
include 'test.php';
?>
--------------------------

▼include先のファイル( test.php )には
--------------------------
<?php
echo "<p>こんにちは</p>";
?>
--------------------------

の様になると思いますが、余計な「 "; ?> 」がフッターに入っていませんか?

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()を使えばいいと思います


人気Q&Aランキング