ショボ短歌会

送り側(file_upload.php)
header("Location: bbs_test.php?photo=$upfilename");

受け側(bbs_test.php)
$photo = $_GET['photo'];
var_dump($photo);

を実行すると、var_dump()の値がNULLになってしまい、
$upfilenameが、GET渡しできません。
ちなみに、$photo = $_GET['photo']; var_dump($photo); の、この2文は、
function()disprecords{ } という関数の中にあるのですが、

なぜ、var_dump($photo); の値がNULLになってしまうのか、どうすれば、
$upfilnameの値を渡せるのか、ご指導いただきたいです。
よろしくお願いします。

A 回答 (7件)

他のやり方としては、cookie(セッション)を使うのが順当な所ではないでしょうか。


JavaScriptがわかるならJavaScriptでもできますが。

この回答への補足

すみません。大変恐縮ですが、JavaScriptを利用した方法を
ご指導いただけませんでしょうか><

セッション変数は、自分なりに試みたことがあるのですが、
確かNULLだったような記憶があります。できましたら、
cookieを利用した方法も、重ねてご指導いただければ
幸いです。

補足日時:2014/08/06 07:14
    • good
    • 0
この回答へのお礼

ご指導、どうもありがとうごじました。

お礼日時:2014/08/06 07:08

HTTPの規格(RFC)では、Locationヘッダ(302ステータスコード)でリダイレクトした場合、POSTで送信した内容をGETで送り直すことになっています。


Locationヘッダの中にクエリー文字列が含まれている場合、どのような扱いになるかは、RFCでは未定義なようです。

もしかすると、何も送られていないのかもしれませんし、最初のPOSTの内容が送られているかもしれませんし、"photo=$upfilename"が送られてるけれども受け取り方に不備があるのかもしれません。

ご参考まで。

この回答への補足

(1)昨日、「$_GET["upfilename"]が空文字列ではないでしょうか。」というお話でしたが、確かにその通りでして、talooさんのご指摘をふまえて、現在は下記のようにスクリプトを書くと、ログファイルには、期待したファイル名が入ってました。
----------------------------------------------------
送り側(file_upload.php)
<?php
$upload_dir = './files/';
$filename = $_FILES['sendfile']['name'];
$upfilename = $upload_dir.urlencode($filename);
file_put_contents('log.txt', $upfilename);
print "Location: bbs_test.php?photo=".$upfilename;
exit;
}
?>
------------------------------------------------
(受け側)bbs_test.php

function disp_records(){
$photo = $_GET['photo'];
var_dump($photo); ⇒NULL です。

}
どうすればdisp_records(){ }の$photo変数に添付画像ファイル名が入ってくるのでしょうか?
header(Location:)関数でのGET渡しにこだわっているわけではありませんので、なんらかの良い方法があれば、ご指導願えませんでしょうか。

ちなみにFTPサーバーへのアップロード部分は先ほども申しましたが、期待通りのファイルが事実FTPサーバーの、/files/直下にアップされております。あとはFTPサーバーにアップした画像を、disp_records(){}関数で表示させたいだけなのですが。

(2)また、これはGoogle検索したのですが、
画面遷移なしで、ファイルをアップロードする方法という
文面を見つけまして、こういうjavascriptが添えられていたのですが、このスクリプトが何をしているのか、わかりません。(今、javascript勉強中です。)このスクリプトをうまく活用する方法はあるのでしょうか?

<script type="text/javascript"><!--
var container = parent.document.getElementById('container');
image = parent.document.createElement('img');
image.src = './<?php print($filename);?>';
container.appendChild(image);
//--></script>
</body></html>

補足日時:2014/08/05 13:37
    • good
    • 0
この回答へのお礼

ご指導、どうもありがとうございました。

お礼日時:2014/08/06 07:04

送り側の$upfilenameには期待された値が入ってますか?




たとえば動的に値を生成するのではなく、直接記述してみたり、

送り側(file_upload.php)
header("Location: bbs_test.php?photo=photo.jpg");


ログファイルに書きだして確認してみるとどうでしょうか。

送り側(file_upload.php)
file_put_contents('log.txt', $upfilename);
header("Location: bbs_test.php?photo=$upfilename");


No.1補足のとおりなら

>前略
>$upfilename = $upload_dir.$filename;
>$upfilename=urlencode($_GET["upfilename"]);
>header("Location: bbs_test.php?photo=$upfilename");
>後略

$_GET["upfilename"]が空文字列ではないでしょうか。

投稿時のコピーミスでなければ。

この回答への補足

今、ログファイルに$upfilnameを書き出したところ、
./files/画像ファイル名(.jpg)
と、値がちゃんと入っておりました。
しかし、受け側(bbs_test.php)で、var_dump()したところ
NULLと表示されます。

header()関数でbbs_test.phpにクエリー文字列を
連れて、リダイレクトした場合、bbs_test.phpの
どの関数ブロック内からでも、$_GET['photo']で参照できるのでしょうか?そこらへんがちょっとよく理解できておりません。

補足日時:2014/08/05 00:54
    • good
    • 0
この回答へのお礼

ご指導、どうもありがとうございました。

お礼日時:2014/08/05 00:37

何か見落としている気がするのですが・・・


とりあえず

>if(move_uploaded_file($tmpname, $upfilename)){
>header("Location: bbs_test.php?photo=".$upfilename);
>exit;
>}

のところを

if(move_uploaded_file($tmpname, $upfilename) and !empty($upfilename)){
print "Location: bbs_test.php?photo=".$upfilename;
exit;
}

にしてみてください。

それでだめならbbs_test.php側で

print_r($_GET);
とかでチェックするとか・・・

この回答への補足

とりあえず、ご報告を。

file_upload.php側で、yambe.jpさまのように書いてみたのですが、やはり、NULLでした。
そして、bbs_test.php側でも、print_r($_GET); を試させていただいたのですが、Array ( ) NULL と表示されました。

何かを見落としてる可能性がありますので、yambe.jpさまの
書かれたソースをもう一回じっくり拝見いたします。

補足日時:2014/08/04 22:46
    • good
    • 0
この回答へのお礼

ご回答、どうもありがとうございます。
恐縮しております。

お礼日時:2014/08/04 22:18

思いなおしてurlencodeの位置を変えてみました


これでもダメでしょうか?
その場合phpのバージョンはなにをお使いでしょうか?

<?php
$upload_dir = './files/';
$filename = $_FILES['sendfile']['name'];
$upfilename = $upload_dir.urlencode($filename);
$tmpname=$_FILES['sendfile']['tmp_name'];
if(move_uploaded_file($tmpname, $upfilename)){
header("Location: bbs_test.php?photo=".$upfilename);
exit;
}
?>
<form enctype="multipart/form-data" method="post">
<input type="file" name="sendfile">
<input type="submit" value="go">
</form>

この回答への補足

やはりだめでした。NULLのままです。

PHPのバージョンは5.4 でした。

補足日時:2014/08/04 21:46
    • good
    • 0
この回答へのお礼

ご回答、どうもありがとうございました。

お礼日時:2014/08/04 21:26

細かいtypoとかですかね


以下テストしてみてください
もちろん「$upload_dir」で指定されるディレクトリに書き込み属性がないと
move_uploaded_file()は失敗しますね

<?php
$upload_dir = './files/';
$filename = $_FILES['sendfile']['name'];
$upfilename = $upload_dir.$filename;
$tmpname=$_FILES['sendfile']['tmp_name'];
if(move_uploaded_file($tmpname, $upfilename)){
header("Location: bbs_test.php?photo=".urlencode($upfilename));
exit;
}
?>
<form enctype="multipart/form-data" method="post">
<input type="file" name="sendfile">
<input type="submit" value="go">
</form>

この回答への補足

typo というのはわかりませんが、簡易BBSです。
※move_uploadは成功しており、./filesディレクトリに
アップされてはいるのですが、FTPサーバーにアップした
画像ファイルをbbs_test.php側で表示したいのですが、
できません。($photo の中身がNULLなので。)

送り側
header("Location: bbs_test.php?photo=".urlencode($upfilename));

を使わせていただいたのですが、やはり受け側で
$photo = $_GET['photo'];
var_dump($photo);

がNULLになります。どこか間違ってるのでしょうか?

補足日時:2014/08/04 19:15
    • good
    • 0
この回答へのお礼

お答えいただき、ありがとうございました。

お礼日時:2014/08/04 18:59

意味がよくわからない



file_upload.php?upfilename=hogehoge.jpg

で受けたものを
//file_upload.php
<?PHP
$upfilename=urlencode($_GET["upfilename"]);
header("Location: bbs_test.php?photo=$upfilename");
exit;
?>

のような感じで処理しているということ?
そうでなければ$upfilenameが渡らないから当然bbs_test.phpでは
nullしか返らないと思いますが

この回答への補足

file_upload.php(送り側)

<?php
$upload_dir = './files/';
$filename = $_FILES['sendfile']['name'];
var_dump($filename);
if(move_uploaded_file($_FILES['sendfile'] ['tmp_name'], $upload_dir.$filename)){
$upfilename = $upload_dir.$filename; $upfilename=urlencode($_GET["upfilename"]);
header("Location: bbs_test.php?photo=$upfilename");
exit;
}
?>

----------------------------------------------------
bbs_test.php(受け側)

function disp_records(){
  $photo = $_GET['photo'];
  var_dump($photo);


}

こういう感じで作ってるんですが、
これでも、まだ var_dump($photo) がNULLとなり、
$upfilename が渡っていませんでした。

どこがいけないのでしょうか?

補足日時:2014/08/04 18:15
    • good
    • 0

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