묻고답하기
page_full_width" class="col-xs-12" |cond="$__Context->page_full_width">
is_uploaded_file($upfile) 이 안되는 이유..소스도 붙입니다.
2003.05.11 01:29
잘~~되다가 갑자기 그럽니다. 대체 이유가 뭔지 모르겠내요.. img디렉토리 chmod 777로 만들고 *.dat 파일도
퍼미션 666으로 주고..그리고 파일 전부다 잘 올리고.해서 했는데..
파일을 올릴수없다고 나옵니다. 밑에 보시면
if(is_uploaded_file($upfile)) {
// 正しければファイルのコピーを行う
copy($upfile, $copy_name);
} else {
라고 is_uploaded_file함수로 파일이 잘 올려졌는지 안올려졌는지 확인하는 과정에서
FALSE값이 나와버립니다. 그래서 img디렉토리안에 파일이 안올려져있고요..
뭐가 문제죠!1?!?!?!?
<?php
$title = "画像アップロード機能付き掲示板";
$bgcolor = "white";
$background = "";
$data_file = "./imagebbs.dat";
$lib_file = "./imagebbs_lib.php";
$page_max = 10;
$data_max = 200;
$img_dir = "./img";
?>
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=EUC-JP">
<TITLE><?php echo $title ?></TITLE>
</HEAD>
<?php
// BODY の設定
if(empty($background)){
echo "<BODY bgcolor="" . $bgcolor ."">n";
} else {
echo "<BODY background="" . $background ."">n";
}
?>
<DIV align="center">
<H1><?php echo $title ?></H1>
<FORM method="post" action="<?php echo $PHP_SELF ?>" enctype="multipart/form-data">
<INPUT type="hidden" name="MAX_FILE_SIZE" value="100000">
<INPUT type="hidden" name="set" value="post">
<TABLE align="center" cellpadding="3">
<TR align="left">
<TD>名 前</TD>
<TD><INPUT type="text" name="name" size="30"><FONT size="-2">(必須)</FONT></TD>
</TR>
<TR align="left">
<TD>メール</TD>
<TD><INPUT type="text" name="email" size="30"></TD>
</TR>
<TR align="left">
<TD>URL</TD>
<TD><INPUT type="text" name="url" size="50"></TD>
</TR>
<TR align="left">
<TD>画像ファイル</TD>
<TD><INPUT type="file" name="upfile" size="40"></TD>
</TR>
<TR align="left">
<TD></TD>
<TD><FONT size="-2">
アップロード可能な画像ファイルは JPEG(.jpg)、GIF(.gif)、PNG(.png) です。</FONT></TD>
</TR>
<TR>
<TD colspan="2">
本文<FONT size="-2">(必須、入力通り記録しますので適当に改行を入れてください、タグは使用できません)</FONT><BR>
<TEXTAREA name="body" rows="5" cols="60">
</TEXTAREA>
</TD>
</TR>
<TR>
<TD align="center" colspan="2"><INPUT type="submit" value="投稿"></TD>
</TR>
</TABLE>
</FORM>
<BR>
<BR>
<TABLE width="600" cellpadding="3">
<TR>
<TD>
<FONT size="-1">
新規投稿順、1ページ <?php echo $page_max ?> 件表示、最大 <?php echo $data_max ?> 件保存
</FONT></TD>
</TR>
<TR>
<TD><HR></TD>
</TR>
<TR>
<TD>
<?php
// ライブラリファイル呼び出し
include($lib_file);
// データファイルの読み書き可否判定
if(!is_readable($data_file) || !is_writeable($data_file)){
echo "<FONT color="red">FILE ERROR</FONT>n";
echo "</TD></TR></TABLE>n";
echo "</DIV></BODY></HTML>n";
exit;
}
// メッセージ投稿処理
if ($set == "post"){
// 必須項目チェック(名前、本文)
if(empty($name) || empty($body)){
// エラー表示処理
echo "<TABLE width="100%"><TR><TD colspan="2"><FONT color="red">名前、もしくは本文が未入力です。<BR>n";
echo "ブラウザのバックボタンで戻り正しく入力して下さい。</FONT></TD></TR>n";
echo "<TR><TD colspan="2"><HR></TD></TR></TABLE>n";
} else {
// ファイルアップロード処理
if ($upfile != "none"){
// ファイルの拡張子を取得
$ext = substr($upfile_name,-3);
// 拡張子を小文字へ変換
$ext = strtolower($ext);
// 拡張子を判別 "jpg"・"gif"・"png"時のみアップロード
if($ext == "jpg" || $ext == "gif" || $ext == "png"){
// コピーするファイル名を生成
$copy_name = tempnam($img_dir,"img");
// 生成した空のファイルを削除
if (file_exists($copy_name)){
unlink($copy_name);
}
// 生成したファイル名に拡張子を添付
$copy_name .= "." . $ext;
// アップロードされたファイルが正しいものか判定
if(is_uploaded_file($upfile)) {
// 正しければファイルのコピーを行う
copy($upfile, $copy_name);
} else {
// 異常があればエラー表示
echo "<TABLE width="100%"><TR><TD colspan="2"><FONT color="red">ファイル $upfile_name はアップロードできません。<BR>n";
echo "ブラウザのバックボタンで戻り正しく入力して下さい。</FONT></TD></TR>n";
echo "<TR><TD colspan="2"><HR></TD></TR></TABLE>n";
}
} else {
// エラー表示処理
echo "<TABLE width="100%"><TR><TD colspan="2"><FONT color="red">ファイル $upfile_name はアップロードできません。<BR>n";
echo "アップロード可能なファイルはJPEG(.jpg)、GIF(.gif)、PNG(.png)です。<BR>n";
echo "ブラウザのバックボタンで戻り正しく入力して下さい。</FONT></TD></TR>n";
echo "<TR><TD colspan="2"><HR></TD></TR></TABLE>n";
}
}
// データファイルを1行ずつ配列として読み込み
$data_all = file($data_file);
// 投稿の各項目を整形
$name = text_replace($name);
$email = text_replace($email);
$url = text_replace($url);
$body = text_replace($body);
// 投稿日時を取得
$datetime = date("Y/m/d G:i:s");
// 投稿内容をデータとして整形
$data_new = "$datetime,$name,$email,$url,$body,$copy_name,$REMOTE_HOSTn";
// データファイルに書き込み
$fp = fopen($data_file,"w");
flock($fp,2);
// 投稿データをファイルへ書き込み
fwrite($fp,$data_new);
// 元々のデータをファイルへ書き込み
// 最大データ保存件数 $data_max 件まで
for($i = 0 ; $i < $data_max ; $i++){
fwrite($fp,$data_all[$i]);
}
flock($fp,3);
fclose($fp);
// 変数を開放
unset($data_all);
}
}
// データ表示処理
// $data_no が無ければ 0 をセット
if (empty($data_no)){
$data_no = 0;
}
// データファイルを1行ずつ配列として読み込み
$data_all = file($data_file);
// データを HTML 表示用に処理
// 1ページのデータ表示件数 $page_max まで
for($i = 0 ; $i < $page_max ; $i++ , $data_no++){
if(!empty($data_all[$data_no])){
// データを以下の配列として取得
// $data_array[0] - 日時
// $data_array[1] - 名前
// $data_array[2] - メールアドレス
// $data_array[3] - URL
// $data_array[4] - 本文
// $data_array[5] - 画像ファイル
// $data_array[6] - リモートホスト(使用しません)
$data_array = explode(",",$data_all[$data_no]);
// HTML 表示
echo "<TABLE width="100%" cellpadding="3">n";
echo "<TR>n";
echo "<TD width="30%"><FONT size="-1">" . $data_array[0] . "</FONT></TD>n";
echo "<TD width="70%"><FONT size="-1">メール : <A href="mailto:" . $data_array[2] ."">" . $data_array[2] . "</A></FONT></TD>n";
echo "</TR>n";
echo "<TR>n";
echo "<TD width="30%"><FONT size="+1">" . $data_array[1] . "</FONT></TD>n";
echo "<TD width="70%"><FONT size="-1">URL : <A href="" . $data_array[3] ."" target="_blank">" . $data_array[3] . "</A></FONT></TD>n" ;
echo "</TR>n";
echo "<TR>n";
echo "<TD colspan="2">" . $data_array[4] . "</TD>n";
echo "</TR>n";
// 画像ファイルの表示
if (!empty($data_array[5])){
echo "<TR>n";
echo "<TD colspan="2"><IMG src="" . $data_array[5] . ""></TD>n";
echo "</TR>n";
}
echo "<TR>n";
echo "<TD colspan="2"><HR></TD>n";
echo "</TR>n";
echo "</TABLE>n";
}
}
// 改ページ処理
if($data_no < count($data_all)){
echo "<TABLE width="100%">n";
echo "<TR align="right">n";
echo "<TD><FORM method="post" action="" . $PHP_SELF . "">n";
echo "<INPUT TYPE="hidden" name="data_no" value="" . $data_no . "">n";
echo "<INPUT TYPE="submit" value="次のページへ">n";
echo "</FORM>n";
echo "</TD>n";
echo "</TR>n";
echo "</TABLE>n";
}
?>
</TD>
</TR>
</TABLE>
</DIV>
</BODY>
</HTML>
퍼미션 666으로 주고..그리고 파일 전부다 잘 올리고.해서 했는데..
파일을 올릴수없다고 나옵니다. 밑에 보시면
if(is_uploaded_file($upfile)) {
// 正しければファイルのコピーを行う
copy($upfile, $copy_name);
} else {
라고 is_uploaded_file함수로 파일이 잘 올려졌는지 안올려졌는지 확인하는 과정에서
FALSE값이 나와버립니다. 그래서 img디렉토리안에 파일이 안올려져있고요..
뭐가 문제죠!1?!?!?!?
<?php
$title = "画像アップロード機能付き掲示板";
$bgcolor = "white";
$background = "";
$data_file = "./imagebbs.dat";
$lib_file = "./imagebbs_lib.php";
$page_max = 10;
$data_max = 200;
$img_dir = "./img";
?>
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=EUC-JP">
<TITLE><?php echo $title ?></TITLE>
</HEAD>
<?php
// BODY の設定
if(empty($background)){
echo "<BODY bgcolor="" . $bgcolor ."">n";
} else {
echo "<BODY background="" . $background ."">n";
}
?>
<DIV align="center">
<H1><?php echo $title ?></H1>
<FORM method="post" action="<?php echo $PHP_SELF ?>" enctype="multipart/form-data">
<INPUT type="hidden" name="MAX_FILE_SIZE" value="100000">
<INPUT type="hidden" name="set" value="post">
<TABLE align="center" cellpadding="3">
<TR align="left">
<TD>名 前</TD>
<TD><INPUT type="text" name="name" size="30"><FONT size="-2">(必須)</FONT></TD>
</TR>
<TR align="left">
<TD>メール</TD>
<TD><INPUT type="text" name="email" size="30"></TD>
</TR>
<TR align="left">
<TD>URL</TD>
<TD><INPUT type="text" name="url" size="50"></TD>
</TR>
<TR align="left">
<TD>画像ファイル</TD>
<TD><INPUT type="file" name="upfile" size="40"></TD>
</TR>
<TR align="left">
<TD></TD>
<TD><FONT size="-2">
アップロード可能な画像ファイルは JPEG(.jpg)、GIF(.gif)、PNG(.png) です。</FONT></TD>
</TR>
<TR>
<TD colspan="2">
本文<FONT size="-2">(必須、入力通り記録しますので適当に改行を入れてください、タグは使用できません)</FONT><BR>
<TEXTAREA name="body" rows="5" cols="60">
</TEXTAREA>
</TD>
</TR>
<TR>
<TD align="center" colspan="2"><INPUT type="submit" value="投稿"></TD>
</TR>
</TABLE>
</FORM>
<BR>
<BR>
<TABLE width="600" cellpadding="3">
<TR>
<TD>
<FONT size="-1">
新規投稿順、1ページ <?php echo $page_max ?> 件表示、最大 <?php echo $data_max ?> 件保存
</FONT></TD>
</TR>
<TR>
<TD><HR></TD>
</TR>
<TR>
<TD>
<?php
// ライブラリファイル呼び出し
include($lib_file);
// データファイルの読み書き可否判定
if(!is_readable($data_file) || !is_writeable($data_file)){
echo "<FONT color="red">FILE ERROR</FONT>n";
echo "</TD></TR></TABLE>n";
echo "</DIV></BODY></HTML>n";
exit;
}
// メッセージ投稿処理
if ($set == "post"){
// 必須項目チェック(名前、本文)
if(empty($name) || empty($body)){
// エラー表示処理
echo "<TABLE width="100%"><TR><TD colspan="2"><FONT color="red">名前、もしくは本文が未入力です。<BR>n";
echo "ブラウザのバックボタンで戻り正しく入力して下さい。</FONT></TD></TR>n";
echo "<TR><TD colspan="2"><HR></TD></TR></TABLE>n";
} else {
// ファイルアップロード処理
if ($upfile != "none"){
// ファイルの拡張子を取得
$ext = substr($upfile_name,-3);
// 拡張子を小文字へ変換
$ext = strtolower($ext);
// 拡張子を判別 "jpg"・"gif"・"png"時のみアップロード
if($ext == "jpg" || $ext == "gif" || $ext == "png"){
// コピーするファイル名を生成
$copy_name = tempnam($img_dir,"img");
// 生成した空のファイルを削除
if (file_exists($copy_name)){
unlink($copy_name);
}
// 生成したファイル名に拡張子を添付
$copy_name .= "." . $ext;
// アップロードされたファイルが正しいものか判定
if(is_uploaded_file($upfile)) {
// 正しければファイルのコピーを行う
copy($upfile, $copy_name);
} else {
// 異常があればエラー表示
echo "<TABLE width="100%"><TR><TD colspan="2"><FONT color="red">ファイル $upfile_name はアップロードできません。<BR>n";
echo "ブラウザのバックボタンで戻り正しく入力して下さい。</FONT></TD></TR>n";
echo "<TR><TD colspan="2"><HR></TD></TR></TABLE>n";
}
} else {
// エラー表示処理
echo "<TABLE width="100%"><TR><TD colspan="2"><FONT color="red">ファイル $upfile_name はアップロードできません。<BR>n";
echo "アップロード可能なファイルはJPEG(.jpg)、GIF(.gif)、PNG(.png)です。<BR>n";
echo "ブラウザのバックボタンで戻り正しく入力して下さい。</FONT></TD></TR>n";
echo "<TR><TD colspan="2"><HR></TD></TR></TABLE>n";
}
}
// データファイルを1行ずつ配列として読み込み
$data_all = file($data_file);
// 投稿の各項目を整形
$name = text_replace($name);
$email = text_replace($email);
$url = text_replace($url);
$body = text_replace($body);
// 投稿日時を取得
$datetime = date("Y/m/d G:i:s");
// 投稿内容をデータとして整形
$data_new = "$datetime,$name,$email,$url,$body,$copy_name,$REMOTE_HOSTn";
// データファイルに書き込み
$fp = fopen($data_file,"w");
flock($fp,2);
// 投稿データをファイルへ書き込み
fwrite($fp,$data_new);
// 元々のデータをファイルへ書き込み
// 最大データ保存件数 $data_max 件まで
for($i = 0 ; $i < $data_max ; $i++){
fwrite($fp,$data_all[$i]);
}
flock($fp,3);
fclose($fp);
// 変数を開放
unset($data_all);
}
}
// データ表示処理
// $data_no が無ければ 0 をセット
if (empty($data_no)){
$data_no = 0;
}
// データファイルを1行ずつ配列として読み込み
$data_all = file($data_file);
// データを HTML 表示用に処理
// 1ページのデータ表示件数 $page_max まで
for($i = 0 ; $i < $page_max ; $i++ , $data_no++){
if(!empty($data_all[$data_no])){
// データを以下の配列として取得
// $data_array[0] - 日時
// $data_array[1] - 名前
// $data_array[2] - メールアドレス
// $data_array[3] - URL
// $data_array[4] - 本文
// $data_array[5] - 画像ファイル
// $data_array[6] - リモートホスト(使用しません)
$data_array = explode(",",$data_all[$data_no]);
// HTML 表示
echo "<TABLE width="100%" cellpadding="3">n";
echo "<TR>n";
echo "<TD width="30%"><FONT size="-1">" . $data_array[0] . "</FONT></TD>n";
echo "<TD width="70%"><FONT size="-1">メール : <A href="mailto:" . $data_array[2] ."">" . $data_array[2] . "</A></FONT></TD>n";
echo "</TR>n";
echo "<TR>n";
echo "<TD width="30%"><FONT size="+1">" . $data_array[1] . "</FONT></TD>n";
echo "<TD width="70%"><FONT size="-1">URL : <A href="" . $data_array[3] ."" target="_blank">" . $data_array[3] . "</A></FONT></TD>n" ;
echo "</TR>n";
echo "<TR>n";
echo "<TD colspan="2">" . $data_array[4] . "</TD>n";
echo "</TR>n";
// 画像ファイルの表示
if (!empty($data_array[5])){
echo "<TR>n";
echo "<TD colspan="2"><IMG src="" . $data_array[5] . ""></TD>n";
echo "</TR>n";
}
echo "<TR>n";
echo "<TD colspan="2"><HR></TD>n";
echo "</TR>n";
echo "</TABLE>n";
}
}
// 改ページ処理
if($data_no < count($data_all)){
echo "<TABLE width="100%">n";
echo "<TR align="right">n";
echo "<TD><FORM method="post" action="" . $PHP_SELF . "">n";
echo "<INPUT TYPE="hidden" name="data_no" value="" . $data_no . "">n";
echo "<INPUT TYPE="submit" value="次のページへ">n";
echo "</FORM>n";
echo "</TD>n";
echo "</TR>n";
echo "</TABLE>n";
}
?>
</TD>
</TR>
</TABLE>
</DIV>
</BODY>
</HTML>
댓글 2
-
모라미
2003.05.11 04:30
-
특급잠수부
2003.05.12 11:53
copy보다는 move_uploaded_file을 권장합니다..
소스는 모라미님께서 올려주신것으로 수정하시면 되겠네요~
// 모라미
if(!is_dir("upfile/".$id)) {
mkdir("upfile/".$id,0777);
}
if(file_exists("upfile/$id/".$upfile1_name))
{
@mkdir("upfile/$id/".$time."_".$filerand,0777);
...
}
제가 알기론 mkdir은 실행되는 파일의 디렉토리 권한이 nobody가 7이어야만 실행되는걸로 알고있습니다~~ :)
그리고 회원아이디별로 시간_랜덤수 로 디렉토리 만들어 업로드 하는것같은 소스인데
그쪽부분 소스는 빠져있네요.
mkdir("upfile/".$id,0777);
}
if(file_exists("upfile/$id/".$upfile1_name))
{
@mkdir("upfile/$id/".$time."_".$filerand,0777);
if(!move_uploaded_file($upfile1,"upfile/$id/".$time."_".$filerand."/".$upfile1_name))
{
echo "<script language=JavaScript>alert ('죄송합니다.\\n\\n파일 업로드에 실패했습니다.'); history.go(-1);</script>";
exit;
}
$upfile1_name=$time."_".$filerand."/".$upfile1_name;
}
else
{
if(!move_uploaded_file($upfile1,"upfile/$id/".$upfile1_name))
{
echo "<script language=JavaScript>alert ('죄송합니다.\\n\\n파일 업로드에 실패했습니다.'); history.go(-1);</script>";
exit;
}
}
제가 예전에 썼던 업로드 부분입니다.
참고하세요. 영 부실하지만요...^^;