AIと戦って、あなたの人生のリスク診断 >>

PHPに詳しい方が居られたら教えてください。

$file="http://www.sample.com/test.txt"
$fp=fopen($file,"r");
(処理)
close($fp);

というようにして、別のサイトにおいてあるファイルを
読み込みんで処理したい場合、

"test.txt"の内容を変えても、変更前の内容を読み込ん
でしまいます。

パソコンにキャッシュされているファイルにアクセスして
いると思うのですが、

"test.txt"の内容を変えたら、確実に変更後の内容を
読み込むようにする方法はありませんでしょうか?

どうぞよろしくお願いします。

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

A 回答 (4件)

file関数で出来るかはわかりませんが、


以下のような方法でだます方法もあります。

URLに ローカルタイムなど 常に変化する変数などを追加しておくと、
毎回 読み込んでくれるはずです。

$a = time();
$file="​http://www.sample.com/test.txt"​ . "?" . $a;
    • good
    • 0
この回答へのお礼

test.php
内で、
<? rewuire("test2.php"); ?>
として、test2.php内で、
-------------------------------
$a = time();
$file="http://www.sample.com/test.txt?".$a;
$fp=fopen($file,"r");
(処理)
close($fp);
---------------------------------
としてうまくいきました。

どうもありがとうございました!

ちなみに、test.phpのヘッダーに下記メタタグを
追加する方法ではなぜか、うまくいきませんでした。

<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Cache-Control" content="no-cache /">
<meta http-equiv="Expires" content="-1" />

上記のような構成の場合、ヘッダー情報を操作して、
キャッシュしなくする方法があれば、
引き続きご教授いただければ幸いです。

もう少しご回答を受け付けますので、
ご存知の方がが居られましたら
よろしくお願いいたします。

お礼日時:2010/01/26 19:02

>ちなみに、test.phpのヘッダーに下記メタタグを


>追加する方法ではなぜか、うまくいきませんでした。

httpのヘッダーを吐いてみてください
<?
header("Cache-Control: no-cache");
ほか・・・
?>
    • good
    • 0
この回答へのお礼

<?
header("Cache-Control: no-cache");
header("Pragma: no-cache");
?>

をtest.phpの最初で出力してみましたが、
やはりダメでした。

不思議です。

しかし、ご回答ありがとうございました!

お礼日時:2010/01/26 23:09

キャッシュを無効にするヘッダをたくさん吐いておくことです


Last-Modified
Expires
Pragma
Cache-Control
あたりで調べてみては?
    • good
    • 0
この回答へのお礼

なるほど。HTTPが備えるキャッシュの仕組みを利用を利用できるのですね。わかりました。どうもありがとうございました。

お礼日時:2010/01/26 11:27

ブラウザの設定次第だと思いますが…。

    • good
    • 0
この回答へのお礼

クライアントが多岐にわたり、ブラウザ毎の設定だと対応が難しいケースでの質問になります。しかし、ご回答ありがとうございました。

お礼日時:2010/01/26 11:29

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

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

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

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

QPHPのif文でその処理を途中で抜けるにはどうすればよいでしょうか?

PHPのif文でその処理を途中で抜けるにはどうすればよいでしょうか?
for文やwhile文ではbreakやcontinueなどが使えるようですが、if文にはないのでしょうか?

条件分岐がいくつかあって、その一つを途中で抜けて次の条件分岐へと移行したいのですが、
exitを使ってしまうと、次へ行かずに処理が中止されてしまいますし、
どのようにすればよいのか分からず困っています。何かよい方法はないでしょうか?

Aベストアンサー

例えば「goto 演算子」を使うとかですね。
http://php.net/manual/ja/control-structures.goto.php
(参考URL)

「if文を強制終了」というより「ステップの強制移動」と言った感じです。

ただ、あまりgoto演算子はお勧めできません。
複雑な処理になればなるほど、バグが発生した際にバグ元を発見し難くなります。

本来は細かく制御文を入れていけば、あまり必要ないと思いますが・・・

QCSVファイルの中で、「 , 」カンマを使いたい

「 , 」で区切られたCSVファイルの中で、「 , 」カンマを使いたいのですが、可能でしょうか?

具体的には「これは1,500円でした。」というように、CSVファイルに収められた文章内で出てくる半角の数字(お金)の区切りに使いたいのです。
全角では代用したくないのですが、CSVファイルでデータを受け渡しする際に、困っています。

例えば、特殊文字などで対応可能でしょうか?

Aベストアンサー

受け渡しに使うと言うことは相手方のアプリケーションのことも考えなければいけないのですが・・・とりあえず対応が簡単そうな方法を。

1.各セルを""で囲む。(もちろんデータにダブルクォートがある場合はカンマと同様に困ります。
2.カンマで区切らずにタブで区切る。(比較的使われない文字ですが、やはりデータ中にタブがあるとカンマと同様です)

難しいけれど完璧に対応するためには、データ中の区切り文字は特殊な文字列に変更し、受け取り側のアプリケーションではその特殊な文字列をデータ中の区切り文字として扱うという方法が使われます。
例えば、データ中のカンマは\,にするとか。

データ作成側、受け取り側でそれぞれどこまで対応できるのか分かるともっと簡単かつ具体的な方法を回答できるかも知れません。

QボタンをクリックでPHP文を実行

ボタンをクリックしたときのみPHP文を実行したいのですが・・・

<input type="button" onClink="<?php~?>">
でいけるかと思ったのですが、
ページ表示時に<?php~?>が実行されてしまい、うまくいきませんでした。

onClink="window.open(test.php)"
という方法以外でお願いします。

Aベストアンサー

AjaxはもともとJavaScriptの機能である非同期通信をつかったもので。Ajaxという言語があるわけではありません

Ajaxを利用するのであれば、JavaScriptのXMLHttpRequestを使って非同期通信できるような実装をしなくてはなりません
簡単にサンプルコードで書けるほど単純なものでもありません

一般的なサーバーサイドスクリプトの動作として、
ボタンを押す->サーバーへリクエストする->サーバーが処理する->クライアントに何かしらの結果を返す(出力する)です
つまり、PHP等のサーバーサイドスクリプトは、遷移させることが大前提で動作します

ですから、ボタンを押してその場でJavaScriptと同じようにPHPが動くなんてことはありえません。
ボタンを押したらサーバーにリクエストする という動作ならば可能です。

つまり
質問で言われているような
onClink="window.open(test.php)"

<form name="f1" action="test.php" method="post">
<input type="submit" name="submit" value="submit" />
</form>
等のような形になります

こういった一般的な方法だと いちいち画面が切り替わったようになってしまうのを嫌って Ajaxでコレと同じことを、画面を切り替えずに行っているだけに過ぎません

AjaxはもともとJavaScriptの機能である非同期通信をつかったもので。Ajaxという言語があるわけではありません

Ajaxを利用するのであれば、JavaScriptのXMLHttpRequestを使って非同期通信できるような実装をしなくてはなりません
簡単にサンプルコードで書けるほど単純なものでもありません

一般的なサーバーサイドスクリプトの動作として、
ボタンを押す->サーバーへリクエストする->サーバーが処理する->クライアントに何かしらの結果を返す(出力する)です
つまり、PHP等のサーバーサイドスクリプトは、...続きを読む

QPHPの関数実行

<?php
function disp(){
echo "hello world";
}
?>

<form>
<input type="text">
<input type="button" onclick="<?php disp() ?>">
</form>

といったソースを書いてみたのですが、ボタンを押してみるのですが作動しません。
どこか間違えているのでしょうか、それとも作動しないのでしょうか・・・。
当方としては、formのinputボタンを押したらPHPの関数が実行させるようにしたいのですが・・・。
どなたかご助言をお願いします。

Aベストアンサー

ウソつきました
出来ましたー

<?php

if($_REQUEST[submit] == TRUE){
function disp(){
echo "hello world";
}
}

else{
function disp(){
echo "";
}
}

?>

<form method="post" action="">
<input type="text" value="<?php disp(); ?>">
<input name="submit" type="submit"value="押せ">
</form>

Q別のドメインのファイルをrequire

phpで別のドメイン下のファイルをrequireしようとしていますがうまくいきません。

サーバーの環境は【Windows Server 2008 + IIS6.0 + php5.2】で、
php.iniのallow_url_includeはonに設定済みです。

ファイルA http://xxx.com/aaa.php
  <html>
  <head>
  </head>
  <body>
  <?php
  require_once("http://localhost/test.inc");
  echo $remember;
  ?>
  </body>
  </html>

ファイルB http://yyy.com/bbb.php
  <?php
  $remember=5577;
  ?>

仮にファイルAに「require_once("http://yyy.com/bbb.php");」と書いて実行すると、空白のページが出力され、ページのソースは
  <html>
  <head>
  </head>
  <body>
となっていました。
phpコードを実行するところで処理が中断されたようです。
空白ページのタイトルは「500-内部サーバーエラー」です。

同じサーバーの違うドメインで試しても、物理的に別のサーバーで試しても結果は同じでした。

ネットで調べた限りでは結構みんなすんなりとできたみたいなので、なおさら不思議で仕方がないです。

何が考えられるか、教えていただければと思います。

phpで別のドメイン下のファイルをrequireしようとしていますがうまくいきません。

サーバーの環境は【Windows Server 2008 + IIS6.0 + php5.2】で、
php.iniのallow_url_includeはonに設定済みです。

ファイルA http://xxx.com/aaa.php
  <html>
  <head>
  </head>
  <body>
  <?php
  require_once("http://localhost/test.inc");
  echo $remember;
  ?>
  </body>
  </html>

ファイルB http://yyy.com/bbb.php
  <?php
  $remember=5577;
  ?>

仮にファイルAに「require_o...続きを読む

Aベストアンサー

ANo.1でも書かれていますが、リモートファイルのincludeは、相手先のwebサーバが返す内容をincludeします。つまりbbb.phpは

<?php
print '<?php' . PHP_EOL;
print '$remember=5577;' . PHP_EOL;
print '?>' . PHP_EOL;
?>

と書いておかなければ、質問者さんが期待されている動作にはなりません。同一サーバ内でもファイル名をhttpから記述すれば同じことです(localhostの80番ポートへアクセスするというだけです)。

相手先サーバがファイル内容をそのまま返す拡張子(.txtなど)にするという方法もありますが、いずれにしても生のphpソースを外部公開するに等しいので、あまりお勧め出来る手法ではありません。キチンと(bbb.php側で)アクセス元のIPアドレスなどを制限してください。


(蛇足)
なお同一サーバに対してのリモートアクセスは無駄なトラフィックになるので避けるべきです。サーバパスで記述すれば済むことですので。

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ベストアンサー

「お(ご)~する(いたす)」は、自分側の動作をへりくだる謙譲語です。
「ご連絡致します」も「ご報告致します」も、正しいです。

文法上は参考URLをご覧ください。

参考URL:http://www.nihongokyoshi.co.jp/manbou_data/a5524170.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リダイレクトでPOST

教えてください。

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

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

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

Aベストアンサー

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

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

Qテーブル内の一部のみ線を変更する方法ってありますか?

いつもお世話になっております。どなたか教えて下さい。
無理なら無理で結構ですので不可能だと回答下さい。

あるテーブル内の一部のみ線を点線にしたり、線幅を細くする方法があれば教えてほしいのですが・・・可能でしょうか?

イメージはエクセルのように一部の罫線だけを変更したいのです。宜しく御願いします。

1つのテーブルで実現不能ならば、複数のテーブルを自由に結合する方法とかないでしょうか?

むちゃくちゃ言って申し訳ありませんが、どなたか救いの手をお願いします。

ちなみにブラウザはIE5.0か6.0だと思います。

Aベストアンサー

スタイルシートを用いることで可能です。
以下の例ではタグに直接style属性を埋め込んでいますが、
先にstyle指定をしておくと楽かもしれません。
<table border="1" bordercolor="black">
<tr>
<td style="border-top-style:dashed;border-left:3px solid red;border-bottom-width:2px;border-right-color:blue;">あああ</td>
</tr>
</table>
詳しくは、スタイルシート、CSSなどで調べてみてください。


人気Q&Aランキング