2010-01-03 3 views
0

이 스크립트를 제대로 실행하는 데 어려움이 있습니다.PHP 클래스로 RSS 파일 만들기

create_rss 함수는 updateStatus 원격 함수가 호출 될 때 RSS 파일을 만들지 않습니다.

<?php 

define("DB_HOST", "localhost"); 
define("DB_USER", "user"); 
define("DB_PASS", "pass"); 
define("DB_NAME", "db_test"); 


class updateService 
{ 

    function updateService() 
    { 
     $this->methodTable = array(
       "updateStatus" => array(
        "description" => "Retrieve RSS Info", 
         "arguments" => array("info"), 
         "access" => "remote" 
       ), 
       "create_rss" => array(
        "description" => "Create RSS", 
         "arguments" => array("id"), 
         "access" => "private"     
       ) 

    ); 

    //Connect to MySQL and select database 
    $link = mysql_connect(DB_HOST, DB_USER, DB_PASS); 
    $db = mysql_select_db(DB_NAME); 
    } 




/** 
* Update Status 
* @access remote 
*/ 

//$info contains the integer site id... 
function updateStatus($info) 
{ 
    create_rss(4); 
} 


function create_rss($id) 
{ 

$xml = '<?xml version="1.0" encoding="ISO-8859-1" ?><rss version="2.0">' . "\r\n"; 
$xml .= "\t\t" . "<channel>" . "\n\r"; 
$xml .= "\t\t\t" . "<title>Website Feed</title>" . "\n\r"; 
$xml .= "\t\t\t" . "<link>http://website.com</link>" . "\n\r"; 
$xml .= "\t\t\t" . "<description>Website Design</description>" . "\n\r"; 

switch ($id) 
{ 
    case 1: 
    $site_name = 'MyTestWebsite'; 
    $site_link = 'http://www.website.com'; 
    break; 

    case 2: 
    $site_name = 'TestWebsite'; 
    $link = 'http://website.com/?q=1&g=2'; 
    $site_link = htmlspecialchars($link); 
    break; 

    default: 
    break; 
} 


$sql = "SELECT * FROM table1 WHERE site_id = '$id' 
     LIMIT 30"; 

$result = mysql_query($sql); 

while($row = mysql_fetch_array($result)) 
{ 

    $timestamp = $row['timestamp']; 

    $xml .= "\t\t" . "<item>" . "\n\r"; 
    $xml .= "\t\t\t" . "<title>" . $site_name . " Activity</title>" . "\n\r"; 
    $xml .= "\t\t\t" . "<link>" . $site_link . "</link>" . "\n\r"; 
    $xml .= "\t\t\t" . '<description><![CDATA[<p><b>Timestamp: ' . $timestamp . '</b></p>]]>' . "\n\r"; 
    $xml .= "\t\t" . "</item>" . "\n\r"; 
} 
$xml .= "\t" . "</channel>" . "\n\r" . "</rss>"; 


    //create xml file 
    $rssfile_path = 'feed/' . $site_name . '.xml'; 
    chmod($rssfile_path, 0777); 

    $file = $_SERVER['DOCUMENT_ROOT'] . $rssfile_path; 
    if (!$file_handle = fopen($file, "w")) 
    { 
     //print "<br>Cannot open XML document:<br>"; 
    } 
    elseif (!fwrite($file_handle, $xml)) 
    { 
     //print "<br>Cannot write to XML document:<br>"; 
    } 
    else 
    { 
     //print "<br>Successfully created XML document:<br>"; 
    } 
    fclose($file_handle); 


    } 
} 
?> 
+0

어떻게 제대로 실행되지 않습니까? 나는이 코드를 직접 실행하는 것에는 관심이 없으며 이것을 머리 속에 파싱하기에 충분하지가 않다. –

+0

tl; dr - 코드를 디버깅하는 것이 더 좋습니다. – leepowers

+0

Tatu, 머리 속에서 이것을 파싱 할 수 없습니까? 그것은 하나의 기능입니다. :) 나는 PHP 지식을 가진 사람을 찾고 있습니다. 왜 이것이 클래스 외부에서 실행되는지 이해할 수 없지만 플래시를 통해 원격으로 호출하면 아무 일도 일어나지 않습니다. – rrrfusco

답변

0

내가 실수 일지 모르지만 원격 함수 "updateStatus"의 private 함수 "create_rss"를 호출하면 파일 작성 코드에서 생성 된 오류로 인해 아무 것도 반환하지 않는다고 생각합니다.

코드를 자체 원격 함수로 분리하면 "정의되지 않음"이 반환됩니다. 코드를 정리하기 위해 조건부로 true를 반환한다고 썼습니다. 다음은 코드 끝에있는 스 니펫입니다.

// SET RSS FILE VARIABLE 
//linux : doc root = dirname 
//windows : doc root = dirname/ 

$rss_feed_dir = $_SERVER['DOCUMENT_ROOT'] . '/feed/'; 

chmod($rss_feed_dir, 0777); 

$file = $rss_feed_dir . $site_name . '.xml'; 

$file_handle = fopen($file, "w"); 
fwrite($file_handle, $xml); 
fclose($file_handle); 

return true; 
0

내 직감은 생성자를 생략 한 것입니다. 귀하의 기능 : (PHP에, 생성자가 하지는 클래스와 같은 이름을 가지고 마법의 이름 __construct 대신 사용)

function __construct() { 
.... 
} 

을 :

function updateService() { 
.... 
} 

아마 읽어야 (BTW - 나는 모든 코드를 읽지 않았기 때문에 더 쉽게 읽을 수 있도록 좀 더 자세하게 입력하면 더/bettre 응답을 얻을 수 있습니다)

+2

PHP5에서 생성자 함수로 클래스 이름을 사용하는 것을 지원합니다. 그렇지 않으면 모든 PHP4 스크립트가 죽을 것이고 CodeIgniter는 결코 사용되지 않을 것입니다. – seanmonstar

+0

감사합니다 seanmonstar, 나는 이것을 인식하지 못했습니다. –

+0

@seanmonstar, PHP5는 훨씬 조직되고 깨끗해 보입니다. 더 이상 메소드 테이블이 없습니다. 누군가 AMFPHP를 정말로 업데이트해야합니다. – rrrfusco

1

인쇄 명령문이있는 행에서 //을 제거 할 수 있습니다. 오류 메시지를 주석 처리했습니다. 제거한 경우 스크립트를 다시 실행하십시오.

+0

나는이 경우에 유용하지 않기 때문에 오류 메시지를 삭제해야합니다. – rrrfusco