[질문] php에서 파일업로드 방법?

nakrlove의 이미지

어느분이 답변주신 사이트를 보고 따라해보았는데..
사용권한이 없다고 하는데 왜이런지 모르겠내여.

/usr/local/apache2/htdocs/upload/phpAjEe3Q
Warning: move_uploaded_file(avup.exe): failed to open stream: Permission denied in /usr/local/apache2/htdocs/bbs/bbsControl.php on line 32

Warning: move_uploaded_file(): Unable to move '/usr/local/apache2/htdocs/upload/phpAjEe3Q' to 'avup.exe' in /usr/local/apache2/htdocs/bbs/bbsControl.php on line 32
/usr/local/apache2/htdocs/upload/phpw3ZnIR
Warning: move_uploaded_file(avseed.av): failed to open stream: Permission denied in /usr/local/apache2/htdocs/bbs/bbsControl.php on line 32

Warning: move_uploaded_file(): Unable to move '/usr/local/apache2/htdocs/upload/phpw3ZnIR' to 'avseed.av' in /usr/local/apache2/htdocs/bbs/bbsControl.php on line 32
/usr/local/apache2/htdocs/upload/phpQrm8AS
Warning: move_uploaded_file(avleaf.av): failed to open stream: Permission denied in /usr/local/apache2/htdocs/bbs/bbsControl.php on line 32

Warning: move_uploaded_file(): Unable to move '/usr/local/apache2/htdocs/upload/phpQrm8AS' to 'avleaf.av' in /usr/local/apache2/htdocs/bbs/bbsControl.php on line 32
/usr/local/apache2/htdocs/upload/phpQdS3tT
Warning: move_uploaded_file(avcure.dll): failed to open stream: Permission denied in /usr/local/apache2/htdocs/bbs/bbsControl.php on line 32

Warning: move_uploaded_file(): Unable to move '/usr/local/apache2/htdocs/upload/phpQdS3tT' to 'avcure.dll' in /usr/local/apache2/htdocs/bbs/bbsControl.php on line 32
/usr/local/apache2/htdocs/upload/phpeGvinU
Warning: move_uploaded_file(avbranch.av): failed to open stream: Permission denied in /usr/local/apache2/htdocs/bbs/bbsControl.php on line 32

Warning: move_uploaded_file(): Unable to move '/usr/local/apache2/htdocs/upload/phpeGvinU' to 'avbranch.av' in /usr/local/apache2/htdocs/bbs/bbsControl.php on line 32
Array

그리고 /usr/local/apache2/htdocs/upload의 디렉토리 권한은
chmod 777 upload로 모든권한을 주었습니다.

sodomau의 이미지

해당되는 것인지는 모르겠지만

Quote:

allan666 at NOSPAM dot gmail dot com
17-Dec-2004 03:35
On the Fedora Core 3 Linux distribution, you may get a "failed to open stream: Permission denied in ..." message. I fact changing the permission of the directory will not work (even if you set to 0777). It is because of the new SELinux kernel that allow apache user to write only in /tmp dir (I think). In order to solve the problem you must to disable the SELinux (at least for apache service) to allow the server to write in other directories. To do that, run the system-config-securitylevel app and disable the SE to apache service. Reboot your system and continue your work. Hope it helps!

이런게 있네요.

techneer의 이미지

윗 분이 인용한데로라면,
업로드 디렉토리를 /tmp 로 수정하시면 되겠네요.

php.ini 파일에서 다음처럼 수정하시면 됩니다.

upload_tmp_dir = /tmp/

php.ini 는 {php 설치 디렉토리}/lib 정도에 있을거예요.

nakrlove의 이미지

techneer wrote:
윗 분이 인용한데로라면,
업로드 디렉토리를 /tmp 로 수정하시면 되겠네요.

php.ini 파일에서 다음처럼 수정하시면 됩니다.

upload_tmp_dir = /tmp/

php.ini 는 {php 설치 디렉토리}/lib 정도에 있을거예요.

답변 감사드립니다.
그리고 위에 경로는 Error내용을 보시면 아시겠지만.

upload_tmp_dir = /usr/local/apache2/htdocs/upload
로 변경을 해준상태이구여.

php source는 아래와 같습니다.

<?
include "../common/dbconnect.inc";
$bbsTitle = $_POST['bbsTitle'];
$bbsContext = $_POST['bbsContext'];
$bbsWrite = $_POST['bbsWrite'];
$query = "insert into bbsBoard(bbsTitle,bbsContext,bbsWrite) "
." values('".$bbsTitle."','".$bbsContex."','".$bbsWrite."') ";

$uploaddir = '/uploads/';
$uploadfile = $uploaddir . $_FILES['userfile']['name'];

/*
echo "<pre>";
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
echo "파일이 존재하고, 성공적으로 업로드 되었습니다.";
echo "추가 디버깅 정보입니다:\n";
print_r($_FILES);
} else {
echo "파일 업로드 공격의 가능성이 있습니다! 디버깅 정보입니다:\n";
print_r($_FILES);
}
echo "</pre>";
*/

for ($i=0;$i<5;$i++) {

if ($_FILES["userfile"]['tmp_name'][$i]) {
echo $_FILES["userfile"]['tmp_name'][$i];

move_uploaded_file( $_FILES["userfile"]["tmp_name"][$i],$_FILES["userfile"]["name"][$i]);
}
}

echo $_FILES['userfile']['error'];
/*
if($connect)
{
//echo" DB OK";
$result = mysql_query($query,$connect) or die(mysql_error());
echo $result;
?-->
<script >
<!--
location.href = "http://localhost/bbs/board.php";
//-->
</script>
<--?
//Headers("Location: http://localhost/bbs/board.php");

}
*/
?>

Linux 를 배워봅시다.

techneer의 이미지

upload_tmp_dir = /usr/local/apache2/htdocs/upload

이 부분을

upload_tmp_dir = /tmp

이렇게 수정하면 잘 될 듯 합니다.

somasadu 님이 올리신 글을 보면,
아파치 user 는 /tmp 이외의 디렉토리에 쓰기 권한을 갖을 수 없다고 되어 있네요.

nakrlove의 이미지

techneer wrote:
upload_tmp_dir = /usr/local/apache2/htdocs/upload

이 부분을

upload_tmp_dir = /tmp

이렇게 수정하면 잘 될 듯 합니다.

somasadu 님이 올리신 글을 보면,
아파치 user 는 /tmp 이외의 디렉토리에 쓰기 권한을 갖을 수 없다고 되어 있네요.

벌써 해봤는데여 그리고 접근권한은 chmod 777 /tmp로 줘구여
똑같은디여 !

Linux 를 배워봅시다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.