Jack_mcs Posted December 29, 2016 Posted December 29, 2016 Google is referenced in urlset because when this addon was originally written, that was the way to do it. The other search engines will accept the maps as long as the reference to the index is made in the robots file. The urlset change will be in the next release. Quote Support Links: For Hire: Contact me for anything you need help with for your shop: upgrading, hosting, repairs, code written, etc. All of My Addons Get the latest versions of my addons Recommended SEO Addons
sudhara429 Posted July 13, 2017 Posted July 13, 2017 hi  i want hide products and categories on hidden categories on sitemap how to do it Quote
Jack_mcs Posted July 13, 2017 Posted July 13, 2017 There isn't any code in place to do that so you would have to edit it. For example, in the sitemap,class.php file, find $sql = "SELECT products_id as pID, products_date_added as date_added, products_last_modified as last_mod, products_ordered FROM products WHERE products_status='1'" . $quotes . " ORDER BY products_ordered DESC"; and change it to $sql = "SELECT products_id as pID, products_date_added as date_added, products_last_modified as last_mod, products_ordered FROM products WHERE products_status='1'" . $quotes . " and products_id NOT IN (1,2,3) ORDER BY products_ordered DESC"; where the 1,2,3 are the product ID's (as many as you want). I haven't tested the above but I think it will do what you want. There is a similar function for categories where such a change can be made. Quote Support Links: For Hire: Contact me for anything you need help with for your shop: upgrading, hosting, repairs, code written, etc. All of My Addons Get the latest versions of my addons Recommended SEO Addons
Steve80 Posted July 27, 2020 Posted July 27, 2020 I know this is a VERY old thread, but it worked on my site for many years .. and now it won't ? It actually worked perfectly for many years from cron.. then a couple years ago the cron started failing (due to register_variables issue), but it would run just fine from the browser window.. so I just kept doing it manually. Now, it also fails from the browser with a 127.0.0.1 call . which I think means it can't find the actual IP address where it used to be .. which is most likely because of the latest series of security changes made by all ISPs and everyone else too. I haven't found anything in this thread and I don't see any mentions in the original addon series.. but, of course. all of that is years old now .. Is anyone still 'listening here'? Is there a way around the problem? Is there a replacement feeder that works that I need to change to? The store is still running under MS2.2 .. yes.. a terribly OLD version of OSC, but I just haven't taken the time to upgrade and the store still works .. for the time being. Sorry for asking here, but I don't 'stay on top' of this store as well as I should since there is a relatively small number of products in a small store. But I would like to get the google feeder working again. TIA, Steve Quote
Jack_mcs Posted July 27, 2020 Posted July 27, 2020 (edited) @Steve80Yes, the addon is still supported. The last update was about 8 months ago. It should work in your shop, though I haven't tried the latest version in an MS2 shop. There isn't reason for the one you have installed to stop working unless something on the server changed. I just realized this is the old support thread. The new support thread is here. And the addon is located here. Edited July 27, 2020 by Jack_mcs Quote Support Links: For Hire: Contact me for anything you need help with for your shop: upgrading, hosting, repairs, code written, etc. All of My Addons Get the latest versions of my addons Recommended SEO Addons
♥Smoky Barnable Posted February 7 Posted February 7 Always loved this contribution by the great Chemo(Bobby Easland), so I've updated his version to work with PHP 8. Index.php <?php /** * Google XML Sitemap Feed Cron Script * * The Google sitemap service was announced on 2 June 2005 and represents * a huge development in terms of crawler technology. This contribution is * designed to create the sitemap XML feed per the specification delineated * by Google. This cron script will call the code to create the scripts and * eliminate the session auto start issues. * @package Google-XML-Sitemap-Feed * @license http://opensource.org/licenses/gpl-license.php GNU Public License * @version 1.2 * @link http://www.oscommerce-freelancers.com/ osCommerce-Freelancers * @link http://www.google.com/webmasters/sitemaps/docs/en/about.html About Google Sitemap * @copyright Copyright 2005, Bobby Easland * @author Bobby Easland * @filesource */ //chdir('../'); // Uncomment for Cron chdir('public_html'); /** * Option to compress the files */ define('GOOGLE_SITEMAP_COMPRESS', 'false'); /** * Option for change frequency of products */ define('GOOGLE_SITEMAP_PROD_CHANGE_FREQ', 'weekly'); /** * Option for change frequency of categories */ define('GOOGLE_SITEMAP_CAT_CHANGE_FREQ', 'weekly'); /** * Carried over from application_top.php for compatibility */ define('DIR_WS_HTTP_CATALOG', '/'); define('DIR_WS_CATALOG', DIR_WS_HTTP_CATALOG); require_once('includes/configure.php'); require_once(DIR_WS_INCLUDES . 'filenames.php'); require_once(DIR_WS_INCLUDES . 'database_tables.php'); require_once(DIR_WS_FUNCTIONS . 'database.php'); tep_db_connect() or die('Unable to connect to database server!'); $configuration_query = tep_db_query('select configuration_key as cfgKey, configuration_value as cfgValue from ' . TABLE_CONFIGURATION); while ($configuration = tep_db_fetch_array($configuration_query)) { define($configuration['cfgKey'], $configuration['cfgValue']); } function tep_not_null($value) { if (is_array($value)) { if (sizeof($value) > 0) { return true; } else { return false; } } else { if (($value != '') && (strtolower($value) != 'null') && (strlen(trim($value)) > 0)) { return true; } else { return false; } } } # end function include_once(DIR_WS_CLASSES . 'language.php'); $lng = new language(); $languages_id = $lng->language['id']; if ( defined('SEO_URLS') && SEO_URLS == 'true' || defined('SEO_ENABLED') && SEO_ENABLED == 'true' ) { function tep_session_is_registered( $var ){ return false; } # end function function tep_session_name(){ return false; } # end function function tep_session_id(){ return false; } # end function function tep_parse_input_field_data($data, $parse) { return strtr(trim($data), $parse); } # end function function tep_output_string($string, $translate = false, $protected = false) { if ($protected == true) { return htmlspecialchars($string); } else { if ($translate == false) { return tep_parse_input_field_data($string, array('"' => '"')); } else { return tep_parse_input_field_data($string, $translate); } } } # end function if ( file_exists(DIR_WS_CLASSES . 'seo.class.php') ){ require_once(DIR_WS_CLASSES . 'seo.class.php'); $seo_urls = new SEO_URL($languages_id); } require_once(DIR_WS_FUNCTIONS . 'html_output.php'); if ( file_exists(DIR_WS_CLASSES . 'cache.class.php') ){ include(DIR_WS_CLASSES . 'cache.class.php'); $cache = new cache($languages_id); if ( file_exists('includes/seo_cache.php') ){ include('includes/seo_cache.php'); } $cache->get_cache('GLOBAL'); } } # end if require_once('googlesitemap/sitemap.class.php'); $google = new GoogleSitemap(DB_SERVER, DB_SERVER_USERNAME, DB_DATABASE, DB_SERVER_PASSWORD); $submit = true; echo '<pre>'; if ($google->GenerateProductSitemap()){ echo 'Generated Google Product Sitemap Successfully' . "\n\n"; } else { $submit = false; echo 'ERROR: Google Product Sitemap Generation FAILED!' . "\n\n"; } if ($google->GenerateCategorySitemap()){ echo 'Generated Google Category Sitemap Successfully' . "\n\n"; } else { $submit = false; echo 'ERROR: Google Category Sitemap Generation FAILED!' . "\n\n"; } if ($google->GenerateSitemapIndex()){ echo 'Generated Google Sitemap Index Successfully' . "\n\n"; } else { $submit = false; echo 'ERROR: Google Sitemap Index Generation FAILED!' . "\n\n"; } if ($submit){ echo 'CONGRATULATIONS! All files generated successfully.' . "\n\n"; //echo 'If you have not already submitted the sitemap index to Google click the link below.' . "\n"; echo 'I HIGHLY recommend that you view the XML files to make sure the data is correct.' . "\n\n"; //echo $google->GenerateSubmitURL() . "\n\n"; echo 'For your convenience here is the CRON command for your site:' . "\n"; echo 'php ' . dirname($_SERVER['SCRIPT_FILENAME']) . '/index.php' . "\n\n"; echo 'Here is your sitemap index: ' . $google->base_url . 'sitemapindex.xml' . "\n"; echo 'Here is your product sitemap: ' . $google->base_url . 'sitemapproducts.xml' . "\n"; echo 'Here is your category sitemap: ' . $google->base_url . 'sitemapcategories.xml' . "\n"; } else { print_r($google->debug); } echo '</pre>'; ?> sitemap.class.php <?php /** * Google XML Sitemap Feed * * The Google sitemap service was announced on 2 June 2005 and represents * a huge development in terms of crawler technology. This contribution is * designed to create the sitemap XML feed per the specification delineated * by Google. * @package Google-XML-Sitemap-Feed * @license http://opensource.org/licenses/gpl-license.php GNU Public License * @version 1.0 * @link http://www.oscommerce-freelancers.com/ osCommerce-Freelancers * @link http://www.google.com/webmasters/sitemaps/docs/en/about.html About Google Sitemap * @copyright Copyright 2005, Bobby Easland * @author Bobby Easland * @filesource */ /** * MySQL_Database Class * * The MySQL_Database class provides abstraction so the databaes can be accessed * without having to use tep API functions. This class has minimal error handling * so make sure your code is tight! * @package Google-XML-Sitemap-Feed * @license http://opensource.org/licenses/gpl-license.php GNU Public License * @version 1.1 * @link http://www.oscommerce-freelancers.com/ osCommerce-Freelancers * @copyright Copyright 2005, Bobby Easland * @author Bobby Easland */ class MySQL_DataBase{ /** * Database host (localhost, IP based, etc) * @var string */ var $host; /** * Database user * @var string */ var $user; /** * Database name * @var string */ var $db; /** * Database password * @var string */ var $pass; /** * Database link * @var resource */ var $link_id; /** * MySQL_DataBase class constructor * @author Bobby Easland * @version 1.0 * @param string $host * @param string $user * @param string $db * @param string $pass */ public function __construct($host, $user, $db, $pass){ $this->host = $host; $this->user = $user; $this->db = $db; $this->pass = $pass; $this->ConnectDB(); $this->SelectDB(); } # end function public function MySQL_DataBase($host, $user, $db, $pass) { self::__construct($host, $user, $db, $pass); } /** * Function to connect to MySQL * @author Bobby Easland * @version 1.0 */ function ConnectDB(){ $this->link_id = mysqli_connect($this->host, $this->user, $this->pass); } # end function /** * Function to select the database * @author Bobby Easland * @version 1.0 * @return resoource */ function SelectDB(){ return mysqli_select_db($this->link_id, $this->db); } # end function /** * Function to perform queries * @author Bobby Easland * @version 1.0 * @param string $query SQL statement * @return resource */ function Query($query){ return mysqli_query($query, $this->link_id); } # end function /** * Function to fetch array * @author Bobby Easland * @version 1.0 * @param resource $resource_id * @param string $type MYSQL_BOTH or MYSQL_ASSOC * @return array */ function FetchArray($resource_id, $type = MYSQL_BOTH){ return @mysqli_fetch_array($resource_id, $type); } # end function /** * Function to fetch the number of rows * @author Bobby Easland * @version 1.0 * @param resource $resource_id * @return mixed */ function NumRows($resource_id){ return @mysqli_num_rows($resource_id); } # end function /** * Function to free the resource * @author Bobby Easland * @version 1.0 * @param resource $resource_id * @return boolean */ function Free($resource_id){ return @mysqli_free_result($resource_id); } # end function /** * Function to add slashes * @author Bobby Easland * @version 1.0 * @param string $data * @return string */ function Slashes($data){ return addslashes($data); } # end function /** * Function to perform DB inserts and updates - abstracted from osCommerce-MS-2.2 project * @author Bobby Easland * @version 1.0 * @param string $table Database table * @param array $data Associative array of columns / values * @param string $action insert or update * @param string $parameters * @return resource */ function DBPerform($table, $data, $action = 'insert', $parameters = '') { reset($data); if ($action == 'insert') { $query = 'INSERT INTO `' . $table . '` ('; while (list($columns, ) = each($data)) { $query .= '`' . $columns . '`, '; } $query = substr($query, 0, -2) . ') values ('; reset($data); while (list(, $value) = each($data)) { switch ((string)$value) { case 'now()': $query .= 'now(), '; break; case 'null': $query .= 'null, '; break; default: $query .= "'" . $this->Slashes($value) . "', "; break; } } $query = substr($query, 0, -2) . ')'; } elseif ($action == 'update') { $query = 'UPDATE `' . $table . '` SET '; while (list($columns, $value) = each($data)) { switch ((string)$value) { case 'now()': $query .= '`' .$columns . '`=now(), '; break; case 'null': $query .= '`' .$columns .= '`=null, '; break; default: $query .= '`' .$columns . "`='" . $this->Slashes($value) . "', "; break; } } $query = substr($query, 0, -2) . ' WHERE ' . $parameters; } return $this->Query($query); } # end function } # end class /** * Google Sitemap Base Class * * The MySQL_Database class provides abstraction so the databaes can be accessed * @package Google-XML-Sitemap-Feed * @license http://opensource.org/licenses/gpl-license.php GNU Public License * @version 1.2 * @link http://www.oscommerce-freelancers.com/ osCommerce-Freelancers * @link http://www.google.com/webmasters/sitemaps/docs/en/about.html About Google Sitemap * @copyright Copyright 2005, Bobby Easland * @author Bobby Easland */ class GoogleSitemap{ /** * $DB is the database object * @var object */ var $DB; /** * $filename is the base name of the feeds (i.e. - 'sitemap') * @var string */ var $filename; /** * $savepath is the path where the feeds will be saved - store root * @var string */ var $savepath; /** * $base_url is the URL for the catalog * @var string */ var $base_url; /** * $debug holds all the debug data * @var array */ var $debug; /** * GoogleSitemap class constructor * @author Bobby Easland * @version 1.0 * @param string $host Database host setting (i.e. - localhost) * @param string $user Database user * @param string $db Database name * @param string $pass Database password */ public function __construct($host, $user, $db, $pass){ $this->DB = new MySQL_Database($host, $user, $db, $pass); $this->filename = "sitemap"; $this->savepath = DIR_FS_CATALOG; $this->base_url = HTTP_SERVER . DIR_WS_HTTP_CATALOG; //$this->base_url = 'http://localhost/new/'; $this->debug = array(); } # end class constructor /** * Function to save the sitemap data to file as either XML or XML.GZ format * @author Bobby Easland * @version 1.1 * @param string $data XML data * @param string $type Feed type (index, products, categories) * @return boolean */ function SaveFile($data, $type){ $filename = $this->savepath . $this->filename . $type; $compress = defined('GOOGLE_SITEMAP_COMPRESS') ? GOOGLE_SITEMAP_COMPRESS : 'false'; if ($type == 'index') $compress = 'false'; switch($compress){ case 'true': $filename .= '.xml.gz'; if ($gz = gzopen($filename,'wb9')){ gzwrite($gz, $data); gzclose($gz); $this->debug['SAVE_FILE_COMPRESS'][] = array('file' => $filename, 'status' => 'success', 'file_exists' => 'true'); return true; } else { $file_check = file_exists($filename) ? 'true' : 'false'; $this->debug['SAVE_FILE_COMPRESS'][] = array('file' => $filename, 'status' => 'failure', 'file_exists' => $file_check); return false; } break; default: $filename .= '.xml'; if ($fp = fopen($filename, 'w+')){ fwrite($fp, $data); fclose($fp); $this->debug['SAVE_FILE_XML'][] = array('file' => $filename, 'status' => 'success', 'file_exists' => 'true'); return true; } else { $file_check = file_exists($filename) ? 'true' : 'false'; $this->debug['SAVE_FILE_XML'][] = array('file' => $filename, 'status' => 'failure', 'file_exists' => $file_check); return false; } break; } # end switch } # end function /** * Function to compress a normal file * @author Bobby Easland * @version 1.0 * @param string $file * @return boolean */ function CompressFile($file){ $source = $this->savepath . $file . '.xml'; $filename = $this->savepath . $file . '.xml.gz'; $error_encountered = false; if( $gz_out = gzopen($filename, 'wb9') ){ if($fp_in = fopen($source,'rb')){ while(!feof($fp_in)) gzwrite($gz_out, fread($fp_in, 1024*512)); fclose($fp_in); } else { $error_encountered = true; } gzclose($gz_out); } else { $error_encountered = true; } if($error_encountered){ return false; } else { return true; } } # end function /** * Function to generate sitemap file from data * @author Bobby Easland * @version 1.0 * @param array $data * @param string $file * @return boolean */ function GenerateSitemap($data, $file){ $content = '<?xml version="1.0" encoding="UTF-8"?>' . "\n"; $content .= '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">' . "\n"; foreach ($data as $url){ $content .= "\t" . '<url>' . "\n"; $content .= "\t\t" . '<loc>'.$url['loc'].'</loc>' . "\n"; $content .= "\t\t" . '<lastmod>'.$url['lastmod'].'</lastmod>' . "\n"; $content .= "\t\t" . '<changefreq>'.$url['changefreq'].'</changefreq>' . "\n"; $content .= "\t\t" . '<priority>'.$url['priority'].'</priority>' . "\n"; $content .= "\t" . '</url>' . "\n"; } # end foreach $content .= '</urlset>'; return $this->SaveFile($content, $file); } # end function /** * Function to generate sitemap index file * @author Bobby Easland * @version 1.1 * @return boolean */ function GenerateSitemapIndex(){ $content = '<?xml version="1.0" encoding="UTF-8"?>' . "\n"; $content .= '<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">' . "\n"; $pattern = defined('GOOGLE_SITEMAP_COMPRESS') ? GOOGLE_SITEMAP_COMPRESS == 'true' ? "{sitemap*.xml.gz}" : "{sitemap*.xml}" : "{sitemap*.xml}"; foreach ( glob($this->savepath . $pattern, GLOB_BRACE) as $filename ) { if ( preg_match('/index/i', $filename) ) continue; $content .= "\t" . '<sitemap>' . "\n"; $content .= "\t\t" . '<loc>'.$this->base_url . basename($filename).'</loc>' . "\n"; $content .= "\t\t" . '<lastmod>'.date ("Y-m-d", filemtime($filename)).'</lastmod>' . "\n"; $content .= "\t" . '</sitemap>' . "\n"; } # end foreach $content .= '</sitemapindex>'; return $this->SaveFile($content, 'index'); } # end function /** * Function to generate product sitemap data * @author Bobby Easland * @version 1.1 * @return boolean */ function GenerateProductSitemap(){ $sql = "SELECT products_id as pID, products_date_added as date_added, products_last_modified as last_mod, products_ordered FROM " . TABLE_PRODUCTS . " WHERE products_status='1' ORDER BY products_ordered DESC"; if ( $products_query = tep_db_query($sql) ){ $this->debug['QUERY']['PRODUCTS']['STATUS'] = 'success'; $this->debug['QUERY']['PRODUCTS']['NUM_ROWS'] = $this->DB->NumRows($products_query); $container = array(); $number = 0; $top = 0; while( $result = tep_db_fetch_array($products_query) ){ $top = max($top, $result['products_ordered']); $location = $this->hrefLink(FILENAME_PRODUCT_INFO, 'products_id=' . $result['pID'], 'NONSSL', false); $lastmod = $this->NotNull($result['last_mod']) ? $result['last_mod'] : $result['date_added']; $changefreq = GOOGLE_SITEMAP_PROD_CHANGE_FREQ; $ratio = $top > 0 ? $result['products_ordered']/$top : 0; $priority = $ratio < .1 ? .1 : number_format($ratio, 1, '.', ''); $container[] = array('loc' => mb_convert_encoding($location, 'UTF-8', mb_detect_encoding($location)), 'lastmod' => date ("Y-m-d", strtotime($lastmod)), 'changefreq' => $changefreq, 'priority' => $priority ); if ( sizeof($container) >= 50000 ){ $type = $number == 0 ? 'products' : 'products' . $number; $this->GenerateSitemap($container, $type); $container = array(); $number++; } } # end while $this->DB->Free($products_query); if ( sizeof($container) > 1 ) { $type = $number == 0 ? 'products' : 'products' . $number; return $this->GenerateSitemap($container, $type); } # end if } else { $this->debug['QUERY']['PRODUCTS']['STATUS'] = 'false'; $this->debug['QUERY']['PRODUCTS']['NUM_ROWS'] = '0'; } } # end function /** * Funciton to generate category sitemap data * @author Bobby Easland * @version 1.1 * @return boolean */ function GenerateCategorySitemap(){ $sql = "SELECT categories_id as cID, date_added, last_modified as last_mod FROM " . TABLE_CATEGORIES . " ORDER BY parent_id ASC, sort_order ASC, categories_id ASC"; if ( $categories_query = tep_db_query($sql) ){ $this->debug['QUERY']['CATEOGRY']['STATUS'] = 'success'; $this->debug['QUERY']['CATEOGRY']['NUM_ROWS'] = $this->DB->NumRows($categories_query); $container = array(); $number = 0; while( $result = tep_db_fetch_array($categories_query) ){ $location = $this->hrefLink(FILENAME_DEFAULT, 'cPath=' . $this->GetFullcPath($result['cID']), 'NONSSL', false); $lastmod = $this->NotNull($result['last_mod']) ? $result['last_mod'] : $result['date_added']; $changefreq = GOOGLE_SITEMAP_CAT_CHANGE_FREQ; $priority = .5; $container[] = array('loc' => mb_convert_encoding($location, 'UTF-8', mb_detect_encoding($location)), 'lastmod' => date ("Y-m-d", strtotime($lastmod)), 'changefreq' => $changefreq, 'priority' => $priority ); if ( sizeof($container) >= 50000 ){ $type = $number == 0 ? 'categories' : 'categories' . $number; $this->GenerateSitemap($container, $type); $container = array(); $number++; } } # end while tep_db_free_result($categories_query); if ( sizeof($container) > 1 ) { $type = $number == 0 ? 'categories' : 'categories' . $number; return $this->GenerateSitemap($container, $type); } # end if } else { $this->debug['QUERY']['CATEOGRY']['STATUS'] = 'false'; $this->debug['QUERY']['CATEOGRY']['NUM_ROWS'] = '0'; } } # end function /** * Function to retrieve full cPath from category ID * @author Bobby Easland * @version 1.0 * @param mixed $cID Could contain cPath or single category_id * @return string Full cPath string */ function GetFullcPath($cID){ if ( preg_match('/_/', $cID) ){ return $cID; } else { $c = array(); $this->GetParentCategories($c, $cID); $c = array_reverse($c); $c[] = $cID; $cID = sizeof($c) > 1 ? implode('_', $c) : $cID; return $cID; } } # end function /** * Recursion function to retrieve parent categories from category ID * @author Bobby Easland * @version 1.0 * @param mixed $categories Passed by reference * @param integer $categories_id */ function GetParentCategories(&$categories, $categories_id) { $sql = "SELECT parent_id FROM " . TABLE_CATEGORIES . " WHERE categories_id='" . (int)$categories_id . "'"; $parent_categories_query = tep_db_query($sql); while ($parent_categories = tep_db_fetch_array($parent_categories_query)) { if ($parent_categories['parent_id'] == 0) return true; $categories[sizeof($categories)] = $parent_categories['parent_id']; if ($parent_categories['parent_id'] != $categories_id) { $this->GetParentCategories($categories, $parent_categories['parent_id']); } } } # end function /** * Function to check if a value is NULL * @author Bobby Easland as abstracted from osCommerce-MS2.2 * @version 1.0 * @param mixed $value * @return boolean */ function NotNull($value) { if (is_array($value)) { if (sizeof($value) > 0) { return true; } else { return false; } } else { if (($value != '') && (strtolower($value) != 'null') && (strlen(trim($value)) > 0)) { return true; } else { return false; } } } # end function /** * Function to return href_link * @author Bobby Easland * @version 1.0 * @param mixed $value * @return boolean */ function hrefLink($page, $parameters, $connection, $add_session_id) { if ( defined('SEO_URLS') && SEO_URLS == 'true' || defined('SEO_ENABLED') && SEO_ENABLED == 'true' ) { return tep_href_link($page, $parameters, $connection, $add_session_id); } else { return $this->base_url . $page . '?' . $parameters; } } # end function /** * Utility function to read and return the contents of a GZ formatted file * @author Bobby Easland * @version 1.0 * @param string $file File to open * @return string */ function ReadGZ( $file ){ $file = $this->savepath . $file; $lines = gzfile($file); return implode('', $lines); } # end function /** * Utility function to generate the submit URL * @author Bobby Easland * @version 1.0 * @return string */ function GenerateSubmitURL(){ $url = urlencode($this->base_url . 'sitemapindex.xml'); return htmlspecialchars(utf8_encode('http://www.google.com/webmasters/sitemaps/ping?sitemap=' . $url)); } # end function } # end class ?>  Quote The water in a vessel is sparkling; the water in the sea is dark. The small truth has words which are clear; the great truth has great silence. - Rabindranath Tagore
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.