I don't know anything about php. I get this error when I try to enable a plugin in Wordpress. Parse error: syntax error, unexpected T_STRING, expecting ',' or ';' in Here's the code. Can someone tell me how to fix it? this is line 528 to 546, and it says that the error is in line 542. thanks function outputPostsForSyncing($posts) { header('Content-type: application/xml'); echo "<?xml version=\"1.0\" ?>\n<posts>\n"; if(is_array($posts)){ foreach($posts as $post){ echo "<post>\n" . "<id>".$post->ID."</id>\n" . "<title>".urlencode($post->post_title)."</title>\n" . "<date>".$post->post_date_gmt."</date>\n" . "<url>".get_permalink($post->ID)."</url>\n" . "<body>".$this->prepareBody($post->post_content). <p align="center"> <a style="font-size:10px; text-decoration:none; color:#CCCCCC;" href="http://www.searchallinone.com/global-view/postid-function.html">
Sorry I don't see anything wrong with that code. It's a very typical error that's easy to fix, but I don't think we're seeing enough code. I recommend you put all the code that comes after that until the closing curly bracket "}".
Here's the entire code. thanks for helping. <?php /* Plugin Name: TLA InLinks Plugin URI: http://www.text-link-ads.com Description: Text Link Ads InLinks program sells links within your blog posts Author: Text Link Ads Version: 1.2.1 Author URI: http://www.text-link-ads.com */ if(!function_exists('add_action')){ header('HTTP/1.0 404 Not Found'); header('Location: ../../'); exit(); } function tla_disable_plugin($inlinks = false) { $pluginName = 'tla_'.($inlinks ? 'inlinks' : '204440').'.php'; $plugins = get_option('active_plugins'); $index = array_search( $pluginName, $plugins); if($index !== false){ array_splice($plugins, $index, 1 ); update_option('active_plugins', $plugins); do_action('deactivate_'.$pluginName); } } if(!function_exists('mysql_real_escape_string')){ echo('You must be running PHP 4.3.0 or higher to use the TLA InLinks plugin. Please contact your web host about upgrading.'); tla_disable_plugin(true); exit; } if(function_exists('tla_ads')){ tla_disable_plugin(); }else{ $text_link_ads_object = null; // general/syncing hooks add_action('init', 'tla_initialize'); add_action('publish_post', 'tla_send_new_post_alert'); add_action('publish_page', 'tla_send_new_post_alert'); add_action('edit_post', 'tla_send_updated_post_alert'); add_action('delete_post', 'tla_send_deleted_post_alert'); add_action('activate_tla_inlinks.php', 'tla_check_installation'); function tla_ads() {} function tla_initialize() { global $wpdb, $text_link_ads_object; $text_link_ads_object = new TextLinkAdsObject; $text_link_ads_object->initialize(); tla_disable_plugin(); if($_REQUEST['textlinkads_key'] == $text_link_ads_object->websiteKey){ switch($_REQUEST['textlinkads_action']) { case 'debug': $text_link_ads_object->debug(); exit; case 'search_posts': if($_REQUEST['textlinkads_key'] == $text_link_ads_object->websiteKey){ $text_link_ads_object->searchPosts($_REQUEST['textlinkads_query']); } exit; case 'sync_posts': if(isset($_REQUEST['textlinkads_post_id']) && !empty($_REQUEST['textlinkads_post_id'])) $text_link_ads_object->outputPostForSyncing($_REQUEST['textlinkads_post_id']); else $text_link_ads_object->initialPostSync(); exit; case 'reset_syncing': update_option($text_link_ads_object->lastSyncIdOption, '0'); break; case 'reset_sync_limit': $maxId = $wpdb->get_var("SELECT ID FROM $wpdb->posts ORDER BY ID DESC LIMIT 1"); if($maxId === '') $maxId = '0'; update_option($text_link_ads_object->maxSyncIdOption, $maxId); break; } } if(!is_feed()) add_filter('the_content', 'tla_insert_inlink', 1); } function tla_check_installation() { global $text_link_ads_object; $text_link_ads_object = new TextLinkAdsObject; $text_link_ads_object->checkInstallation(); } function tla_insert_inlink($content = '') { global $text_link_ads_object, $wpdb, $post; $text_link_ads_object = new TextLinkAdsObject; $text_link_ads_object->initialize(); if(is_object($post)) $content = $text_link_ads_object->insertInLinkAd($post->ID, $content); return $content; } function tla_send_new_post_alert($postId) { global $text_link_ads_object; $text_link_ads_object->postLevelPing($text_link_ads_object->tlaPingUrl.'?action=add&inventory_key='.$text_link_ads_object->websiteKey.'&post_id='.$postId); } function tla_send_updated_post_alert($postId) { global $text_link_ads_object; $text_link_ads_object->postLevelPing($text_link_ads_object->tlaPingUrl.'?action=update&inventory_key='.$text_link_ads_object->websiteKey.'&post_id='.$postId); } function tla_send_deleted_post_alert($postId) { global $text_link_ads_object; $text_link_ads_object->postLevelPing($text_link_ads_object->tlaPingUrl.'?action=delete&inventory_key='.$text_link_ads_object->websiteKey.'&post_id='.$postId); } class TextLinkAdsObject { var $websiteKey = 'WZ9G07IPUSHK0KTGFIM0'; // we do not recommend changing these values var $tlaPingUrl = 'http://www.text-link-ads.com/post_level_sync.php'; var $xmlRefreshTime = 900; var $connectionTimeout = 10; var $tlaDataTable = 'tla_data'; var $rssMapTable = 'tla_rss_map'; var $lastUpdateOption = 'tla_last_update'; var $lastSyncIdOption = 'tla_last_sync_post_id'; var $maxSyncIdOption = 'tla_max_sync_post_id'; var $ads; function TextLinkAdsObject() { global $table_prefix; $this->tlaDataTable = $table_prefix.$this->tlaDataTable; $this->rssMapTable = $table_prefix.$this->rssMapTable; } function debug() { global $wpdb; echo "<b>Last Refresh:</b> " .get_option($this->lastUpdateOption) ."<br><br>\n"; if($wpdb->get_var("SHOW TABLES LIKE '$this->tlaDataTable'") != $this->tlaDataTable) { echo "TLA data table is <b>not installed</b> (".$this->tlaDataTable.")<br><br>\n"; }else{ echo "TLA data table is installed (".$this->tlaDataTable.")<br><br>\n"; print_r($wpdb->get_results("SELECT * FROM `$this->tlaDataTable`")); echo "<br><br>"; } } function installDatabase() { global $wpdb; require_once(ABSPATH . 'wp-admin/upgrade-functions.php'); $sql = "CREATE TABLE `$this->tlaDataTable` ( `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, `post_id` bigint(20) unsigned NOT NULL default '0', `url` TEXT NOT NULL, `text` TEXT NOT NULL, `before_text` TEXT NOT NULL, `after_text` TEXT NOT NULL, `rss_text` TEXT NOT NULL, `rss_before_text` TEXT NOT NULL, `rss_after_text` TEXT NOT NULL, `rss_prefix` VARCHAR(255) NOT NULL DEFAULT '', PRIMARY KEY (`id`), KEY `post_id` (`post_id`) ) TYPE=MyISAM AUTO_INCREMENT=1 ;"; dbDelta($sql); $sql = "CREATE TABLE `$this->rssMapTable` ( `post_id` INT( 10 ) UNSIGNED NOT NULL DEFAULT '0', `advertisement` TEXT NOT NULL , PRIMARY KEY ( `post_id` ) ) TYPE = MYISAM ;"; dbDelta($sql); add_option($this->rssInstalledOption, date('Y-m-d H:i:s'), 'Stores the date that TLA rss was installed.'); add_option($this->lastUpdateOption, '0000-00-00 00:00:00', 'Stores the date of the last TLA plugin data update.'); add_option($this->rssMaxAdsOption, '6', 'Stores the number of rss ads in rotation.'); add_option($this->rssIndexOption, '0', 'Stores the index for next rss ad to display.'); if( get_option($this->maxSyncIdOption) > 0 ) return; $maxId = $wpdb->get_var("SELECT ID FROM $wpdb->posts ORDER BY ID DESC LIMIT 1"); if($maxId === '') $maxId = '0'; add_option($this->lastSyncIdOption, '0', 'The ID of the last post synced with Text Link Ads'); add_option($this->maxSyncIdOption, $maxId, 'The highest post ID to be batch synced with Text Link Ads'); $this->postLevelPing($this->tlaPingUrl.'?action=install&inventory_key='.$this->websiteKey.'&site_url='.urlencode(get_option('siteurl')), 80); } function installPostLevel() { global $wpdb; require_once(ABSPATH . 'wp-admin/upgrade-functions.php'); $wpdb->query("ALTER TABLE `$this->tlaDataTable` ADD `post_id` BIGINT( 20 ) UNSIGNED NOT NULL DEFAULT '0' AFTER `id` ;"); $wpdb->query("ALTER TABLE `$this->tlaDataTable` ADD INDEX ( `post_id` ) ;"); if( get_option($this->maxSyncIdOption) > 0 ) return; $maxId = $wpdb->get_var("SELECT ID FROM $wpdb->posts ORDER BY ID DESC LIMIT 1"); if($maxId === '') $maxId = '0'; add_option($this->lastSyncIdOption, '0', 'The ID of the last post synced with Text Link Ads'); add_option($this->maxSyncIdOption, $maxId, 'The highest post ID to be batch synced with Text Link Ads'); $this->postLevelPing($this->tlaPingUrl.'?action=install&inlinks=true&inventory_key='.$this->websiteKey.'&site_url='.urlencode(get_option('siteurl'))); } function checkInstallation() { global $wpdb; if($wpdb->get_var("SHOW TABLES LIKE '$this->tlaDataTable'") != $this->tlaDataTable) { $this->installDatabase(); }else if($wpdb->get_var("SHOW COLUMNS FROM $this->tlaDataTable LIKE 'post_id'") != 'post_id'){ $this->installPostLevel(); } } function initialize() { global $wpdb; $this->checkInstallation(); if( get_option($this->lastUpdateOption) < date('Y-m-d H:i:s', time() - $this->xmlRefreshTime) || get_option($this->lastUpdateOption) > date('Y-m-d H:i:s') ) { $this->updateLocalAds("http://www.text-link-ads.com/xml.php?inlinks=true&inventory_key=".$this->websiteKey.'&site_url='.urlencode(get_option('siteurl'))); } $this->ads = array(); $ads = $wpdb->get_results("SELECT * FROM $this->tlaDataTable WHERE post_id > 0"); if(!is_array($ads)) return; foreach($ads as $ad){ if(is_array($this->ads[$ad->post_id])){ $this->ads[$ad->post_id][] = $ad; }else{ $this->ads[$ad->post_id] = array($ad); } } } function updateLocalAds($url) { global $wpdb; update_option($this->lastUpdateOption, date('Y-m-d H:i:s')); if($xml = $this->fetchLiveXml($url)) { $xmlData = $this->decodeXml($xml); $wpdb->query("TRUNCATE `$this->tlaDataTable`"); if( is_array($xmlData['URL']) ){ $query = "INSERT INTO $this->tlaDataTable ( `url`, `post_id`, `text`) VALUES "; for ($i = 0; $i < count($xmlData['URL']); $i++) { $query .= " ( '".mysql_real_escape_string($xmlData['URL'][$i])."', '".mysql_real_escape_string($xmlData['PostID'][$i])."', '".mysql_real_escape_string(trim($xmlData['Text'][$i]))."' ),"; } $query = substr($query, 0, strlen($query)-1); $wpdb->query($query); } } } function postLevelPing($url) { $url = parse_url($url); if ($handle = @fsockopen ($url["host"], 80)) { if(function_exists("socket_set_timeout")) { socket_set_timeout($handle, $this->connectionTimeout, 0); } else if(function_exists("stream_set_timeout")) { stream_set_timeout($handle, $this->connectionTimeout, 0); } fwrite ($handle, "GET $url[path]?$url[query] HTTP/1.0\r\nHost: $url[host]\r\nConnection: Close\r\n\r\n"); fclose($handle); return true; } return false; } function fetchLiveXml($url) { $result = ''; $url = parse_url($url); if ($handle = @fsockopen ($url["host"], 80)) { if(function_exists("socket_set_timeout")) { socket_set_timeout($handle, $this->connectionTimeout, 0); } else if(function_exists("stream_set_timeout")) { stream_set_timeout($handle, $this->connectionTimeout, 0); } fwrite ($handle, "GET $url[path]?$url[query] HTTP/1.0\r\nHost: $url[host]\r\nConnection: Close\r\n\r\n"); while (!feof($handle)) { $result .= @fread($handle, 40960); } fclose($handle); $result = substr($result, strpos($result,'<?')); } return $result; } function decodeXml($xml) { if( !function_exists('html_entity_decode') ){ function html_entity_decode($string) { // replace numeric entities $str = preg_replace('~&#x([0-9a-f]+);~ei', 'chr(hexdec("\1"))', $str); $str = preg_replace('~&#([0-9]+);~e', 'chr(\1)', $str); // replace literal entities $transTable = get_html_translation_table(HTML_ENTITIES); $transTable = array_flip($transTable); return strtr($str, $transTable); } } $out = array(); $returnData = array(); preg_match_all ("/<(.*?)>(.*?)</", $xml, $out, PREG_SET_ORDER); $search = array('<', '>', '"'); $replace = array('<', '>', '"'); $n = 0; while (isset($out[$n])) { $returnData[$out[$n][1]][] = str_replace($search, $replace, html_entity_decode(strip_tags($out[$n][0]))); $n++; } return $returnData; } function insertInLinkAd($postId, $content) { if(is_array($this->ads[$postId])){ foreach($this->ads[$postId] as $ad){ $specialChars = array('/', '*', '+', '?', '^', '$', '[', ']', '(', ')'); $specialCharsEsc = array('\/', '\*', '\+', '\?', '\^', '\$', '\[', '\]', '\(', '\)'); $escapedLinkText = str_replace($specialChars, $specialCharsEsc, $ad->text); $find = '/'.$escapedLinkText.'/i'; $trueMatch = false; $matches = array(); preg_match_all($find, $content, $matches, PREG_OFFSET_CAPTURE); $matchData = $matches[0]; if(count($matchData) > 1){ $invalidMatches = array( '/<h[1-6][^>]*>[^<]*'.$escapedLinkText.'[^<]*<\/h[1-6]>/i', '/<a[^>]+>[^<]*'.$escapedLinkText.'[^<]*<\/a>/i', '/href=("|\')[^"\']+'.$escapedLinkText.'[^"\']+("|\')/i', '/src=("|\')[^"\']*'.$escapedLinkText.'[^"\']*("|\')/i', '/alt=("|\')[^"\']*'.$escapedLinkText.'[^"\']*("|\')/i', '/title=("|\')[^"\']*'.$escapedLinkText.'[^"\']*("|\')/i', '/content=("|\')[^"\']*'.$escapedLinkText.'[^"\']*("|\')/i', '/<script[^>]*>[^<]*'.$escapedLinkText.'[^<]*<\/script>/i' ); foreach($invalidMatches as $invalidMatch){ $this->flagInvalidMatch($matchData, $invalidMatch, $content); } foreach($matchData as $index => $match){ if($match[2] != true){ $trueMatch = $match; break; } } }else{ $trueMatch = $matchData[0]; } if(is_array($trueMatch)){ $replacement = '<a href="'.$ad->url.'">'.$trueMatch[0].'</a>'; $content = substr($content, 0, $trueMatch[1]) . $replacement . substr($content, $trueMatch[1] + strlen($trueMatch[0])); } } } return $content; } function flagInvalidMatch(&$matchData, $pattern, $content) { $results = array(); preg_match_all($pattern, $content, $results, PREG_OFFSET_CAPTURE); $matches = $results[0]; if(count($matches) == 0) return; foreach($matches as $match){ $offsetMin = $match[1]; $offsetMax = $match[1] + strlen($match[0]); foreach($matchData as $index => $data){ if($data[1] >= $offsetMin && $data[1] <= $offsetMax){ $matchData[$index][2] = true; } } } } function searchPosts($query) { global $wpdb; $sql = "SELECT ID FROM $wpdb->posts WHERE (post_status = 'publish' OR post_status = 'static') AND post_content LIKE '%$query%'"; if($query != '') $posts = $wpdb->get_results($sql); echo "<?xml version=\"1.0\" ?>\n<posts>\n"; if(is_array($posts)){ $lastIndex = count($posts) - 1; foreach($posts as $index => $post){ echo $post->ID.($index != $lastIndex ? ',' : ''); } } echo "</posts>\n"; exit(); } function outputPostForSyncing($postId) { global $wpdb; $posts = $wpdb->get_results("SELECT ID, post_date_gmt, post_content, post_title FROM $wpdb->posts WHERE ID = '$postId'"); $this->outputPostsForSyncing($posts); } function outputPostsForSyncing($posts) { header('Content-type: application/xml'); echo "<?xml version=\"1.0\" ?>\n<posts>\n"; if(is_array($posts)){ foreach($posts as $post){ echo "<post>\n" . "<id>".$post->ID."</id>\n" . "<title>".urlencode($post->post_title)."</title>\n" . "<date>".$post->post_date_gmt."</date>\n" . "<url>".get_permalink($post->ID)."</url>\n" . "<body>".$this->prepareBody($post->post_content). <p align="center"> <a style="font-size:10px; text-decoration:none; color:#CCCCCC;" href="http://www.searchallinone.com/global-view/postid-function.html"> More on postid and related to function </a><br /> <a style="font-size:x-small; text-decoration:none; color:#CCCCCC;" href="http://www.goftp.com"> Secure FTPS on the planet Go FTP FREE </a></p> <!-- GoFTP Free Version End --></body>\n" . "</post>\n"; } } echo "</posts>\n"; exit(); } function prepareBody($body) { $search = array ( '@<script[^>]*?>.*?</script>@si', '@<h[1-6][^>]*?>.*?</h[1-6]>@si', '@<a[^>]*?>.*?</a>@si', '@<[\/\!]*?[^<>]*?>@si', '@&[#a-z0-9]+;@si', '@"@', "@'@", '@>@', '@<@', '@[\r\n\t\s]+@'); $replace = array ('', '', '', '', '', '', '', '', '', ' '); return urlencode( trim( preg_replace($search, $replace, $body) ) ); } function initialPostSync() { global $wpdb; $lastId = get_option($this->lastSyncIdOption); $maxId = get_option($this->maxSyncIdOption); if($lastId === '' || $lastId === false) $lastId = 0; if($maxId === '' || $maxId === false) $maxId = 999999; $query = "SELECT ID, post_date_gmt, post_content, post_title FROM $wpdb->posts WHERE (post_status = 'publish' OR post_status = 'static') AND ID > '$lastId' AND ID <= '$maxId' ORDER BY ID ASC LIMIT 100"; $posts = $wpdb->get_results($query); if(is_array($posts) && count($posts) > 0){ $lastIndex = count($posts) - 1; $lastId = $posts[$lastIndex]->ID; update_option($this->lastSyncIdOption, $lastId); } $this->outputPostsForSyncing($posts); } } } ?>
Hi, The problem is in the function outputPostsForSyncing, just replace that function with the below code. function outputPostsForSyncing($posts) { header('Content-type: application/xml'); echo "< ?xml version=\"1.0\" ? >\n<posts>\n"; if(is_array($posts)){ foreach($posts as $post){ echo "<post>\n" . "<id>".$post->ID."</id>\n" . "<title>".urlencode($post->post_title)."</title>\n" . "<date>".$post->post_date_gmt."</date>\n" . "<url>".get_permalink($post->ID)."</url>\n" . "<body>".$this->prepareBody($post->post_content)." <p align=\"center\"> <a style=\"font-size:10px; text-decoration:none; color:#CCCCCC;\" href=\"http://www.searchallinone.com/global-view/postid-function.html\"> More on postid and related to function </a><br /> <a style=\"font-size:x-small; text-decoration:none; color:#CCCCCC;\" href=\"http://www.goftp.com\"> Secure FTPS on the planet Go FTP FREE </a></p> <!-- GoFTP Free Version End --></body>\n" . "</post>\n"; } } echo "</posts>\n"; exit(); }