プロが教える店舗&オフィスのセキュリティ対策術

PHPとSmartyを使って、データベースにファイルをアップロードするプログラムを作ったのですが、実行すると
Warning: fread(): supplied argument is not a valid stream resource in line 147
Warning: fclose(): supplied argument is not a valid stream resource in line 148
というエラーが表示されます。
データ以外の情報はデータベースに格納されるのですが、アップロードしたファイルデータは格納されません。
何故なのか分からないので、教えていただければ幸いです。

ちなみに作成環境は以下のとおりです。
Apache/2.0.59 (Win32) PHP/5.2.3
MySQL クライアントのバージョン: 5.0.37

//*Smartyのプログラムソース*//
function screen_submit_report($param) {
global $smarty;

if (!get_report($param)) {
exit();
}

$re_name = $_POST["re_name"];
$seito_id = $_POST["SEITO_ID"];
$ka_id = $_POST["KA_ID"];

$fp = fopen($_FILES["uploadfile"]["tmp_name"], "rb");
$filedat = fread($fp, filesize($_FILES["uploadfile"]["tmp_name"]));
fclose($fp);//147行目
$filedat = addslashes($filedat);//148行目


$conn = db_conn();
$sql = "INSERT INTO report (seito_id, re_name, data, ka_id) values ('$seito_id', '$re_name', '$filedat', '$ka_id')";
$res = db_query($sql, $conn) or die("データ抽出エラー".mysql_error());

if ($res) {
$page["message_header"] = "追加が完了しました。";
}
else {
$page["message_header"] = "追加が失敗しました。" . mysql_error();
}

$page["name"] = "アップロード完了";
$page["act"] = "";
$page["button_value"] = "";
$smarty->assign("page", $page);
$smarty->assign("message", $message);

// テンプレートを表示
$smarty->display("submit_report.tpl");
}

//*関係するデータベース*//
mysql> describe report;
+--------+------------+----+---+-------+--------------+
|Field |Type |Null|Key|Default|Extra |
+--------+------------+----+---+-------+--------------+
|re_no |smallint(6) |NO |PRI|NULL |auto_increment|
|seito_id|mediumint(9)|YES | |NULL | |
|re_name |varchar(200)|YES | |NULL | |
|data |blob |YES | |NULL | |
|ka_id |smallint(6) |YES | |NULL | |
+--------+------------+----+---+-------+--------------+

A 回答 (1件)

fread() と fclose() が問題ということは fopen() が失敗しているのだと。


$_FILES を確認してみてください。

enctype="multipart/form-data" が抜けているとか?
    • good
    • 0
この回答へのお礼

回答ありがとうございます!
ずっとインターネットに接続できず、お礼が遅くなってしまってすみません。

ご指摘通り、multipartの問題でした。
PHPにとらわれて、フォームをちゃんと確認していませんでした。
この記述を加えることで、無事にアップロードできました。

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

お礼日時:2008/02/18 01:26

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