سؤال

أواجه بعض الصعوبة في الحصول على هذا البرنامج النصي للتنفيذ بشكل صحيح.

لا تقوم وظيفة Create_RSS بإنشاء ملف RSS عند استدعاء الدالة Remote updatestatus.

<?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);


    }  
}
?>
هل كانت مفيدة؟

المحلول 3

قد أكون مخطئًا ، لكنني أعتقد أن استدعاء وظيفة خاصة "create_rss" من وظيفة عن بُعد "updatestatus" لا يعيد أي شيء بسبب الأخطاء التي تم إنشاؤها بواسطة رمز كتابة الملف.

عندما قمت بفصل الكود إلى وظيفته عن بُعد ، عادت "غير محددة". لتنظيف الكود ، كتبت ببساطة عودة مشروطة. إليك مقتطف في نهاية الكود:

// 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;

نصائح أخرى

قد ترغب في إزالة // من السطور مع عبارات الطباعة: لقد علقت رسائل الخطأ الخاصة بك. إذا قمت بإزالتها ، قم بتشغيل البرنامج النصي مرة أخرى.

حدسي هو أنك تركت المُنشئ. وظيفتك:

function updateService() {
....
}

من المحتمل أن تقرأ:

function __construct() {
....
}

(في PHP ، يقوم المنشئ ليس احصل على نفس الاسم مثل فصله ، استخدم الاسم السحري __construct في حين أن)

(راجع للشغل - لم أقرأ كل الرموز الخاصة بك ، قد تحصل على المزيد من الردود/bettre إذا بذلت المزيد من الجهد في تنسيقه بحيث يكون من السهل القراءة)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top