PHP2011. 5. 16. 15:38

http://www.google.co.kr/url?q=http://kldp.org/node/46239&sa=U&ei=WpCATdiTHo30vQPx-OzTBw&ved=0CB0QFjAIOBQ&usg=AFQjCNFVgKl9vy3w2lztZQz6UThM8tldDQ



계속 똑같은 질문을 도배를 합니다.

PHP 소스중에서
move_uploaded_file($_FILES["userfile"]["tmp_name"][$i],$_FILES["userfile"]["name"][$i]);

보면
$_FILES["userfile"]["tmp_name"] [$i]<-- 이부분은 /tmp 디렉토리에 임시저장 한다고 하내여.

그러면
$_FILES["userfile"]["name"][$i] <-- 이부분은 어느 폴드에 저장이 되는건가여..
이부분은 제가 따로 지정하는곳이 있는지 알고싶습니다.

계속 해결책을 못찾고 일주일을 넘게 짜증만 내고 있내여
쩝 ~~
별것도 안닌것 같은데 은근히 애를 먹이내여!



데이타가 업로드 되는 순간에는 /tmp 디렉토리에 저장 됩니다. 하지만 업로드가 완료되면 지정된 디렉토리 or 파일($_FILES["userfile"]["name"][$i]) 에 저장이 되겠죠.

echo 등으로 화면에 직접 $_FILES["userfile"]["name"][$i] 부분을 찍어 보시죠.



네 근데 제가 알고자 했던 것은
$_FILES["userfile"]["name"][$i] 지정된 디렉토리 or 파일이라는부분을 어디에서 설정을 해줘야 하는 질문이였습니다.
쩝 ~~
계속 삽질만 하내여 !!

Linux 를 배워봅시다.

Chapter 3. Handling file uploads

--중략---

$_FILES['userfile']['name']
The original name of the file on the client machine.

$_FILES['userfile']['type']
The mime type of the file, if the browser provided this information. An example would be "image/gif".

$_FILES['userfile']['size']
The size, in bytes, of the uploaded file.

$_FILES['userfile']['tmp_name']
The temporary filename of the file in which the uploaded file was stored on the server.

$_FILES['userfile']['error']
The error code associated with this file upload. ['error'] was added in PHP 4.2.0

--중략 --

Quote:

bool move_uploaded_file ( string filename, string destination )

$_FILES 안에는 POST로 넘어온 파일 정보가 있는대,
HTML에서 input type="file" tag의 name 속성이 첫번째 배열의 키가 되고, 두번째는 name, type, size, tmp_name, error 의 키가 있습니다. 각 키에 들어있는 값은
name은 클라이언트에서 보낸 파일의 이름,
type은 파일의 mime type,
size는 파일의 크기,
tmp_name은 파일이 넘어올때 PHP가 자동으로 받은후 /tmp 와 같은 미리 설정되어 있는 디렉토리로 임시 파일을 만들어 놓는대, 그 파일의 이름 입니다. ( /tmp/sd3w12412 같은식이겠죠..)
error는 파일이 넘어오다가 에러가 발생했을 경우 에러 코드가 들어갑니다.

move_uploaded_file은 첫번째 argument로 임시로 받아진 파일의 path를 받습니다. 두번째 argument로 이동할 곳의 path를 받습니다.

그래서 첫번째엔 tmp_name의 값이 가고,
두번째에 "옮기고 싶은 path"+"바꿀 파일 이름" 을 넣으면
"path/파일 이름"으로 이동 되겠죠.

이때 파일 이름을 _FILE의 name 값으로 주는게 보통인지라 위에서 처럼 되있겠죠.

이전에 질문하신 게시물들을 잠시 봤는대, 제가 보기엔
/tmp가 문제가 아니라 파일을 이동 시킬곳의 문제인거 같습니다.



PHP로 만든 RSS 2.0 리더 소스

소스는 PHP5로 작성했고, 내장된 SAX 파서를 이용했습니다.
SAX파서는 이벤트 기반 파서라서 구현도 간단하고, 속도도 빠릅니다.

RSS는 현재 가장 널리 쓰이는 RSS 2.0을 대상으로 했습니다.
이글루스와 테터도 RSS 2.0을 지원하고 있습니다.


rss_fetch.php

<?php

 include_once 'lib.php';

  //가져올 RSS 주소를 지정하면됩니다. 
$urls = array('http://sizuha.egloos.com/index.xml', 'http://kori2sal.innori.com/rss');

 foreach ($urls as $url):
     $handle = fopen($url, 'r');

     if ($handle):
          $document = '';

          while (!feof($handle))
               $document .= fgets($handle, 4096); 

          fclose($handle);

           //파서 생성
           $rss = new RSSParser;

           //파싱
          $rss->setRSS($document);
          rssParse($rss);

          $rss = NULL;
     endif;
endforeach;

?> 



lib.php

<?php

 function rssParse($rss_obj)
 {  
      //내장 XML 파서 생성
     $xml_parser = xml_parser_create('UTF-8');
  
     xml_set_object($xml_parser, $rss_obj);   
     xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, FALSE);

      //XML 파서에 이벤트 핸들러를 할당
     xml_set_element_handler($xml_parser, "startElement", "endElement");
     xml_set_character_data_handler($xml_parser, "characterData");

      //XML 파싱
     xml_parse($xml_parser, $rss_obj->getRSS());
     xml_parser_free($xml_parser);
 }


 class RSSParser
{
     private $rss_doc;
 
     private $current_element;
     private $in_item = FALSE;
     private $in_description = FALSE;
     private $title;
     private $date;
     private $link;
     private $category;
     private $content;

 
     function setRSS($rss_text)
     {
          $this->rss_doc = $rss_text;
     }
 
     function getRSS()
     {
          return $this->rss_doc;
     }

     //태그가 시작하는 부분에서 처리할 내용  
     function startElement($parser, $element, $attrs)
     {
          if ($this->in_description) return;    

          $this->current_element = strtoupper($element);
  
          switch ($this->current_element):
               case 'ITEM' :
                    $this->in_item = TRUE;
                    break;

               case 'DEscRIPTION' :
                    if ($this->in_item) {
                         $this->in_description = TRUE;
                         $this->content = '';
                    }
                    break;
    
               default: 
                    break;     
          endswitch;
     }
 
     function endElement($parser, $element)
     {
          $el = strtoupper($element);

          if ($this->in_description and 'DEscRIPTION' != $el) return;

          switch (strtoupper($el)):
               case 'ITEM' :
                    $this->in_item = FALSE;
                    $this->printItem();        // 저장된 포스트를 출력하거나 DB로 자장하면 됨.
                     break;

               case 'DEscRIPTION' :
                    if ($this->in_item) {
                         $this->in_description = FALSE;
                    } 
                    break;

               default: 
                    break;     
          endswitch;

          $this->current_element = '';
     }
 
     function characterData($parser, $data)
     {   
          if ('' == trim($data)) return; 
 
          if ($this->in_item):
   
           switch ($this->current_element):
                case 'TITLE' :
                     $this->title = $data;
                     break;

                case 'DEscRIPTION' :
                     $this->content .= $data; //반드시 .= 연산자를 써야함!
                      break;

                case 'CATEGORY' :
                     $this->category = $data;     
                     break;

                case 'PUBDATE' :
                     $this->date = $data;
                     break;

                case 'LINK' :
                     $this->link = $data;
                     break;
           endswitch;   
    
          endif;
     }      

      //여기서는 바로 출력을 하지만, DB에 저장하는 방식으로 구현할 수도 있습니다.
      private function printItem()
     {
          echo "<P><STRONG>";
          echo $this->title;
          echo "</STRONG>";
   
          echo "  (";
          echo $this->date.")</P>";
   
          echo $this->content;
          echo "<BR>";
          echo $this->category." | ";
          echo $this->link;
  
          echo "<br><br>";
     }
   
 }//end of class

?>



RSS 리더를 만들 때의 주의사항

1. RSS는 UTF-8로 인코딩되어 있습니다. 따라서 RSS의 데이터를 변환없이 그냥 웹페이지에 뿌리려면, 웹페이지 역시 UTF-8로 인코딩되어 있어야 합니다. 저는 모든 작업 파일들(PHP, HTML, TXT)을 전부 UTF-8로 통일했습니다.

2. RSS의 PubDate 태그는 게시물의 날짜를 담고 있는 태그이지만, 문제는 이것이 GMT 시간입니다. 웹에 게시할때는 현지(한국) 시간으로 변환해야 할 것입니다.

 

 

 

출처: http://webcache.googleusercontent.com/search?q=cache:_9o7jV1zW0gJ:sir.co.kr/bbs/board.php%3Fbo_table%3Dtip_php%26wr_id%3D1544%26page%3D2+site:sir.co.kr+rss.lib.php&cd=4&hl=ko&ct=clnk




출처 : http://blog.naver.com/PostView.nhn?blogId=q1q3q5&logNo=10105167130
http://blog.daum.net/_blog/hdn/ArticleContentsView.do?blogid=0C1U1&articleno=17185767&looping=0&longOpen=
Posted by 아이맥스