Jump to content
  • Announcements

    • boen_robot

      Guidelines and Netiquette   03/28/2017

      Posting Problems:   Having problems posting your topic? Read through this: To join, you agree to our terms and conditions and fill out and submit a registration form. An activation email will be sent to your email adress, so you'll need to verify your account. After that the account has to be validated by one of the moderators. This will mean that it can take up to a day to be activated. A couple of things to remember to ensure approval: Don't use an email address in one of those $2 four character .com domains eg. xyds.com. These will be deleted and the domain added to the banned list. Don't use an email address that is within a domain with a bad reputation for spam. A Google search is run on every email address and email domain. Don't sign up with an email address that doesn't exist, doesn't work or requires the sender to answer a quiz before their email can get to you. Put your country and or state and city in the signup form. Blank forms will go to the botton of the "to do" list. And make sure that your email address and your country match, saying you're from Alabama and using a .ru email address is not going to get you activated. After a membership is activated the first few posts will be monitored. Posting spam or unapproved topics described in the agreement results in an immediate ban. The email provider and the IP addresses associated with the account will be banned and all posts will be deleted. These strict measures have been deemed necessary to hinder spam. Sorry for any inconvenience this causes, but it's not liable to change. If, after reading this, you still can't post and don't understand why, contact one of the Moderators listed here.   Topic Guidelines   Including the following information can expedite an accurate response from board members: Must be a Specific Problem or Question related to web design and development Include Code in Question (wrap with   for small blocks of code and for longer blocks   ) Include Code Author Include Extra Notes/Modifications/Attempts Include web link to page/file when possible Content Guidelines   You may not post, upload, link to, or email any Content that contains, promotes, gives instruction about, or provides prohibited Content. Prohibited Content includes any Content that breaks any local, state, county, national or international law. Prohibited Content also includes: No direct or indirect advertising or websites, forums, products, services No hijacking of posts (do not post your question in someone elses) Content that infringes upon any rights [ex. MP3s and ROMs] (including, but not limited to, copyrights and trademarks) Abusive, threatening, defamatory, racist, or obscene Viruses or any other harmful computer software False Information or libel Spam, chain letters, or Pyramid schemes Gambling or Illicit drugs Terrorism Hacking or cheating for internet/online games Warez, Roms, CD-Keys, Cracks, Passwords, or Serial Numbers Pornography, nudity, or sexual material of any kind Excessive profanity Invasive of privacy or impersonation of any person/entity Hacking materials or information Posting Tips   There are more BBcodes than there are buttons for on the reply menu. To get the full list, click "BB Code Help" underneath the clickable smilie face menu. Use   for small snippets of code Use   for lengthy snippets of code Use   if your snippet is HTML (optional) Use   if your snippet is SQL (optional) Rules of Conduct   Be nice. There's no need for calling someone stupid if they ask an 'easy' question. Keep your avatars and signatures absolutely child friendly. We have a younger audience on this forum. Keep your language appropriate for the same reason above. Do not PM moderators for help on the forum. Post on the topic, or create a new one.   Spam:   Recently, as you have all without doubt noticed, we have had lots of spam and advertisement on the forum. Therefore, we'd like to alert you as to what to do when you have found any of the aforementioned annoying messages: it. Immediately. Give a clear reason, please, if the advertising is not evident. DO NOT POST! Report, let the post stay as is, and we will get to it, meanwhile if you continue to post as normal in the other threads, it won't be on the top so long. Refrain from PMing the member. This won't help at all, as they are most likely spambots anyway. Thank you.       Images in signatures:   After thinking of users on dial-up, we have decided to enforce the following rules regarding signatures. Please pay heed to them. Respecting these rules is respecting the members on this forum with dial-up. Signature rules: No animated images AT ALL. No matter the amount of animation. Maximum image widthxheight: 300x150 Maximum image (file) size: 15kb Use calm colors. Do not use highly contrasting images in your signature, as this can get really annoying when seeing several posts from one member in the same thread. The same prohibited content goes for images as for posts. Lastly, use common sense. No lengthy signatures please. Save us some scrolling. Thank you.       Links in signatures:   Please understand that w3schools.com only exists because of voluntary work and is barely supported by the advertising littered throughout the tutorials and the forum. So, please, stop advertising other sites. DO not post links that drive traffic away from the w3schools domain - especially to a site that offers similar if not identical information. Please help support the site by keeping individuals on it. Thank you. Here are some guidelines as to what you can put in your signature: w3schools links --> allowed w3.org links --> allowed browser links --> allowed html editor links --> allowed personal sites --> allowed tutorial sites competing with w3schools --> NOT allowed sites completely irrelevant to webprogramming and this forum --> NOT allowed   Thanks for understanding, and for taking the time to read this. ~W3Schools Modstaff~
Sign in to follow this  
iwato

Missing XML Formatting

Recommended Posts

BACKGROUND:  I have recently created the content of an automatically generated podcast using a PHP Class that I found on a webpage found https://www.phpclasses.org/package/2957-PHP-Generate-RSS-2-0-feeds.html.  Unfortunately, when I attempt to display the generated feed all that is displayed are the values of the input variables, or alternatively nothing (see (below)depending on the method of display. In short, the desired formatting -- the reason that I downloaded the PHP Class -- is missing.

The page that creates the above result is a text file with a .php extension and a header( ) function.

$rss_feed->encoding = 'UTF-8';
$rss_feed->version = '2.0';
$rss_feed->createFeed($rss_channel);
header('Content-Type: text/xml;

$rss_channel =  the object that combines the formatting with the values of the input variables and their respective objects.

The Class is relatively straight-forward and easily customized, but for two lines that I do not understand and could well be preventing the display of the XML code, if not properly configured.  Interestingly, whether they are commented out or left in tact, they have no affect on what is displayed.

$selfUrl = (!isset($_SERVER['HTTPS']) || $_SERVER['HTTPS'] != 'on' ? 'http://' : 'https://');
$selfUrl .= $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'];

When I run the .php file the following message appears at the top of the completed page.  Still nothing below the message appears.  Also, I do not know the source of this message. it does not appear to come from the .php document.

Quote

This XML file does not appear to have any style information associated with it. The document tree is shown below.

Now, I have not constructed a style-sheet for the Feed page, but I hardly see how this could stop the feed from appearingl

Please advise.

 

Share this post


Link to post
Share on other sites

The browser shows that message because the content type is text/xml, although you have a syntax error on that header line.  I would view the source code of the page and figure out what is actually getting sent, or just comment out that header so the browser displays it normally, and check what is being sent.  Make sure you also have all error messages enabled and displayed or logged.

Share this post


Link to post
Share on other sites

OK.  This is the code.  I am exhausted.

<?php
	ini_set('display_errors', 1);
	ini_set('display_startup_errors', 1);
	error_reporting(E_ALL);
	$host = "...";
	$user = "...";
	$pwd = "...";
	$mysqli_obj = new mysqli($host, $user, $pwd);
	if (mysqli_connect_errno()) {
		printf("Connect failed: %s\n", mysqli_connect_error());
		exit();
	}
	$mysqli_obj->set_charset("utf8");
	$db = "thege0_grammarcaptive";
	$mysqli_obj->select_db($db);
	$tbl_name = 'rss2_podcast_channel';
	$sql_1 = "SELECT * FROM ". $tbl_name . " ORDER BY channel_pubdate DESC LIMIT 1";
	$chan_arr = array(); 
	$result_obj = $mysqli_obj->query($sql_1);
	while($row = $result_obj->fetch_assoc()) {
		foreach($row as $key => $value) {
			$chan_arr[$key] = $value;
		}
	}
	$tbl_name = 'rss2_podcast_item';
	$sql_1 = "SELECT * FROM ". $tbl_name . " ORDER BY item_pubdate DESC LIMIT 5";
	$item_arr = array(); 
	$result_obj = $mysqli_obj->query($sql_1);
	while($row = $result_obj->fetch_assoc()) {
		foreach($row as $key => $value) {
			$item_arr[$key] = $value;
		}
		$items[] = $item_arr;
	}
	$tbl_name = 'rss2_podcast_itunes';
	$sql_1 = "SELECT * FROM ". $tbl_name . " ORDER BY publish_date_itunes DESC LIMIT 5";
	$itunes_arr = array(); 
	$result_obj = $mysqli_obj->query($sql_1);
	while($row = $result_obj->fetch_assoc()) {
		foreach($row as $key => $value) {
			$itunes_arr[$key] = $value;
		}
		$itunes[] = $itunes_arr;
	}
	include('/Users/kiusau/Sites/reflexive/php_practice/libraries/rssgen2.0/rss_generator.inc.php');
	$rss_feed = new rssGenerator_rss();
	$atomLinkHref = '../../../../grammarcaptive.com/feed/gc_podcasts.xml';
$chan_categories = array(0 => array('domain' => '', 'name' => $chan_arr['channel_category1']),1 => array('domain' => '', 'name' => $chan_arr['channel_category2']),2 => array('domain' => '', 'name' => $chan_arr['channel_category3'])); 
	$i = 0;
	$length = count($items);
	while ($i < $length) {
		foreach ($items[$i] as $key => $value) {
			if ($key == 'item_category1') {
				$item_categories[$i][$key] = array('domain'=>'','name'=>$value);
			}
			if ($key == 'item_category2') {
				$item_categories[$i][$key] = array('domain'=>'','name'=>$value);
			}
			if ($key == 'item_category3') {
				$item_categories[$i][$key] = array('domain'=>'','name'=>$value);
			}
		}
		$i++;
	}
	$i = 0;
	$length = count($itunes);
	while ($i < $length) {
		foreach ($itunes[$i] as $key => $value) {
			if ($key == 'itunes_category1') {
				$itunes_categories[$i][$key] = array('domain'=>'','name'=>$value);
			}
			if ($key == 'itunes_category2') {
				$itunes_categories[$i][$key] = array('domain'=>'','name'=>$value);
			}
			if ($key == 'itunes_category3') {
				$itunes_categories[$i][$key] = array('domain'=>'','name'=>$value);
			}
		}
		$i++;
	}
	$i = 0;
	$length = count($items);
	while ($i < $length) {
		$rss_item = new rssGenerator_item();
		foreach ($items[$i] as $key => $value) {
			$rss_item->title = $items[$i]['item_title'];
			$rss_item->description = $items[$i]['item_description'];
			$rss_item->link = $items[$i]['item_link'];
			$rss_item->pubDate = $items[$i]['item_pubdate'];
			$rss_item->author = $items[$i]['item_author'];
			$rss_item->comments = $items[$i]['item_comments'];
			$rss_item->guid = $items[$i]['item_guid'];
			$rss_item->guid_isPermaLink = 'false';
			$rss_item->source = 'Grammar Captive';
			$rss_item->source_url = $items[$i]['item_source'];
			$rss_item->enclosure_url = $items[$i]['item_enclurl'];
			$rss_item->enclosure_length = $items[$i]['item_encllength'];
			$rss_item->enclosure_type = $items[$i]['item_encltype'];
			$rss_item->categories = $item_categories[$i];
		}
		$rss_items[] = $rss_item;
		$i++;
	}
	$rss_image = new rssGenerator_image();
	$rss_image->title = $chan_arr['channel_img_title'];
	$rss_image->url = $chan_arr['channel_img_url']; 
	$rss_image->link = $chan_arr['channel_img_link']; 
	$rss_image->width = $chan_arr['channel_img_width']; 
	$rss_image->height = $chan_arr['channel_img_height']; 
	$rss_image->description = $chan_arr['channel_img_description'];
	$rss_channel = new rssGenerator_channel();
	$rss_channel->atomLinkHref = $atomLinkHref;
	$rss_channel->title = $chan_arr['channel_title'];
	$rss_channel->link = $chan_arr['channel_link'];
	$rss_channel->description = $rss_feed->cData($chan_arr['channel_description']);
	$rss_channel->language = $chan_arr['channel_language'];
	$rss_channel->copyright = $chan_arr['channel_copyright'];
	$rss_channel->webMaster = $chan_arr['channel_link'];
	$rss_channel->pubDate = $chan_arr['channel_pubdate'];
	$rss_channel->lastBuildDate = $chan_arr['channel_lastbuilddate'];
	$rss_channel->categories = $chan_categories;
	$rss_channel->image = $rss_image;
	$rss_channel->items = $rss_items;
	$rss_feed->encoding = 'UTF-8';
	$rss_feed->version = '2.0';
	$rss_feed->createFeed($rss_channel);
//	header('Location: gc_podcasts.xml');
	$result_obj->free();
	$mysqli_obj->close();
?>

Now, mind you.  This identical code works in an HTML file with all kinds of HTML mark-up, but when set aside unto its own without the mark-up it fails resulting in the PHP white sheet.

Share this post


Link to post
Share on other sites

OK.  i have discovered that the include statement is failing.  Still, I do not understand the statement

$selfUrl = (!isset($_SERVER['HTTPS']) || $_SERVER['HTTPS'] != 'on' ? 'http://' : 'https://');
$selfUrl .= $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'];

 

Share this post


Link to post
Share on other sites

And, where is the URL that those lines build?

 

Share this post


Link to post
Share on other sites

If you're asking about where it is in the code, I don't know, it's not in the code you posted.  If you're asking about which URL it is, it's the URL of the current PHP script.  Just print it out if you want to see what it's set to.

Share this post


Link to post
Share on other sites

Unfortunately, there is nothing to print.

Catchable fatal error: Object of class rssGenerator_rss could not be converted to string in /Users/kiusau/Sites/reflexive/php_practice/libraries/rssgen2.0/gc_implemenation/rss2gen.php on line 1400

 

Share this post


Link to post
Share on other sites

I am told that it is undefined.

 

Share this post


Link to post
Share on other sites

If the assignment is happening inside a function then the variable is only accessible from inside that function.

Share this post


Link to post
Share on other sites

This is the PHP package that I am using.  And, I beginning to feel very sorry that I chose it.  Simply, it appeared better documented than the others that I had viewed.

<?php

/*
  RSS Feed Generator for PHP 4 or higher version
  Version 1.0.3  
  Written by Vagharshak Tozalakyan <vagh@armdex.com>
  License: GNU Public License

  Classes in package:
    class rssGenerator_rss
    class rssGenerator_channel
    class rssGenerator_image
    class rssGenerator_textInput
    class rssGenerator_item

  For additional information please reffer the documentation
*/

class rssGenerator_rss
{
    var $rss_version = '2.0';
    var $encoding = '';
    var $stylesheet = '';

    function cData($str)
    {
        return '<![CDATA[ ' . $str . ' ]]>';
    }

    function createFeed($channel)
    {
        $selfUrl = (!isset($_SERVER['HTTPS']) || $_SERVER['HTTPS'] != 'on' ? 'http://' : 'https://');
        $selfUrl .= $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'];
        $rss = '<?xml version="1.0"';
        if (!empty($this->encoding)) {
            $rss .= ' encoding="' . $this->encoding . '"';
        }
        $rss .= '?>' . "\n";
        if (!empty($this->stylesheet)) {
            $rss .= $this->stylesheet . "\n";
        }
        $rss .= '<!-- Generated on ' . date('r') . ' -->' . "\n";
        $rss .= '<rss version="' . $this->rss_version . '" xmlns:atom="http://www.w3.org/2005/Atom">' . "\n";
        $rss .= '  <channel>' . "\n";
	    $rss .= '    <atom:link href="' . ($channel->atomLinkHref ? $channel->atomLinkHref : $selfUrl) . '" rel="self" type="application/rss+xml" />' . "\n";
        $rss .= '    <title>' . $channel->title . '</title>' . "\n";
        $rss .= '    <link>' . $channel->link . '</link>' . "\n";
        $rss .= '    <description>' . $channel->description . '</description>' . "\n";
        if (!empty($channel->language)) {
            $rss .= '    <language>' . $channel->language . '</language>' . "\n";
        }
        if (!empty($channel->copyright)) {
            $rss .= '    <copyright>' . $channel->copyright . '</copyright>' . "\n";
        }
        if (!empty($channel->managingEditor)) {
            $rss .= '    <managingEditor>' . $channel->managingEditor . '</managingEditor>' . "\n";
        }
        if (!empty($channel->webMaster)) {
            $rss .= '    <webMaster>' . $channel->webMaster . '</webMaster>' . "\n";
        }
        if (!empty($channel->pubDate)) {
            $rss .= '    <pubDate>' . $channel->pubDate . '</pubDate>' . "\n";
        }
        if (!empty($channel->lastBuildDate)) {
            $rss .= '    <lastBuildDate>' . $channel->lastBuildDate . '</lastBuildDate>' . "\n";
        }
        foreach ($channel->categories as $category) {
            $rss .= '    <category';
            if (!empty($category['domain'])) {
                $rss .= ' domain="' . $category['domain'] . '"';
            }
            $rss .= '>' . $category['name'] . '</category>' . "\n";
        }
        if (!empty($channel->generator)) {
            $rss .= '    <generator>' . $channel->generator . '</generator>' . "\n";
        }
        if (!empty($channel->docs)) {
            $rss .= '    <docs>' . $channel->docs . '</docs>' . "\n";
        }
        if (!empty($channel->ttl)) {
            $rss .= '    <ttl>' . $channel->ttl . '</ttl>' . "\n";
        }
        if (sizeof($channel->skipHours)) {
            $rss .= '    <skipHours>' . "\n";
            foreach ($channel->skipHours as $hour) {
                $rss .= '      <hour>' . $hour . '</hour>' . "\n";
            }
            $rss .= '    </skipHours>' . "\n";
        }
        if (sizeof($channel->skipDays)) {
            $rss .= '    <skipDays>' . "\n";
            foreach ($channel->skipDays as $day) {
                $rss .= '      <day>' . $day . '</day>' . "\n";
            }
            $rss .= '    </skipDays>' . "\n";
        }
        if (!empty($channel->image)) {
            $image = $channel->image;
            $rss .= '    <image>' . "\n";
            $rss .= '      <url>' . $image->url . '</url>' . "\n";
            $rss .= '      <title>' . $image->title . '</title>' . "\n";
            $rss .= '      <link>' . $image->link . '</link>' . "\n";
            if ($image->width) {
                $rss .= '      <width>' . $image->width . '</width>' . "\n";
            }
            if ($image->height) {
                $rss .= '      <height>' . $image->height . '</height>' . "\n";
            }
            if (!empty($image->description)) {
                $rss .= '      <description>' . $image->description . '</description>' . "\n";
            }
            $rss .= '    </image>' . "\n";
        }
        if (!empty($channel->textInput)) {
            $textInput = $channel->textInput;
            $rss .= '    <textInput>' . "\n";
            $rss .= '      <title>' . $textInput->title . '</title>' . "\n";
            $rss .= '      <description>' . $textInput->description . '</description>' . "\n";
            $rss .= '      <name>' . $textInput->name . '</name>' . "\n";
            $rss .= '      <link>' . $textInput->link . '</link>' . "\n";
            $rss .= '    </textInput>' . "\n";
        }
        if (!empty($channel->cloud_domain) || !empty($channel->cloud_path) || !empty($channel->cloud_registerProcedure) || !empty($channel->cloud_protocol)) {
            $rss .= '    <cloud domain="' . $channel->cloud_domain . '" ';
            $rss .= 'port="' . $channel->cloud_port . '" path="' . $channel->cloud_path . '" ';
            $rss .= 'registerProcedure="' . $channel->cloud_registerProcedure . '" ';
            $rss .= 'protocol="' . $channel->cloud_protocol . '" />' . "\n";
        }
        if (!empty($channel->extraXML)) {
            $rss .= $channel->extraXML . "\n";
        }
        foreach ($channel->items as $item) {
            $rss .= '    <item>' . "\n";
            if (!empty($item->title)) {
                $rss .= '      <title>' . $item->title . '</title>' . "\n";
            }
            if (!empty($item->description)) {
                $rss .= '      <description>' . $item->description . '</description>' . "\n";
            }
            if (!empty($item->link)) {
                $rss .= '      <link>' . $item->link . '</link>' . "\n";
            }
            if (!empty($item->pubDate)) {
                $rss .= '      <pubDate>' . $item->pubDate . '</pubDate>' . "\n";
            }
            if (!empty($item->author)) {
                $rss .= '      <author>' . $item->author . '</author>' . "\n";
            }
            if (!empty($item->comments)) {
                $rss .= '      <comments>' . $item->comments . '</comments>' . "\n";
            }
            if (!empty($item->guid)) {
                $rss .= '      <guid isPermaLink="';
                $rss .= ($item->guid_isPermaLink ? 'true' : 'false') . '">';
                $rss .= $item->guid . '</guid>' . "\n";
            }
/*            if (!empty($item->source_url)) {
                $rss .= '      <source url="' . $item->source_url . '">';
                $rss .= $item->source . '</source>' . "\n";
            }
*/            if (!empty($item->source)) {
                $rss .= '      <source url="' . $item->source_url . '">';
                $rss .= $item->source . '</source>' . "\n";
            }
            if (!empty($item->enclosure_url) || !empty($item->enclosure_type)) {
                $rss .= '      <enclosure url="' . $item->enclosure_url . '" ';
                $rss .= 'length="' . $item->enclosure_length . '" ';
                $rss .= 'type="' . $item->enclosure_type . '" />' . "\n";
            }
            foreach ($item->categories as $category) {
                $rss .= '      <category';
                if (!empty($category['domain'])) {
                    $rss .= ' domain="' . $category['domain'] . '"';
                }
                $rss .= '>' . $category['name'] . '</category>' . "\n";
            }
			$rss .= '  </channel>' . "\r";
			return $rss .= '</rss>';
		}
    }

}

class rssGenerator_channel
{
    var $atomLinkHref = '';
    var $title = '';
    var $link = '';
    var $description = '';
    var $language = '';
    var $copyright = '';
    var $managingEditor = '';
    var $webMaster = '';
    var $pubDate = '';
    var $lastBuildDate = '';
    var $categories = array();
    var $generator = '';
    var $docs = '';
    var $ttl = '';
    var $image = '';
    var $textInput = '';
    var $skipHours = array();
    var $skipDays = array();
    var $cloud_domain = '';
    var $cloud_port = '80';
    var $cloud_path = '';
    var $cloud_registerProcedure = '';
    var $cloud_protocol = '';
    var $items = array();
    var $extraXML = '';

}

class rssGenerator_image
{
    var $url = '';
    var $title = '';
    var $link = '';
    var $width = '88';
    var $height = '31';
    var $description = '';

}

class rssGenerator_textInput
{
    var $title = '';
    var $description = '';
    var $name = '';
    var $link = '';

}

class rssGenerator_item
{
    var $title = '';
    var $description = '';
    var $link = '';
    var $author = '';
    var $pubDate = '';
    var $comments = '';
    var $guid = '';
    var $guid_isPermaLink = true;
    var $source = '';
    var $source_url = '';
    var $enclosure_url = '';
    var $enclosure_length = '0';
    var $enclosure_type = '';
    var $categories = array();

}

?>

Of course, all is not lost, because I have learned a great deal about other matters in the process.  Simply I have now wasted two days trying to figure out why the createFeed( ) function is not doing its job.  As of yet, I still have not received a reply from the author.

Share this post


Link to post
Share on other sites

If you want to know what those first 2 lines in createFeed are doing, then add the echo statement after those lines to print the variable.  It's not a global variable, it's only available inside that method.

That code is definitely old, PHP 5 does not use var to define class properties.

Share this post


Link to post
Share on other sites

OK. I eliminated the var keyword and am now seeing the following parsing error when I go to load the class file. 

Parse error: parse error, expecting `"function (T_FUNCTION)"' in /Users/kiusau/vendor/phpclasses/rssgen2_0/rss_generator.inc.php on line 20

Is it because the class name is not capitalized?

Edited by iwato

Share this post


Link to post
Share on other sites

No, it is not because of capitalization.  I changed all class names to names beginning with caps.  It made no difference.  The error message was the same.

 

Share this post


Link to post
Share on other sites

You have to replace "var" with "public," "private," or "protected", as far as I know, you can't do variable assignments directly inside a class definition.

Share this post


Link to post
Share on other sites

I wasn't suggesting deleting anything, I was just pointing out that it's old code written for PHP 4.

Share this post


Link to post
Share on other sites

I have now experimented with my third RSS library, and the same problem persists.  Fortunately, I believe to have discovered the true source of the problem -- Safari and my RSS Bot feed reader.  They are swallowing my code.

Each time I execute a piece of software that is suppose to produce an XML/RSS document either Safari or my RSS Bot software intervenes and asks me whether I want to add it to my list of feeds. Whether I answer yes or know, when I go to open the page that results in the XML document, there is nothing there. At best, I can read the source PHP code that creates the page using PHP's show_source( ) function.

Even when I perform a search on my machine for the whereabouts of the XML/RSS files that my RSS Bot software has consumed nothing appears.

is there not someway for me to fool my RSS feed readers into ignoring my newly created feeds?

I have been trying to automate my RSS feed creation for nearly three weeks and have learned quite a bit, but when I cannot see the result of my effort, it is very frustrating.  Help!

Roddy

Edited by iwato

Share this post


Link to post
Share on other sites

At minimum I have finally found an RSS Feed writer that is well assembled -  FeedWriter by Anis Uddin Ahmad and Michael Bremmer.  I can recommend very highly.

Share this post


Link to post
Share on other sites

Fortunately, I have discovered a way to view my XML feed documents.  I use Google's Chrome browser.

I do have another question about security and the activation of my feed.

BACKGROUND:  For the moment I am able to generate an RSS2 feed automatically by downloading information from my website's database and processing it using the methods and properties of a PHP library called FeedWriter.  The PHP document that processes my RSS2 feed resides locally and is only available to the internet when I am online.  My goal is to make it available on my website's host server.

CURRENT PROCEDURE

1) Upload the information required to produce a new item to a MySQL database located on my site's host server.

2) Download the information sent to the database onto my local machine and create the XML/RSS2 feed document.

3) Upload the newly produced XML/RSS2 feed document to my website.

MY GOAL:  What I would like to do is simply upload the information to my MySQL database and generate the new feed automatically.

CONSIDERATION

1)  All that is necessary to produce a new feed is to add a new entry to my database and make a call to  the PHP file that creates the RSS2 feed.  Once the call is made the new RSS2 feed appears in the same document window in which the PHP code that produces it resides.  New header information is generated and replaces the old.

2)  Were I to place the PHP document that creates the feed on my website would I be producing a security risk?

 

Share this post


Link to post
Share on other sites

Whether or not the code has security problems depends on the actual code.

Share this post


Link to post
Share on other sites
<?php
	ini_set('display_errors', 1);
	ini_set('display_startup_errors', 1);
	error_reporting(E_ALL);
	$host = "...";
	$user = "...";
	$pwd = "...";
	$mysqli_obj = new mysqli($host, $user, $pwd);
	if (!$mysqli_obj->set_charset("utf8")) {
		printf("Error loading character set utf8: %s\n", $mysqli_obj->error);
		exit();
	} else {
		$mysqli_obj->character_set_name();
	}
	$db = "...";
	$mysqli_obj->select_db($db);
	$tbl_name = '...';
	$sql_1 = "SELECT * FROM ". $tbl_name . " ORDER BY channel_pubdate DESC LIMIT 1";
	$chan_arr = array(); 
	$result_obj = $mysqli_obj->query($sql_1);
	while($row = $result_obj->fetch_assoc()) {
		foreach($row as $key => $value) {
			$chan_arr[$key] = $value;
		}
	}
	$chan_image = array(
		"title" => $chan_arr['channel_img_title'],
		"url" => $chan_arr['channel_img_url'],
		"link" => $chan_arr['channel_img_link'],
		"width" => $chan_arr['channel_img_width'],
		"height" => $chan_arr['channel_img_height'],
		"description" => $chan_arr['channel_img_description']
	);
	foreach ($chan_arr as $key => $value) {
			if ($key == 'channel_category1') {
				$chancat_name[] = $value;
				$chancat_domain[] = '';
			}
			if ($key == 'channel_category2') {
				$chancat_name[] = $value;
				$chancat_domain[] = '';
			}
			if ($key == 'channel_category3') {
				$chancat_name[] = $value;
				$chancat_domain[] = '';
			}
	}
	$tbl_name = '...';
	$sql_1 = "SELECT * FROM ". $tbl_name . " ORDER BY item_pubdate DESC LIMIT 5";
	$item_arr = array(); 
	$result_obj = $mysqli_obj->query($sql_1);
	while($row = $result_obj->fetch_assoc()) {
		foreach($row as $key => $value) {
			$item_arr[$key] = $value;
		}
		$items[] = $item_arr;
	}
	$tbl_name = 'rss2_podcast_itunes';
	$sql_1 = "SELECT * FROM ". $tbl_name . " ORDER BY publish_date_itunes DESC LIMIT 5";
	$itunes_arr = array(); 
	$result_obj = $mysqli_obj->query($sql_1);
	while($row = $result_obj->fetch_assoc()) {
		foreach($row as $key => $value) {
			$itunes_arr[$key] = $value;
		}
		$itunes[] = $itunes_arr;
	}
	use FeedWriter\RSS2;
	require_once("/Users/.../vendor/autoload.php");
	$rss2 = new RSS2();	
	$prefix = 'itunes';
	$uri = 'http://www.itunes.com/dtds/podcast-1.0.dtd';
	$rss2->addNamespace($prefix,$uri);
	$href_atom = 'http://www.grammarcaptive.com/filepath.xml';
	$rel_atom = 'feed';
	$type_atom = 'application/x.atom+xml';
	$hreflang_atom = 'en';
	$title_atom = 'Grammar Captive Weekly Podcast';
	$length_atom = NULL;
	$rss2->setATOMLink($href_atom,$rel_atom,$type_atom,$hreflang_atom,$title_atom,NULL);
	$rss2->setTitle($chan_arr['channel_title']);
	$rss2->setLink($chan_arr['channel_link']);
	$rss2->setDescription($chan_arr['channel_description']);
	$rss2->setChannelElement('image',$chan_image,NULL,true);
	$i=0;
	$domain = ['domain'=>''];
	$length = count($chancat_name);
	while ($i < $length) {
		$rss2->setChannelElement('category',$chancat_name[$i],$domain, true);
		$i++;
	}
	$tags = ['copyright'];
	$rss2->addCDATAEncoding($tags);
	$rss2->setChannelElement('copyright',$chan_arr['channel_copyright'],NULL,false);
	$rss2->setChannelElement('language',$chan_arr['channel_language'],NULL,false);
	$rss2->setChannelElement('webMaster',$chan_arr['channel_webmaster'],NULL,false);
	$rss2->setDate($chan_arr['channel_lastbuilddate']);
	$rss2->addGenerator();
	$i = 0;
	$length = count($items);
	while ($i < $length) {
		foreach ($items as $key => $value) {
			$item = $rss2->createNewItem();
			$item->setTitle($items[$i]['item_title']);
			$item->setLink($items[$i]['item_link']);
			$item->setDate($items[$i]['item_pubdate']);
			$item->setDescription($items[$i]['item_description']);
			$item->setId($items[$i]['item_guid'],false);
			$item->addEnclosure($items[$i]['item_enclurl'],$items[$i]['item_encllength'],$items[$i]['item_encltype'],false);
			$item->setAuthor($items[$i]['item_author'],$itunes[$i]['itunes_email'],NULL);
			$source_url = ['url' => $items[$i]['item_source']];
			$item->addElement('source',$chan_arr['channel_title'],$source_url,false,false);
			$item->addElement('comments',$items[$i]['item_comments'],NULL,false,false);
		}
		$newItems[] = $item;
		$i++;
	}
	foreach ($newItems as $item) {
		$rss2->addItem($item);
	}
	$rss2->printFeed(true);

On the one hand, it appears that security is not  an issue because I merely read and execute based upon what I have read.  At no time do I write except to publish the final result.  On the other hand, PHP files can easily be read using PHP functions such as the show_source( ) method.  As Ingolme pointed out already many days ago.  If I can see the file on the internet, then others are likely able to see it to.  

Share this post


Link to post
Share on other sites

On the other hand, PHP files can easily be read using PHP functions such as the show_source( ) method.  As Ingolme pointed out already many days ago.  If I can see the file on the internet, then others are likely able to see it to.  

You can't look at the source code of arbitrary PHP files.  This forum is using index.php, can you see the code for it?

Depending on where your data comes from, the only issues with that might be something like XSS, but I'm not sure if XSS applies in an RSS feed (I don't know if the Javascript code will get executed).

Share this post


Link to post
Share on other sites

If I have understood correctly.  The PHP show_source( ) method only works because the method is called within the same domain name as the file that it calls.  Am I correct?

Share this post


Link to post
Share on other sites

It only shows the source of files in the same local filesystem, regardless of domain name. If, for some reason, it did load a file from a URL it would only be able to show what was returned by that URL through HTTP.

  • Like 1

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×