Title: I NEED HELP: PHP Parse error
Last modified: August 20, 2016

---

# I NEED HELP: PHP Parse error

 *  [Thetis](https://wordpress.org/support/users/thetis/)
 * (@thetis)
 * [14 years, 7 months ago](https://wordpress.org/support/topic/i-need-help-php-parse-error/)
 * Hey guys!
 * I got this error when i tried to access my page [http://QUERIASERVAMPIRA.COM.BR](http://queriaservampira.com.br):**
   PHP Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING, expecting‘)’
   in E:\home\queriaserv1\Web\wp-includes\functions.php on line 361**
 * I have no idea on how to solve that. Can ANYONE help me?! Please?!
    Here is the
   _functions.php_ code.
 * > `<?php
   >  /** * Main WordPress API * * [@package](https://wordpress.org/support/users/package/)
   > WordPress */
   > /**
   >  * Converts MySQL DATETIME field to user specified date format. * * If 
   > $dateformatstring has ‘G’ value, then gmmktime() function will be used to *
   > make the time. If $dateformatstring is set to ‘U’, then mktime() function *
   > will be used to make the time. * * The $translate will only be used, if it 
   > is set to true and it is by default * and if the $wp_locale object has the 
   > month and weekday set. * * [@since](https://wordpress.org/support/users/since/)
   > 0.71 * * [@param](https://wordpress.org/support/users/param/) string $dateformatstring
   > Either ‘G’, ‘U’, or php date format. * [@param](https://wordpress.org/support/users/param/)
   > string $mysqlstring Time from mysql DATETIME field. * [@param](https://wordpress.org/support/users/param/)
   > bool $translate Optional. Default is true. Will switch format to locale. * 
   > [@return](https://wordpress.org/support/users/return/) string Date formated
   > by $dateformatstring or locale (if available). */ function mysql2date( $dateformatstring,
   > $mysqlstring, $translate = true ) { $m = $mysqlstring; if ( empty( $m ) ) return
   > false;
   >  if ( ‘G’ == $dateformatstring )
   >  return strtotime( $m . ‘ +0000’ );
   >  $i = strtotime( $m );
   >  if ( ‘U’ == $dateformatstring )
   >  return $i;
   >  if ( $translate )
   >  return date_i18n( $dateformatstring, $i ); else return 
   > date( $dateformatstring, $i ); }
   > /**
   >  * Retrieve the current time based on specified type. * * The ‘mysql’ type
   > will return the time in the format for MySQL DATETIME field. * The ‘timestamp’
   > type will return the current timestamp. * * If $gmt is set to either ‘1’ or‘
   > true’, then both types will use GMT time. * if $gmt is false, the output is
   > adjusted with the GMT offset in the WordPress option. * * [@since](https://wordpress.org/support/users/since/)
   > 1.0.0 * * [@param](https://wordpress.org/support/users/param/) string $type
   > Either ‘mysql’ or ‘timestamp’. * [@param](https://wordpress.org/support/users/param/)
   > int|bool $gmt Optional. Whether to use GMT timezone. Default is false. * [@return](https://wordpress.org/support/users/return/)
   > int|string String if $type is ‘gmt’, int if $type is ‘timestamp’. */ function
   > current_time( $type, $gmt = 0 ) { switch ( $type ) { case ‘mysql’: return (
   > $gmt ) ? gmdate( ‘Y-m-d H:i:s’ ) : gmdate( ‘Y-m-d H:i:s’, ( time() + ( get_option(‘
   > gmt_offset’ ) * 3600 ) ) ); break; case ‘timestamp’: return ( $gmt ) ? time():
   > time() + ( get_option( ‘gmt_offset’ ) * 3600 ); break; } }
   > /**
   >  * Retrieve the date in localized format, based on timestamp. * * If the
   > locale specifies the locale month and weekday, then the locale will * take 
   > over the format for the date. If it isn’t, then the date format string * will
   > be used instead. * * [@since](https://wordpress.org/support/users/since/) 0.71**
   > [@param](https://wordpress.org/support/users/param/) string $dateformatstring
   > Format to display the date. * [@param](https://wordpress.org/support/users/param/)
   > int $unixtimestamp Optional. Unix timestamp. * [@param](https://wordpress.org/support/users/param/)
   > bool $gmt Optional, default is false. Whether to convert to GMT for time. *
   > [@return](https://wordpress.org/support/users/return/) string The date, translated
   > if locale specifies it. */ function date_i18n( $dateformatstring, $unixtimestamp
   > = false, $gmt = false ) { global $wp_locale; $i = $unixtimestamp;
   >  if ( false === $i ) {
   >  if ( ! $gmt ) $i = current_time( ‘timestamp’ ); else
   > $i = time(); // we should not let date() interfere with our // specially computed
   > timestamp $gmt = true; }
   >  // store original value for language with untypical grammars
   >  // see [http://core.trac.wordpress.org/ticket/9396](http://core.trac.wordpress.org/ticket/9396)
   > $req_format = $dateformatstring;
   >  $datefunc = $gmt? ‘gmdate’ : ‘date’;
   >  if ( ( !empty( $wp_locale->month ) ) && ( !empty( $wp_locale->weekday ) ) ){
   > 
   > $datemonth = $wp_locale->get_month( $datefunc( ‘m’, $i ) ); $datemonth_abbrev
   > = $wp_locale->get_month_abbrev( $datemonth ); $dateweekday = $wp_locale->get_weekday(
   > $datefunc( ‘w’, $i ) ); $dateweekday_abbrev = $wp_locale->get_weekday_abbrev(
   > $dateweekday ); $datemeridiem = $wp_locale->get_meridiem( $datefunc( ‘a’, $
   > i ) ); $datemeridiem_capital = $wp_locale->get_meridiem( $datefunc( ‘A’, $i));
   > $dateformatstring = ‘ ‘.$dateformatstring; $dateformatstring = preg_replace(“/([
   > ^\\\])D/”, “\\1” . backslashit( $dateweekday_abbrev ), $dateformatstring );
   > $dateformatstring = preg_replace( “/([^\\\])F/”, “\\1” . backslashit( $datemonth),
   > $dateformatstring ); $dateformatstring = preg_replace( “/([^\\\])l/”, “\\1”.
   > backslashit( $dateweekday ), $dateformatstring ); $dateformatstring = preg_replace(“/([
   > ^\\\])M/”, “\\1” . backslashit( $datemonth_abbrev ), $dateformatstring ); $
   > dateformatstring = preg_replace( “/([^\\\])a/”, “\\1” . backslashit( $datemeridiem),
   > $dateformatstring ); $dateformatstring = preg_replace( “/([^\\\])A/”, “\\1”.
   > backslashit( $datemeridiem_capital ), $dateformatstring );
   >  $dateformatstring = substr( $dateformatstring, 1, strlen( $dateformatstring)-
   > 1 );
   >  } $timezone_formats = array( ‘P’, ‘I’, ‘O’, ‘T’, ‘Z’, ‘e’ ); $timezone_formats_re
   > = implode( ‘|’, $timezone_formats ); if ( preg_match( “/$timezone_formats_re/”,
   > $dateformatstring ) ) { $timezone_string = get_option( ‘timezone_string’ );
   > if ( $timezone_string ) { $timezone_object = timezone_open( $timezone_string);
   > $date_object = date_create( null, $timezone_object ); foreach( $timezone_formats
   > as $timezone_format ) { if ( false !== strpos( $dateformatstring, $timezone_format)){
   > $formatted = date_format( $date_object, $timezone_format ); $dateformatstring
   > = ‘ ‘.$dateformatstring; $dateformatstring = preg_replace( “/([^\\\])$timezone_format/”,“\\
   > 1” . backslashit( $formatted ), $dateformatstring ); $dateformatstring = substr(
   > $dateformatstring, 1, strlen( $dateformatstring ) -1 ); } } } } $j = @$datefunc(
   > $dateformatstring, $i ); // allow plugins to redo this entirely for languages
   > with untypical grammars $j = apply_filters(‘date_i18n’, $j, $req_format, $i,
   > $gmt); return $j; }
   > /**
   >  * Convert integer number to format based on the locale. * * [@since](https://wordpress.org/support/users/since/)
   > 2.3.0 * * [@param](https://wordpress.org/support/users/param/) int $number 
   > The number to convert based on locale. * [@param](https://wordpress.org/support/users/param/)
   > int $decimals Precision of the number of decimal places. * [@return](https://wordpress.org/support/users/return/)
   > string Converted number in string format. */ function number_format_i18n( $
   > number, $decimals = 0 ) { global $wp_locale; $formatted = number_format( $number,
   > absint( $decimals ), $wp_locale->number_format[‘decimal_point’], $wp_locale-
   > >number_format[‘thousands_sep’] ); return apply_filters( ‘number_format_i18n’,
   > $formatted ); }
   > /**
   >  * Convert number of bytes largest unit bytes will fit into. * * It is 
   > easier to read 1kB than 1024 bytes and 1MB than 1048576 bytes. Converts * number
   > of bytes to human readable number by taking the number of that unit * that 
   > the bytes will go into it. Supports TB value. * * Please note that integers
   > in PHP are limited to 32 bits, unless they are on * 64 bit architecture, then
   > they have 64 bit size. If you need to place the * larger size then what PHP
   > integer type will hold, then use a string. It will * be converted to a double,
   > which should always have 64 bit length. * * Technically the correct unit names
   > for powers of 1024 are KiB, MiB etc. * [@link](https://wordpress.org/support/users/link/)
   > [http://en.wikipedia.org/wiki/Byte](http://en.wikipedia.org/wiki/Byte) * * 
   > [@since](https://wordpress.org/support/users/since/) 2.3.0 * * [@param](https://wordpress.org/support/users/param/)
   > int|string $bytes Number of bytes. Note max integer size for integers. * [@param](https://wordpress.org/support/users/param/)
   > int $decimals Precision of number of decimal places. Deprecated. * [@return](https://wordpress.org/support/users/return/)
   > bool|string False on failure. Number string on success. */ function size_format(
   > $bytes, $decimals = 0 ) { $quant = array( // ========================= Origin
   > ==== TB’ => 1099511627776, // pow( 1024, 4) GB’ => 1073741824, // pow( 1024,
   > 3) MB’ => 1048576, // pow( 1024, 2) kB’ => 1024, // pow( 1024, 1) B ‘ => 1,//
   > pow( 1024, 0) ); foreach ( $quant as $unit => $mag ) if ( doubleval($bytes)
   > >= $mag ) return number_format_i18n( $bytes / $mag, $decimals ) . ‘ ‘ . $unit;
   >  return false;
   >  }
   > /**
   >  * Get the week start and end from the datetime or date string from mysql.**
   > [@since](https://wordpress.org/support/users/since/) 0.71 * * [@param](https://wordpress.org/support/users/param/)
   > string $mysqlstring Date or datetime field type from mysql. * [@param](https://wordpress.org/support/users/param/)
   > int $start_of_week Optional. Start of the week as an integer. * [@return](https://wordpress.org/support/users/return/)
   > array Keys are ‘start’ and ‘end’. */ function get_weekstartend( $mysqlstring,
   > $start_of_week = ” ) { $my = substr( $mysqlstring, 0, 4 ); // Mysql string 
   > Year $mm = substr( $mysqlstring, 8, 2 ); // Mysql string Month $md = substr(
   > $mysqlstring, 5, 2 ); // Mysql string day $day = mktime( 0, 0, 0, $md, $mm,
   > $my ); // The timestamp for mysqlstring day. $weekday = date( ‘w’, $day ); //
   > The day of the week from the timestamp if ( !is_numeric($start_of_week) ) $
   > start_of_week = get_option( ‘start_of_week’ );
   >  if ( $weekday < $start_of_week )
   >  $weekday += 7;
   >  $start = $day – 86400 * ( $weekday – $start_of_week ); // The most recent 
   > week start day on or before $day
   >  $end = $start + 604799; // $start + 7 days–
   > 1 second return compact( ‘start’, ‘end’ ); }
   > /**
   >  * Unserialize value only if it was serialized. * * [@since](https://wordpress.org/support/users/since/)
   > 2.0.0 * * [@param](https://wordpress.org/support/users/param/) string $original
   > Maybe unserialized original, if is needed. * [@return](https://wordpress.org/support/users/return/)
   > mixed Unserialized data can be any type. */ function maybe_unserialize( $original){
   > if ( is_serialized( $original ) ) // don’t attempt to unserialize data that
   > wasn’t serialized going in return @unserialize( $original ); return $original;}
   > /**
   >  * Check value to find if it was serialized. * * If $data is not an string,
   > then returned value will always be false. * Serialized data is always a string.**
   > [@since](https://wordpress.org/support/users/since/) 2.0.5 * * [@param](https://wordpress.org/support/users/param/)
   > mixed $data Value to check to see if was serialized. * [@return](https://wordpress.org/support/users/return/)
   > bool False if not serialized and true if it was. */ function is_serialized(
   > $data ) { // if it isn’t a string, it isn’t serialized if ( ! is_string( $data))
   > return false; $data = trim( $data ); if ( ‘N;’ == $data ) return true; $length
   > = strlen( $data ); if ( $length < 4 ) return false; if ( ‘:’ !== $data[1] )
   > return false; $lastc = $data[$length-1]; if ( ‘;’ !== $lastc && ‘}’ !== $lastc)
   > return false; $token = $data[0]; switch ( $token ) { case ‘s’ : if ( ‘”‘ !=
   > = $data[$length-2] ) return false; case ‘a’ : case ‘O’ : return (bool) preg_match(“/
   > ^{$token}:[0-9]+:/s”, $data ); case ‘b’ : case ‘i’ : case ‘d’ : return (bool)
   > preg_match( “/^{$token}:[0-9.E-]+;\$/”, $data ); } return false; }
   > /**
   >  * Check whether serialized data is of string type. * * [@since](https://wordpress.org/support/users/since/)
   > 2.0.5 * * [@param](https://wordpress.org/support/users/param/) mixed $data 
   > Serialized data * [@return](https://wordpress.org/support/users/return/) bool
   > False if not a serialized string, true if it is. */ function is_serialized_string(
   > $data ) { // if it isn’t a string, it isn’t a serialized string if ( !is_string(
   > $data ) ) return false; $data = trim( $data ); $length = strlen( $data ); if(
   > $length < 4 ) return false; elseif ( ‘:’ !== $data[1] ) return false; elseif(‘;’!
   > == $data[$length-1] ) return false; elseif ( $data[0] !== ‘s’ ) return false;
   > elseif ( ‘”‘ !== $data[$length-2] ) return false; else return true; }
   > /**
   >  * Retrieve option value based on name of option. * * If the option does
   > not exist or does not have a value, then the return value * will be false. 
   > This is useful to check whether you need to install an option * and is commonly
   > used during installation of plugin options and to test * whether upgrading 
   > is required. * * If the option was serialized then it will be unserialized 
   > when it is returned. * * [@since](https://wordpress.org/support/users/since/)
   > 1.5.0 * [@package](https://wordpress.org/support/users/package/) WordPress *
   > @subpackage Option * @uses apply_filters() Calls ‘pre_option_$option’ before
   > checking the option. * Any value other than false will “short-circuit” the 
   > retrieval of the option * and return the returned value. You should not try
   > to override special options, * but you will not be prevented from doing so.*
   > @uses apply_filters() Calls ‘option_$option’, after checking the option, with*
   > the option value. * * [@param](https://wordpress.org/support/users/param/) 
   > string $option Name of option to retrieve. Expected to not be SQL-escaped. *
   > [@return](https://wordpress.org/support/users/return/) mixed Value set for 
   > the option. */ function get_option( $option, $default = false ) { global $wpdb;
   >  // Allow plugins to short-circuit options.
   >  $pre = apply_filters( ‘pre_option_’.
   > $option, false ); if ( false !== $pre ) return $pre;
   >  $option = trim($option);
   >  if ( empty($option) ) return false;
   >  if ( defined( ‘WP_SETUP_CONFIG’ ) )
   >  return false;
   >  if ( ! defined( ‘WP_INSTALLING’ ) ) {
   >  // prevent non-existent options from
   > triggering multiple queries $notoptions = wp_cache_get( ‘notoptions’, ‘options’);
   > if ( isset( $notoptions[$option] ) ) return $default;
   >  $alloptions = wp_load_alloptions();
   >  if ( isset( $alloptions[$option] ) ) {
   >  $value = $alloptions[$option]; } else{
   > $value = wp_cache_get( $option, ‘options’ );
   >  if ( false === $value ) {
   >  $row = $wpdb->get_row( $wpdb->prepare( “SELECT 
   > option_value FROM $wpdb->options WHERE option_name = %s LIMIT 1”, $option ));
   >  // Has to be get_row instead of get_var because of funkiness with 0, false,
   > null values
   >  if ‘( is_object'( $row )’ )’ { $value = $row->option_value; wp_cache_add(
   > $option, $value, ‘options’ ); } else { // option does not exist, so we must
   > cache its non-existence $notoptions[$option] = true; wp_cache_set( ‘notoptions’,
   > $notoptions, ‘options’ ); return $default; } } } } else { $suppress = $wpdb-
   > >suppress_errors(); $row = $wpdb->get_row( $wpdb->prepare( “SELECT option_value
   > FROM $wpdb->options WHERE option_name = %s LIMIT 1”, $option ) ); $wpdb->suppress_errors(
   > $suppress ); if ( is_object( $row ) ) $value = $row->option_value; else return
   > $default; }
   >  // If home is not set use siteurl.
   >  if ( ‘home’ == $option && ” == $value )
   > return get_option( ‘siteurl’ );
   >  if ( in_array( $option, array(‘siteurl’, ‘home’, ‘category_base’, ‘tag_base’)))
   > 
   > $value = untrailingslashit( $value );
   >  return apply_filters( ‘option_’ . $option, maybe_unserialize( $value ) );
   > }
   > /**
   >  * Protect WordPress special option from being modified. * * Will die if
   > $option is in protected list. Protected options are ‘alloptions’ * and ‘notoptions’
   > options. * * [@since](https://wordpress.org/support/users/since/) 2.2.0 * [@package](https://wordpress.org/support/users/package/)
   > WordPress * @subpackage Option * * [@param](https://wordpress.org/support/users/param/)
   > string $option Option name. */ function wp_protect_special_option( $option ){
   > $protected = array( ‘alloptions’, ‘notoptions’ ); if ( in_array( $option, $
   > protected ) ) wp_die( sprintf( __( ‘%s is a protected WP option and may not
   > be modified’ ), esc_html( $option ) ) ); }
   > /**
   >  * Print option value after sanitizing for forms. * * @uses attr Sanitizes
   > value. * [@since](https://wordpress.org/support/users/since/) 1.5.0 * [@package](https://wordpress.org/support/users/package/)
   > WordPress * @subpackage Option * * [@param](https://wordpress.org/support/users/param/)
   > string $option Option name. */ function form_option( $option ) { echo esc_attr(
   > get_option( $option ) ); }
   > /**
   >  * Loads and caches all autoloaded options, if available or all options.**
   > [@since](https://wordpress.org/support/users/since/) 2.2.0 * [@package](https://wordpress.org/support/users/package/)
   > WordPress * @subpackage Option * * [@return](https://wordpress.org/support/users/return/)
   > array List of all options. */ function wp_load_alloptions() { global $wpdb;
   >  if ( !defined( ‘WP_INSTALLING’ ) || !is_multisite() )
   >  $alloptions = wp_cache_get(‘
   > alloptions’, ‘options’ ); else $alloptions = false;
   >  if ( !$alloptions ) {
   >  $suppress = $wpdb->suppress_errors(); if ( !$alloptions_db
   > = $wpdb->get_results( “SELECT option_name, option_value FROM $wpdb->options
   > WHERE autoload = ‘yes'” ) ) $alloptions_db = $wpdb->get_results( “SELECT option_name,
   > option_value FROM $wpdb->options” ); $wpdb->suppress_errors($suppress); $alloptions
   > = array(); foreach ( (array) $alloptions_db as $o ) { $alloptions[$o->option_name]
   > = $o->option_value; } if ( !defined( ‘WP_INSTALLING’ ) || !is_multisite() )
   > wp_cache_add( ‘alloptions’, $alloptions, ‘options’ ); }
   >  return $alloptions;
   >  }
   > /**
   >  * Loads and caches certain often requested site options if is_multisite()
   > and a peristent cache is not being used. * * [@since](https://wordpress.org/support/users/since/)
   > 3.0.0 * [@package](https://wordpress.org/support/users/package/) WordPress *
   > @subpackage Option * * [@param](https://wordpress.org/support/users/param/)
   > int $site_id Optional site ID for which to query the options. Defaults to the
   > current site. */ function wp_load_core_site_options( $site_id = null ) { global
   > $wpdb, $_wp_using_ext_object_cache;
   >  if ( !is_multisite() || $_wp_using_ext_object_cache || defined( ‘WP_INSTALLING’))
   > 
   > return;
   >  if ( empty($site_id) )
   >  $site_id = $wpdb->siteid;
   >  $core_options = array(‘site_name’, ‘siteurl’, ‘active_sitewide_plugins’, ‘
   > _site_transient_timeout_theme_roots’, ‘_site_transient_theme_roots’, ‘site_admins’,‘
   > can_compress_scripts’, ‘global_terms_enabled’ );
   >  $core_options_in = “‘” . implode(“‘, ‘”, $core_options) . “‘”;
   >  $options =
   > $wpdb->get_results( $wpdb->prepare(“SELECT meta_key, meta_value FROM $wpdb-
   > >sitemeta WHERE meta_key IN ($core_options_in) AND site_id = %d”, $site_id));
   >  foreach ( $options as $option ) {
   >  $key = $option->meta_key; $cache_key = “{
   > $site_id}:$key”; $option->meta_value = maybe_unserialize( $option->meta_value);
   >  wp_cache_set( $cache_key, $option->meta_value, ‘site-options’ );
   >  } }
   > /**
   >  * Update the value of an option that was already added. * * You do not
   > need to serialize values. If the value needs to be serialized, then * it will
   > be serialized before it is inserted into the database. Remember, * resources
   > can not be serialized or added as an option. * * If the option does not exist,
   > then the option will be added with the option * value, but you will not be 
   > able to set whether it is autoloaded. If you want * to set whether an option
   > is autoloaded, then you need to use the add_option(). * * [@since](https://wordpress.org/support/users/since/)
   > 1.0.0 * [@package](https://wordpress.org/support/users/package/) WordPress *
   > @subpackage Option * * @uses apply_filters() Calls ‘pre_update_option_$option’
   > hook to allow overwriting the * option value to be stored. * @uses do_action()
   > Calls ‘update_option’ hook before updating the option. * @uses do_action() 
   > Calls ‘update_option_$option’ and ‘updated_option’ hooks on success. * * [@param](https://wordpress.org/support/users/param/)
   > string $option Option name. Expected to not be SQL-escaped. * [@param](https://wordpress.org/support/users/param/)
   > mixed $newvalue Option value. Expected to not be SQL-escaped. * [@return](https://wordpress.org/support/users/return/)
   > bool False if value was not updated and true if value was updated. */ function
   > update_option( $option, $newvalue ) { global $wpdb;
   >  $option = trim($option);
   >  if ( empty($option) ) return false;
   >  wp_protect_special_option( $option );
   >  if ( is_object($newvalue) )
   >  $newvalue = clone $newvalue;
   >  $newvalue = sanitize_option( $option, $newvalue );
   >  $oldvalue = get_option(
   > $option ); $newvalue = apply_filters( ‘pre_update_option_’ . $option, $newvalue,
   > $oldvalue );
   >  // If the new and old values are the same, no need to update.
   >  if ( $newvalue
   > === $oldvalue ) return false;
   >  if ( false === $oldvalue )
   >  return add_option( $option, $newvalue );
   >  $notoptions = wp_cache_get( ‘notoptions’, ‘options’ );
   >  if ( is_array( $notoptions)&&
   > isset( $notoptions[$option] ) ) { unset( $notoptions[$option] ); wp_cache_set(‘
   > notoptions’, $notoptions, ‘options’ ); }
   >  $_newvalue = $newvalue;
   >  $newvalue = maybe_serialize( $newvalue );
   >  do_action( ‘update_option’, $option, $oldvalue, $_newvalue );
   >  if ( ! defined(‘
   > WP_INSTALLING’ ) ) { $alloptions = wp_load_alloptions(); if ( isset( $alloptions[
   > $option] ) ) { $alloptions[$option] = $_newvalue; wp_cache_set( ‘alloptions’,
   > $alloptions, ‘options’ ); } else { wp_cache_set( $option, $_newvalue, ‘options’);}}
   >  $result = $wpdb->update( $wpdb->options, array( ‘option_value’ => $newvalue),
   > array( ‘option_name’ => $option ) );
   >  if ( $result ) {
   >  do_action( “update_option_{$option}”, $oldvalue, $_newvalue);
   > do_action( ‘updated_option’, $option, $oldvalue, $_newvalue ); return true;}
   > return false; }
   > /**
   >  * Add a new option. * * You do not need to serialize values. If the value
   > needs to be serialized, then * it will be serialized before it is inserted 
   > into the database. Remember, * resources can not be serialized or added as 
   > an option. * * You can create options without values and then add values later.
   > Does not * check whether the option has already been added, but does check 
   > that you * aren’t adding a protected WordPress option. Care should be taken
   > to not name * options the same as the ones which are protected and to not add
   > options * that were already added. * * [@package](https://wordpress.org/support/users/package/)
   > WordPress * @subpackage Option * [@since](https://wordpress.org/support/users/since/)
   > 1.0.0 * * @uses do_action() Calls ‘add_option’ hook before adding the option.*
   > @uses do_action() Calls ‘add_option_$option’ and ‘added_option’ hooks on success.**
   > [@param](https://wordpress.org/support/users/param/) string $option Name of
   > option to add. Expected to not be SQL-escaped. * [@param](https://wordpress.org/support/users/param/)
   > mixed $value Optional. Option value, can be anything. Expected to not be SQL-
   > escaped. * [@param](https://wordpress.org/support/users/param/) mixed $deprecated
   > Optional. Description. Not used anymore. * [@param](https://wordpress.org/support/users/param/)
   > bool $autoload Optional. Default is enabled. Whether to load the option when
   > WordPress starts up. * [@return](https://wordpress.org/support/users/return/)
   > null returns when finished. */ function add_option( $option, $value = ”, $deprecated
   > = ”, $autoload = ‘yes’ ) { global $wpdb;
   >  if ( !empty( $deprecated ) )
   >  _deprecated_argument( __FUNCTION__, ‘2.3’ );
   >  $option = trim($option);
   >  if ( empty($option) ) return false;
   >  wp_protect_special_option( $option );
   >  if ( is_object($value) )
   >  $value = clone $value;
   >  $value = sanitize_option( $option, $value );
   >  // Make sure the option doesn’t already exist. We can check the ‘notoptions’
   > cache before we ask for a db query
   >  $notoptions = wp_cache_get( ‘notoptions’,‘
   > options’ ); if ( !is_array( $notoptions ) || !isset( $notoptions[$option] ))
   > if ( false !== get_option( $option ) ) return;
   >  $_value = $value;
   >  $value = maybe_serialize( $value ); $autoload = ( ‘no’ 
   > === $autoload ) ? ‘no’ : ‘yes’; do_action( ‘add_option’, $option, $_value );
   > if ( ! defined( ‘WP_INSTALLING’ ) ) { if ( ‘yes’ == $autoload ) { $alloptions
   > = wp_load_alloptions(); $alloptions[$option] = $value; wp_cache_set( ‘alloptions’,
   > $alloptions, ‘options’ ); } else { wp_cache_set( $option, $value, ‘options’);}}
   >  // This option exists now
   >  $notoptions = wp_cache_get( ‘notoptions’, ‘options’);//
   > yes, again… we need it to be fresh if ( is_array( $notoptions ) && isset( $
   > notoptions[$option] ) ) { unset( $notoptions[$option] ); wp_cache_set( ‘notoptions’,
   > $notoptions, ‘options’ ); }
   >  $result = $wpdb->query( $wpdb->prepare( “INSERT INTO `$wpdb->options` (`option_name`,`
   > option_value`, `autoload`) VALUES (%s, %s, %s) ON DUPLICATE KEY UPDATE `option_name`
   > = VALUES(`option_name`), `option_value` = VALUES(`option_value`), `autoload`
   > = VALUES(`autoload`)”, $option, $value, $autoload ) );
   >  if ( $result ) {
   >  do_action( “add_option_{$option}”, $option, $_value ); do_action(‘
   > added_option’, $option, $_value ); return true; } return false; }
   > /**
   >  * Removes option by name. Prevents removal of protected WordPress options.**
   > [@package](https://wordpress.org/support/users/package/) WordPress * @subpackage
   > Option * [@since](https://wordpress.org/support/users/since/) 1.2.0 * * @uses
   > do_action() Calls ‘delete_option’ hook before option is deleted. * @uses do_action()
   > Calls ‘deleted_option’ and ‘delete_option_$option’ hooks on success. * * [@param](https://wordpress.org/support/users/param/)
   > string $option Name of option to remove. Expected to not be SQL-escaped. * 
   > [@return](https://wordpress.org/support/users/return/) bool True, if option
   > is successfully deleted. False on failure. */ function delete_option( $option){
   > global $wpdb;
   >  wp_protect_special_option( $option );
   >  // Get the ID, if no ID then return
   >  $row = $wpdb->get_row( $wpdb->prepare(“
   > SELECT autoload FROM $wpdb->options WHERE option_name = %s”, $option ) ); if(
   > is_null( $row ) ) return false; do_action( ‘delete_option’, $option ); $result
   > = $wpdb->query( $wpdb->prepare( “DELETE FROM $wpdb->options WHERE option_name
   > = %s”, $option) ); if ( ! defined( ‘WP_INSTALLING’ ) ) { if ( ‘yes’ == $row-
   > >autoload ) { $alloptions = wp_load_alloptions(); if ( is_array( $alloptions)&&
   > isset( $alloptions[$option] ) ) { unset( $alloptions[$option] ); wp_cache_set(‘
   > alloptions’, $alloptions, ‘options’ ); } } else { wp_cache_delete( $option,‘
   > options’ ); } } if ( $result ) { do_action( “delete_option_$option”, $option);
   > do_action( ‘deleted_option’, $option ); return true; } return false; }
   > /**
   >  * Delete a transient * * [@since](https://wordpress.org/support/users/since/)
   > 2.8.0 * [@package](https://wordpress.org/support/users/package/) WordPress *
   > @subpackage Transient * * @uses do_action() Calls ‘delete_transient_$transient’
   > hook before transient is deleted. * @uses do_action() Calls ‘deleted_transient’
   > hook on success. * * [@param](https://wordpress.org/support/users/param/) string
   > $transient Transient name. Expected to not be SQL-escaped. * [@return](https://wordpress.org/support/users/return/)
   > bool true if successful, false otherwise */ function delete_transient( $transient){
   > global $_wp_using_ext_object_cache;
   >  do_action( ‘delete_transient_’ . $transient, $transient );
   >  if ( $_wp_using_ext_object_cache ) {
   >  $result = wp_cache_delete( $transient,‘
   > transient’ ); } else { $option_timeout = ‘_transient_timeout_’ . $transient;
   > $option = ‘_transient_’ . $transient; $result = delete_option( $option ); if(
   > $result ) delete_option( $option_timeout ); }
   >  if ( $result )
   >  do_action( ‘deleted_transient’, $transient ); return $result;}
   > /**
   >  * Get the value of a transient * * If the transient does not exist or 
   > does not have a value, then the return value * will be false. * * @uses apply_filters()
   > Calls ‘pre_transient_$transient’ hook before checking the transient. * Any 
   > value other than false will “short-circuit” the retrieval of the transient *
   > and return the returned value. * @uses apply_filters() Calls ‘transient_$option’
   > hook, after checking the transient, with * the transient value. * * [@since](https://wordpress.org/support/users/since/)
   > 2.8.0 * [@package](https://wordpress.org/support/users/package/) WordPress *
   > @subpackage Transient * * [@param](https://wordpress.org/support/users/param/)
   > string $transient Transient name. Expected to not be SQL-escaped * [@return](https://wordpress.org/support/users/return/)
   > mixed Value of transient */ function get_transient( $transient ) { global $
   > _wp_using_ext_object_cache;
   >  $pre = apply_filters( ‘pre_transient_’ . $transient, false );
   >  if ( false !
   > == $pre ) return $pre;
   >  if ( $_wp_using_ext_object_cache ) {
   >  $value = wp_cache_get( $transient, ‘
   > transient’ ); } else { $transient_option = ‘_transient_’ . $transient; if (!
   > defined( ‘WP_INSTALLING’ ) ) { // If option is not in alloptions, it is not
   > autoloaded and thus has a timeout $alloptions = wp_load_alloptions(); if ( !
   > isset( $alloptions[$transient_option] ) ) { $transient_timeout = ‘_transient_timeout_’.
   > $transient; if ( get_option( $transient_timeout ) < time() ) { delete_option(
   > $transient_option ); delete_option( $transient_timeout ); return false; } }}
   >  $value = get_option( $transient_option );
   >  }
   >  return apply_filters( ‘transient_’ . $transient, $value );
   >  }
   > /**
   >  * Set/update the value of a transient * * You do not need to serialize
   > values. If the value needs to be serialized, then * it will be serialized before
   > it is set. * * [@since](https://wordpress.org/support/users/since/) 2.8.0 *
   > [@package](https://wordpress.org/support/users/package/) WordPress * @subpackage
   > Transient * * @uses apply_filters() Calls ‘pre_set_transient_$transient’ hook
   > to allow overwriting the * transient value to be stored. * @uses do_action()
   > Calls ‘set_transient_$transient’ and ‘setted_transient’ hooks on success. **
   > [@param](https://wordpress.org/support/users/param/) string $transient Transient
   > name. Expected to not be SQL-escaped. * [@param](https://wordpress.org/support/users/param/)
   > mixed $value Transient value. Expected to not be SQL-escaped. * [@param](https://wordpress.org/support/users/param/)
   > int $expiration Time until expiration in seconds, default 0 * [@return](https://wordpress.org/support/users/return/)
   > bool False if value was not set and true if value was set. */ function set_transient(
   > $transient, $value, $expiration = 0 ) { global $_wp_using_ext_object_cache;
   >  $value = apply_filters( ‘pre_set_transient_’ . $transient, $value );
   >  if ( $_wp_using_ext_object_cache ) {
   >  $result = wp_cache_set( $transient, 
   > $value, ‘transient’, $expiration ); } else { $transient_timeout = ‘_transient_timeout_’.
   > $transient; $transient = ‘_transient_’ . $transient; if ( false === get_option(
   > $transient ) ) { $autoload = ‘yes’; if ( $expiration ) { $autoload = ‘no’; 
   > add_option( $transient_timeout, time() + $expiration, ”, ‘no’ ); } $result 
   > = add_option( $transient, $value, ”, $autoload ); } else { if ( $expiration)
   > update_option( $transient_timeout, time() + $expiration ); $result = update_option(
   > $transient, $value ); } } if ( $result ) { do_action( ‘set_transient_’ . $transient);
   > do_action( ‘setted_transient’, $transient ); } return $result; }
   > /**
   >  * Saves and restores user interface settings stored in a cookie. * * Checks
   > if the current user-settings cookie is updated and stores it. When no * cookie
   > exists (different browser used), adds the last saved cookie restoring * the
   > settings. * * [@package](https://wordpress.org/support/users/package/) WordPress*
   > @subpackage Option * [@since](https://wordpress.org/support/users/since/) 2.7.0*/
   > function wp_user_settings() {
   >  if ( ! is_admin() )
   >  return;
   >  if ( defined(‘DOING_AJAX’) )
   >  return;
   >  if ( ! $user = wp_get_current_user() )
   >  return;
   >  $settings = get_user_option( ‘user-settings’, $user->ID );
   >  if ( isset( $_COOKIE[‘wp-settings-‘ . $user->ID] ) ) {
   >  $cookie = preg_replace(‘/[
   > ^A-Za-z0-9=&_]/’, ”, $_COOKIE[‘wp-settings-‘ . $user->ID] );
   >  if ( ! empty( $cookie ) && strpos( $cookie, ‘=’ ) ) {
   >  if ( $cookie == $settings)
   > return;
   >  $last_time = (int) get_user_option( ‘user-settings-time’, $user->ID );
   >  $saved
   > = isset( $_COOKIE[‘wp-settings-time-‘ . $user->ID]) ? preg_replace( ‘/[^0-9]/’,”,
   > $_COOKIE[‘wp-settings-time-‘ . $user->ID] ) : 0;
   >  if ( $saved > $last_time ) {
   >  update_user_option( $user->ID, ‘user-settings’,
   > $cookie, false ); update_user_option( $user->ID, ‘user-settings-time’, time()–
   > 5, false ); return; } } }
   >  setcookie( ‘wp-settings-‘ . $user->ID, $settings, time() + 31536000, SITECOOKIEPATH);
   > 
   > setcookie( ‘wp-settings-time-‘ . $user->ID, time(), time() + 31536000, SITECOOKIEPATH);
   > $_COOKIE[‘wp-settings-‘ . $user->ID] = $settings; }
   > /**
   >  * Retrieve user interface setting value based on setting name. * * [@package](https://wordpress.org/support/users/package/)
   > WordPress * @subpackage Option * [@since](https://wordpress.org/support/users/since/)
   > 2.7.0 * * [@param](https://wordpress.org/support/users/param/) string $name
   > The name of the setting. * [@param](https://wordpress.org/support/users/param/)
   > string $default Optional default value to return when $name is not set. * [@return](https://wordpress.org/support/users/return/)
   > mixed the last saved user setting or the default value/false if it doesn’t 
   > exist. */ function get_user_setting( $name, $default = false ) {
   >  $all = get_all_user_settings();
   >  return isset($all[$name]) ? $all[$name] : $default;
   >  }
   > /**
   >  * Add or update user interface setting. * * Both $name and $value can 
   > contain only ASCII letters, numbers and underscores. * This function has to
   > be used before any output has started as it calls setcookie(). * * [@package](https://wordpress.org/support/users/package/)
   > WordPress * @subpackage Option * [@since](https://wordpress.org/support/users/since/)
   > 2.8.0 * * [@param](https://wordpress.org/support/users/param/) string $name
   > The name of the setting. * [@param](https://wordpress.org/support/users/param/)
   > string $value The value for the setting. * [@return](https://wordpress.org/support/users/return/)
   > bool true if set successfully/false if not. */ function set_user_setting( $
   > name, $value ) {
   >  if ( headers_sent() )
   >  return false;
   >  $all = get_all_user_settings();
   >  $name = preg_replace( ‘/[^A-Za-z0-9_]+/’,”,
   > $name );
   >  if ( empty($name) )
   >  return false;
   >  $all[$name] = $value;
   >  return wp_set_all_user_settings($all);
   >  }
   > /**
   >  * Delete user interface settings. * * Deleting settings would reset them
   > to the defaults. * This function has to be used before any output has started
   > as it calls setcookie(). * * [@package](https://wordpress.org/support/users/package/)
   > WordPress * @subpackage Option * [@since](https://wordpress.org/support/users/since/)
   > 2.7.0 * * [@param](https://wordpress.org/support/users/param/) mixed $names
   > The name or array of names of the setting to be deleted. * [@return](https://wordpress.org/support/users/return/)
   > bool true if deleted successfully/false if not. */ function delete_user_setting(
   > $names ) {
   >  if ( headers_sent() )
   >  return false;
   >  $all = get_all_user_settings();
   >  $names = (array) $names;
   >  foreach ( $names as $name ) {
   >  if ( isset($all[$name]) ) { unset($all[$name]);
   > $deleted = true; } }
   >  if ( isset($deleted) )
   >  return wp_set_all_user_settings($all);
   >  return false;
   >  }
   > /**
   >  * Retrieve all user interface settings. * * [@package](https://wordpress.org/support/users/package/)
   > WordPress * @subpackage Option * [@since](https://wordpress.org/support/users/since/)
   > 2.7.0 * * [@return](https://wordpress.org/support/users/return/) array the 
   > last saved user settings or empty array. */ function get_all_user_settings(){
   > global $_updated_user_settings;
   >  if ( ! $user = wp_get_current_user() )
   >  return array();
   >  if ( isset($_updated_user_settings) && is_array($_updated_user_settings) )
   > 
   > return $_updated_user_settings;
   >  $all = array();
   >  if ( isset($_COOKIE[‘wp-settings-‘ . $user->ID]) ) { $cookie
   > = preg_replace( ‘/[^A-Za-z0-9=&_]/’, ”, $_COOKIE[‘wp-settings-‘ . $user->ID]);
   >  if ( $cookie && strpos($cookie, ‘=’) ) // the ‘=’ cannot be 1st char
   >  parse_str(
   > $cookie, $all);
   >  } else {
   >  $option = get_user_option(‘user-settings’, $user->ID); if ( $option&&
   > is_string($option) ) parse_str( $option, $all ); }
   >  return $all;
   >  }
   > /**
   >  * Private. Set all user interface settings. * * [@package](https://wordpress.org/support/users/package/)
   > WordPress * @subpackage Option * [@since](https://wordpress.org/support/users/since/)
   > 2.8.0 * * [@param](https://wordpress.org/support/users/param/) unknown $all*
   > [@return](https://wordpress.org/support/users/return/) bool */ function wp_set_all_user_settings(
   > $all) { global $_updated_user_settings;
   >  if ( ! $user = wp_get_current_user() )
   >  return false;
   >  $_updated_user_settings = $all;
   >  $settings = ”; foreach ( $all as $k => $v){
   > $v = preg_replace( ‘/[^A-Za-z0-9_]+/’, ”, $v ); $settings .= $k . ‘=’ . $v .‘&’;}
   >  $settings = rtrim($settings, ‘&’);
   >  update_user_option( $user->ID, ‘user-settings’, $settings, false );
   >  update_user_option(
   > $user->ID, ‘user-settings-time’, time(), false );
   >  return true;
   >  }
   > /**
   >  * Delete the user settings of the current user. * * [@package](https://wordpress.org/support/users/package/)
   > WordPress * @subpackage Option * [@since](https://wordpress.org/support/users/since/)
   > 2.7.0 */ function delete_all_user_settings() { if ( ! $user = wp_get_current_user())
   > return;
   >  update_user_option( $user->ID, ‘user-settings’, ”, false );
   >  setcookie(‘wp-
   > settings-‘ . $user->ID, ‘ ‘, time() – 31536000, SITECOOKIEPATH); }
   > /**
   >  * Serialize data, if needed. * * [@since](https://wordpress.org/support/users/since/)
   > 2.0.5 * * [@param](https://wordpress.org/support/users/param/) mixed $data 
   > Data that might be serialized. * [@return](https://wordpress.org/support/users/return/)
   > mixed A scalar data */ function maybe_serialize( $data ) { if ( is_array( $
   > data ) || is_object( $data ) ) return serialize( $data );
   >  if ( is_serialized( $data ) )
   >  return serialize( $data );
   >  return $data;
   >  }
   > /**
   >  * Retrieve post title from XMLRPC XML. * * If the title element is not
   > part of the XML, then the default post title from * the $post_default_title
   > will be used instead. * * [@package](https://wordpress.org/support/users/package/)
   > WordPress * @subpackage XMLRPC * [@since](https://wordpress.org/support/users/since/)
   > 0.71 * * [@global](https://wordpress.org/support/users/global/) string $post_default_title
   > Default XMLRPC post title. * * [@param](https://wordpress.org/support/users/param/)
   > string $content XMLRPC XML Request content * [@return](https://wordpress.org/support/users/return/)
   > string Post title */ function xmlrpc_getposttitle( $content ) { global $post_default_title;
   > if ( preg_match( ‘/<title>(.+?)<\/title>/is’, $content, $matchtitle ) ) { $
   > post_title = $matchtitle[1]; } else { $post_title = $post_default_title; } 
   > return $post_title; }
   > /**
   >  * Retrieve the post category or categories from XMLRPC XML. * * If the
   > category element is not found, then the default post category will be * used.
   > The return type then would be what $post_default_category. If the * category
   > is found, then it will always be an array. * * [@package](https://wordpress.org/support/users/package/)
   > WordPress * @subpackage XMLRPC * [@since](https://wordpress.org/support/users/since/)
   > 0.71 * * [@global](https://wordpress.org/support/users/global/) string $post_default_category
   > Default XMLRPC post category. * * [@param](https://wordpress.org/support/users/param/)
   > string $content XMLRPC XML Request content * [@return](https://wordpress.org/support/users/return/)
   > string|array List of categories or category name. */ function xmlrpc_getpostcategory(
   > $content ) { global $post_default_category; if ( preg_match( ‘/<category>(.
   > +?)<\/category>/is’, $content, $matchcat ) ) { $post_category = trim( $matchcat[
   > 1], ‘,’ ); $post_category = explode( ‘,’, $post_category ); } else { $post_category
   > = $post_default_category; } return $post_category; }
   > /**
   >  * XMLRPC XML content without title and category elements. * * [@package](https://wordpress.org/support/users/package/)
   > WordPress * @subpackage XMLRPC * [@since](https://wordpress.org/support/users/since/)
   > 0.71 * * [@param](https://wordpress.org/support/users/param/) string $content
   > XMLRPC XML Request content * [@return](https://wordpress.org/support/users/return/)
   > string XMLRPC XML Request content without title and category elements. */ function
   > xmlrpc_removepostdata( $content ) { $content = preg_replace( ‘/<title>(.+?)
   > <\/title>/si’, ”, $content ); $content = preg_replace( ‘/<category>(.+?)<\/
   > category>/si’, ”, $content ); $content = trim( $content ); return $content;}
   > /**
   >  * Open the file handle for debugging. * * This function is used for XMLRPC
   > feature, but it is general purpose enough * to be used in anywhere. * * [@see](https://wordpress.org/support/users/see/)
   > fopen() for mode options. * [@package](https://wordpress.org/support/users/package/)
   > WordPress * @subpackage Debug * [@since](https://wordpress.org/support/users/since/)
   > 0.71 * @uses $debug Used for whether debugging is enabled. * * [@param](https://wordpress.org/support/users/param/)
   > string $filename File path to debug file. * [@param](https://wordpress.org/support/users/param/)
   > string $mode Same as fopen() mode parameter. * [@return](https://wordpress.org/support/users/return/)
   > bool|resource File handle. False on failure. */ function debug_fopen( $filename,
   > $mode ) { global $debug; if ( 1 == $debug ) { $fp = fopen( $filename, $mode);
   > return $fp; } else { return false; } }
   > /**
   >  * Write contents to the file used for debugging. * * Technically, this
   > can be used to write to any file handle when the global * $debug is set to 
   > 1 or true. * * [@package](https://wordpress.org/support/users/package/) WordPress*
   > @subpackage Debug * [@since](https://wordpress.org/support/users/since/) 0.71*
   > @uses $debug Used for whether debugging is enabled. * * [@param](https://wordpress.org/support/users/param/)
   > resource $fp File handle for debugging file. * [@param](https://wordpress.org/support/users/param/)
   > string $string Content to write to debug file. */ function debug_fwrite( $fp,
   > $string ) { global $debug; if ( 1 == $debug ) fwrite( $fp, $string ); }
   > /**
   >  * Close the debugging file handle. * * Technically, this can be used to
   > close any file handle when the global $debug * is set to 1 or true. * * [@package](https://wordpress.org/support/users/package/)
   > WordPress * @subpackage Debug * [@since](https://wordpress.org/support/users/since/)
   > 0.71 * @uses $debug Used for whether debugging is enabled. * * [@param](https://wordpress.org/support/users/param/)
   > resource $fp Debug File handle. */ function debug_fclose( $fp ) { global $debug;
   > if ( 1 == $debug ) fclose( $fp ); }
   > /**
   >  * Check content for video and audio links to add as enclosures. * * Will
   > not add enclosures that have already been added and will * remove enclosures
   > that are no longer in the post. This is called as * pingbacks and trackbacks.**
   > [@package](https://wordpress.org/support/users/package/) WordPress * [@since](https://wordpress.org/support/users/since/)
   > 1.5.0 * * @uses $wpdb * * [@param](https://wordpress.org/support/users/param/)
   > string $content Post Content * [@param](https://wordpress.org/support/users/param/)
   > int $post_ID Post ID */ function do_enclose( $content, $post_ID ) { global 
   > $wpdb;
   >  //TODO: Tidy this ghetto code up and make the debug code optional
   >  include_once(
   > ABSPATH . WPINC . ‘/class-IXR.php’ );
   >  $log = debug_fopen( ABSPATH . ‘enclosures.log’, ‘a’ );
   >  $post_links = array();
   > debug_fwrite( $log, ‘BEGIN ‘ . date( ‘YmdHis’, time() ) . “\n” );
   >  $pung = get_enclosed( $post_ID );
   >  $ltrs = ‘\w’;
   >  $gunk = ‘/#~:.?+=&%@!\-‘; $punc = ‘.:?\-‘; $any = $ltrs . $
   > gunk . $punc;
   >  preg_match_all( “{\b http : [$any] +? (?= [$punc] * [^$any] | $)}x”, $content,
   > $post_links_temp );
   >  debug_fwrite( $log, ‘Post contents:’ );
   >  debug_fwrite( $log, $content . “\
   > n” );
   >  foreach ( $pung as $link_test ) {
   >  if ( !in_array( $link_test, $post_links_temp[
   > 0] ) ) { // link no longer in post $mid = $wpdb->get_col( $wpdb->prepare(“SELECT
   > meta_id FROM $wpdb->postmeta WHERE post_id = %d AND meta_key = ‘enclosure’ 
   > AND meta_value LIKE (%s)”, $post_ID, like_escape( $link_test ) . ‘%’) ); do_action(‘
   > delete_postmeta’, $mid ); $wpdb->query( $wpdb->prepare(“DELETE FROM $wpdb->
   > postmeta WHERE meta_id IN(%s)”, implode( ‘,’, $mid ) ) ); do_action( ‘deleted_postmeta’,
   > $mid ); } }
   >  foreach ( (array) $post_links_temp[0] as $link_test ) {
   >  if ( !in_array( $
   > link_test, $pung ) ) { // If we haven’t pung it already $test = @parse_url(
   > $link_test ); if ( false === $test ) continue; if ( isset( $test[‘query’] ))
   > $post_links[] = $link_test; elseif ( isset($test[‘path’]) && ( $test[‘path’]!
   > = ‘/’ ) && ($test[‘path’] != ” ) ) $post_links[] = $link_test; } }
   >  foreach ( (array) $post_links as $url ) {
   >  if ( $url != ” && !$wpdb->get_var(
   > $wpdb->prepare( “SELECT post_id FROM $wpdb->postmeta WHERE post_id = %d AND
   > meta_key = ‘enclosure’ AND meta_value LIKE (%s)”, $post_ID, like_escape( $url).‘%’))){
   >  if ( $headers = wp_get_http_headers( $url) ) {
   >  $len = (int) $headers[‘content-
   > length’]; $type = $headers[‘content-type’]; $allowed_types = array( ‘video’,‘
   > audio’ );
   >  // Check to see if we can figure out the mime type from
   >  // the extension 
   > $url_parts = @parse_url( $url ); if ( false !== $url_parts ) { $extension =
   > pathinfo( $url_parts[‘path’], PATHINFO_EXTENSION ); if ( !empty( $extension)){
   > foreach ( get_allowed_mime_types( ) as $exts => $mime ) { if ( preg_match( ‘!
   > ^(‘ . $exts . ‘)$!i’, $extension ) ) { $type = $mime; break; } } } }
   >  if ( in_array( substr( $type, 0, strpos( $type, “/” ) ), $allowed_types ) ){
   > 
   > $meta_value = “$url\n$len\n$type\n”; $wpdb->insert($wpdb->postmeta, array(‘
   > post_id’ => $post_ID, ‘meta_key’ => ‘enclosure’, ‘meta_value’ => $meta_value));
   > do_action( ‘added_postmeta’, $wpdb->insert_id, $post_ID, ‘enclosure’, $meta_value);}}}}}
   > /**
   >  * Perform a HTTP HEAD or GET request. * * If $file_path is a writable 
   > filename, this will do a GET request and write * the file to that path. * *
   > [@since](https://wordpress.org/support/users/since/) 2.5.0 * * [@param](https://wordpress.org/support/users/param/)
   > string $url URL to fetch. * [@param](https://wordpress.org/support/users/param/)
   > string|bool $file_path Optional. File path to write request to. * [@param](https://wordpress.org/support/users/param/)
   > int $red (private) The number of Redirects followed, Upon 5 being hit, returns
   > false. * [@return](https://wordpress.org/support/users/return/) bool|string
   > False on failure and string of headers if HEAD request. */ function wp_get_http(
   > $url, $file_path = false, $red = 1 ) { @set_time_limit( 60 );
   >  if ( $red > 5 )
   >  return false;
   >  $options = array();
   >  $options[‘redirection’] = 5;
   >  if ( false == $file_path )
   >  $options[‘method’] = ‘HEAD’; else $options[‘method’]
   > = ‘GET’;
   >  $response = wp_remote_request($url, $options);
   >  if ( is_wp_error( $response ) )
   >  return false;
   >  $headers = wp_remote_retrieve_headers( $response );
   >  $headers[‘response’] 
   > = wp_remote_retrieve_response_code( $response );
   >  // WP_HTTP no longer follows redirects for HEAD requests.
   >  if ( ‘HEAD’ == 
   > $options[‘method’] && in_array($headers[‘response’], array(301, 302)) && isset(
   > $headers[‘location’] ) ) { return wp_get_http( $headers[‘location’], $file_path,
   > ++$red ); }
   >  if ( false == $file_path )
   >  return $headers;
   >  // GET request – write it to the supplied filename
   >  $out_fp = fopen($file_path,‘
   > w’); if ( !$out_fp ) return $headers;
   >  fwrite( $out_fp, wp_remote_retrieve_body( $response ) );
   >  fclose($out_fp);
   > clearstatcache();
   >  return $headers;
   >  }
   > /**
   >  * Retrieve HTTP Headers from URL. * * [@since](https://wordpress.org/support/users/since/)
   > 1.5.1 * * [@param](https://wordpress.org/support/users/param/) string $url *
   > [@param](https://wordpress.org/support/users/param/) bool $deprecated Not Used.*
   > [@return](https://wordpress.org/support/users/return/) bool|string False on
   > failure, headers on success. */ function wp_get_http_headers( $url, $deprecated
   > = false ) { if ( !empty( $deprecated ) ) _deprecated_argument( __FUNCTION__,‘
   > 2.7’ );
   >  $response = wp_remote_head( $url );
   >  if ( is_wp_error( $response ) )
   >  return false;
   >  return wp_remote_retrieve_headers( $response );
   >  }
   > /**
   >  * Whether today is a new day. * * [@since](https://wordpress.org/support/users/since/)
   > 0.71 * @uses $day Today * @uses $previousday Previous day * * [@return](https://wordpress.org/support/users/return/)
   > int 1 when new day, 0 if not a new day. */ function is_new_day() { global $
   > currentday, $previousday; if ( $currentday != $previousday ) return 1; else
   > return 0; }
   > /**
   >  * Build URL query based on an associative and, or indexed array. * * This
   > is a convenient function for easily building url queries. It sets the * separator
   > to ‘&’ and uses _http_build_query() function. * * [@see](https://wordpress.org/support/users/see/)
   > _http_build_query() Used to build the query * [@link](https://wordpress.org/support/users/link/)
   > [http://us2.php.net/manual/en/function.http-build-query.php](http://us2.php.net/manual/en/function.http-build-query.php)
   > more on what * http_build_query() does. * * [@since](https://wordpress.org/support/users/since/)
   > 2.3.0 * * [@param](https://wordpress.org/support/users/param/) array $data 
   > URL-encode key/value pairs. * [@return](https://wordpress.org/support/users/return/)
   > string URL encoded string */ function build_query( $data ) { return _http_build_query(
   > $data, null, ‘&’, ”, false ); }
   > // from php.net (modified by Mark Jaquith to behave like the native PHP5 function)
   > 
   > function _http_build_query($data, $prefix=null, $sep=null, $key=”, $urlencode
   > =true) { $ret = array();
   >  foreach ( (array) $data as $k => $v ) {
   >  if ( $urlencode) $k = urlencode($
   > k); if ( is_int($k) && $prefix != null ) $k = $prefix.$k; if ( !empty($key))
   > $k = $key . ‘%5B’ . $k . ‘%5D’; if ( $v === NULL ) continue; elseif ( $v ==
   > = FALSE ) $v = ‘0’;
   >  if ( is_array($v) || is_object($v) )
   >  array_push($ret,_http_build_query($v,”,
   > $sep, $k, $urlencode)); elseif ( $urlencode ) array_push($ret, $k.’=’.urlencode(
   > $v)); else array_push($ret, $k.’=’.$v); }
   >  if ( NULL === $sep )
   >  $sep = ini_get(‘arg_separator.output’);
   >  return implode($sep, $ret);
   >  }
   > /**
   >  * Retrieve a modified URL query string. * * You can rebuild the URL and
   > append a new query variable to the URL query by * using this function. You 
   > can also retrieve the full URL with query data. * * Adding a single key & value
   > or an associative array. Setting a key value to * emptystring removes the key.
   > Omitting oldquery_or_uri uses the $_SERVER * value. * * [@since](https://wordpress.org/support/users/since/)
   > 1.5.0 * * [@param](https://wordpress.org/support/users/param/) mixed $param1
   > Either newkey or an associative_array * [@param](https://wordpress.org/support/users/param/)
   > mixed $param2 Either newvalue or oldquery or uri * [@param](https://wordpress.org/support/users/param/)
   > mixed $param3 Optional. Old query or uri * [@return](https://wordpress.org/support/users/return/)
   > string New URL query string. */ function add_query_arg() { $ret = ”; if ( is_array(
   > func_get_arg(0) ) ) { if ( @func_num_args() < 2 || false === @func_get_arg(
   > 1 ) ) $uri = $_SERVER[‘REQUEST_URI’]; else $uri = @func_get_arg( 1 ); } else{
   > if ( @func_num_args() < 3 || false === @func_get_arg( 2 ) ) $uri = $_SERVER[‘
   > REQUEST_URI’]; else $uri = @func_get_arg( 2 ); }
   >  if ( $frag = strstr( $uri, ‘#’ ) )
   >  $uri = substr( $uri, 0, -strlen( $frag));
   > else $frag = ”;
   >  if ( preg_match( ‘|^https?://|i’, $uri, $matches ) ) {
   >  $protocol = $matches[
   > 0]; $uri = substr( $uri, strlen( $protocol ) ); } else { $protocol = ”; }
   >  if ( strpos( $uri, ‘?’ ) !== false ) {
   >  $parts = explode( ‘?’, $uri, 2 ); 
   > if ( 1 == count( $parts ) ) { $base = ‘?’; $query = $parts[0]; } else { $base
   > = $parts[0] . ‘?’; $query = $parts[1]; } } elseif ( !empty( $protocol ) || 
   > strpos( $uri, ‘=’ ) === false ) { $base = $uri . ‘?’; $query = ”; } else { 
   > $base = ”; $query = $uri; }
   >  wp_parse_str( $query, $qs );
   >  $qs = urlencode_deep( $qs ); // this re-URL-
   > encodes things that were already in the query string if ( is_array( func_get_arg(
   > 0 ) ) ) { $kayvees = func_get_arg( 0 ); $qs = array_merge( $qs, $kayvees );}
   > else { $qs[func_get_arg( 0 )] = func_get_arg( 1 ); }
   >  foreach ( (array) $qs as $k => $v ) {
   >  if ( $v === false ) unset( $qs[$k] );}
   >  $ret = build_query( $qs );
   >  $ret = trim( $ret, ‘?’ ); $ret = preg_replace(‘#
   > =(&|$)#’, ‘$1’, $ret ); $ret = $protocol . $base . $ret . $frag; $ret = rtrim(
   > $ret, ‘?’ ); return $ret; }
   > /**
   >  * Removes an item or list from the query string. * * [@since](https://wordpress.org/support/users/since/)
   > 1.5.0 * * [@param](https://wordpress.org/support/users/param/) string|array
   > $key Query key or keys to remove. * [@param](https://wordpress.org/support/users/param/)
   > bool $query When false uses the $_SERVER value. * [@return](https://wordpress.org/support/users/return/)
   > string New URL query string. */ function remove_query_arg( $key, $query=false){
   > if ( is_array( $key ) ) { // removing multiple keys foreach ( $key as $k ) 
   > $query = add_query_arg( $k, false, $query ); return $query; } return add_query_arg(
   > $key, false, $query ); }
   > /**
   >  * Walks the array while sanitizing the contents. * * [@since](https://wordpress.org/support/users/since/)
   > 0.71 * * [@param](https://wordpress.org/support/users/param/) array $array 
   > Array to used to walk while sanitizing contents. * [@return](https://wordpress.org/support/users/return/)
   > array Sanitized $array. */ function add_magic_quotes( $array ) { foreach ( (
   > array) $array as $k => $v ) { if ( is_array( $v ) ) { $array[$k] = add_magic_quotes(
   > $v ); } else { $array[$k] = addslashes( $v ); } } return $array; }
   > /**
   >  * HTTP request for URI to retrieve content. * * [@since](https://wordpress.org/support/users/since/)
   > 1.5.1 * @uses wp_remote_get() * * [@param](https://wordpress.org/support/users/param/)
   > string $uri URI/URL of web page to retrieve. * [@return](https://wordpress.org/support/users/return/)
   > bool|string HTTP content. False on failure. */ function wp_remote_fopen( $uri){
   > $parsed_url = @parse_url( $uri );
   >  if ( !$parsed_url || !is_array( $parsed_url ) )
   >  return false;
   >  $options = array();
   >  $options[‘timeout’] = 10;
   >  $response = wp_remote_get( $uri, $options );
   >  if ( is_wp_error( $response ) )
   >  return false;
   >  return wp_remote_retrieve_body( $response );
   >  }
   > /**
   >  * Set up the WordPress query. * * [@since](https://wordpress.org/support/users/since/)
   > 2.0.0 * * [@param](https://wordpress.org/support/users/param/) string $query_vars
   > Default WP_Query arguments. */ function wp( $query_vars = ” ) { global $wp,
   > $wp_query, $wp_the_query; $wp->main( $query_vars );
   >  if ( !isset($wp_the_query) )
   >  $wp_the_query = $wp_query; }
   > /**
   >  * Retrieve the description for the HTTP status. * * [@since](https://wordpress.org/support/users/since/)
   > 2.3.0 * * [@param](https://wordpress.org/support/users/param/) int $code HTTP
   > status code. * [@return](https://wordpress.org/support/users/return/) string
   > Empty string if not found, or description if found. */ function get_status_header_desc(
   > $code ) { global $wp_header_to_desc;
   >  $code = absint( $code );
   >  if ( !isset( $wp_header_to_desc ) ) {
   >  $wp_header_to_desc = array( 100 => ‘
   > Continue’, 101 => ‘Switching Protocols’, 102 => ‘Processing’,
   >  200 => ‘OK’,
   >  201 => ‘Created’, 202 => ‘Accepted’, 203 => ‘Non-Authoritative
   > Information’, 204 => ‘No Content’, 205 => ‘Reset Content’, 206 => ‘Partial 
   > Content’, 207 => ‘Multi-Status’, 226 => ‘IM Used’,
   >  300 => ‘Multiple Choices’,
   >  301 => ‘Moved Permanently’, 302 => ‘Found’, 303
   > => ‘See Other’, 304 => ‘Not Modified’, 305 => ‘Use Proxy’, 306 => ‘Reserved’,
   > 307 => ‘Temporary Redirect’,
   >  400 => ‘Bad Request’,
   >  401 => ‘Unauthorized’, 402 => ‘Payment Required’, 403
   > => ‘Forbidden’, 404 => ‘Not Found’, 405 => ‘Method Not Allowed’, 406 => ‘Not
   > Acceptable’, 407 => ‘Proxy Authentication Required’, 408 => ‘Request Timeout’,
   > 409 => ‘Conflict’, 410 => ‘Gone’, 411 => ‘Length Required’, 412 => ‘Precondition
   > Failed’, 413 => ‘Request Entity Too Large’, 414 => ‘Request-URI Too Long’, 
   > 415 => ‘Unsupported Media Type’, 416 => ‘Requested Range Not Satisfiable’, 
   > 417 => ‘Expectation Failed’, 422 => ‘Unprocessable Entity’, 423 => ‘Locked’,
   > 424 => ‘Failed Dependency’, 426 => ‘Upgrade Required’,
   >  500 => ‘Internal Server Error’,
   >  501 => ‘Not Implemented’, 502 => ‘Bad Gateway’,
   > 503 => ‘Service Unavailable’, 504 => ‘Gateway Timeout’, 505 => ‘HTTP Version
   > Not Supported’, 506 => ‘Variant Also Negotiates’, 507 => ‘Insufficient Storage’,
   > 510 => ‘Not Extended’ ); }
   >  if ( isset( $wp_header_to_desc[$code] ) )
   >  return $wp_header_to_desc[$code];
   > else return ”; }
   > /**
   >  * Set HTTP status header. * * [@since](https://wordpress.org/support/users/since/)
   > 2.0.0 * @uses apply_filters() Calls ‘status_header’ on status header string,
   > HTTP * HTTP code, HTTP code description, and protocol string as separate * 
   > parameters. * * [@param](https://wordpress.org/support/users/param/) int $header
   > HTTP status code * [@return](https://wordpress.org/support/users/return/) unknown*/
   > function status_header( $header ) { $text = get_status_header_desc( $header);
   >  if ( empty( $text ) )
   >  return false;
   >  $protocol = $_SERVER[“SERVER_PROTOCOL”];
   >  if ( ‘HTTP/1.1’ != $protocol && ‘
   > HTTP/1.0’ != $protocol ) $protocol = ‘HTTP/1.0’; $status_header = “$protocol
   > $header $text”; if ( function_exists( ‘apply_filters’ ) ) $status_header = 
   > apply_filters( ‘status_header’, $status_header, $header, $text, $protocol );
   >  return [@header](https://wordpress.org/support/users/header/)( $status_header,
   > true, $header );
   >  }
   > /**
   >  * Gets the header information to prevent caching. * * The several different
   > headers cover the different ways cache prevention is handled * by different
   > browsers * * [@since](https://wordpress.org/support/users/since/) 2.8.0 * *
   > @uses apply_filters() * [@return](https://wordpress.org/support/users/return/)
   > array The associative array of header names and field values. */ function wp_get_nocache_headers(){
   > $headers = array( Expires’ => ‘Wed, 11 Jan 1984 05:00:00 GMT’, Last-Modified’
   > => gmdate( ‘D, d M Y H:i:s’ ) . ‘ GMT’, Cache-Control’ => ‘no-cache, must-revalidate,
   > max-age=0’, Pragma’ => ‘no-cache’, );
   >  if ( function_exists(‘apply_filters’) ) {
   >  $headers = (array) apply_filters(‘
   > nocache_headers’, $headers); } return $headers; }
   > /**
   >  * Sets the headers to prevent caching for the different browsers. * * 
   > Different browsers support different nocache headers, so several headers must*
   > be sent so that all of them get the point that no caching should occur. * *
   > [@since](https://wordpress.org/support/users/since/) 2.0.0 * @uses wp_get_nocache_headers()*/
   > function nocache_headers() { $headers = wp_get_nocache_headers(); foreach( 
   > $headers as $name => $field_value ) [@header](https://wordpress.org/support/users/header/)(“{
   > $name}: {$field_value}”); }
   > /**
   >  * Set the headers for caching for 10 days with JavaScript content type.**
   > [@since](https://wordpress.org/support/users/since/) 2.1.0 */ function cache_javascript_headers(){
   > $expiresOffset = 864000; // 10 days header( “Content-Type: text/javascript;
   > charset=” . get_bloginfo( ‘charset’ ) ); header( “Vary: Accept-Encoding” );//
   > Handle proxies header( “Expires: ” . gmdate( “D, d M Y H:i:s”, time() + $expiresOffset).”
   > GMT” ); }
   > /**
   >  * Retrieve the number of database queries during the WordPress execution.**
   > [@since](https://wordpress.org/support/users/since/) 2.0.0 * * [@return](https://wordpress.org/support/users/return/)
   > int Number of database queries */ function get_num_queries() { global $wpdb;
   > return $wpdb->num_queries; }
   > /**
   >  * Whether input is yes or no. Must be ‘y’ to be true. * * [@since](https://wordpress.org/support/users/since/)
   > 1.0.0 * * [@param](https://wordpress.org/support/users/param/) string $yn Character
   > string containing either ‘y’ or ‘n’ * [@return](https://wordpress.org/support/users/return/)
   > bool True if yes, false on anything else */ function bool_from_yn( $yn ) { 
   > return ( strtolower( $yn ) == ‘y’ ); }
   > /**
   >  * Loads the feed template from the use of an action hook. * * If the feed
   > action does not have a hook, then the function will die with a * message telling
   > the visitor that the feed is not valid. * * It is better to only have one hook
   > for each feed. * * [@since](https://wordpress.org/support/users/since/) 2.1.0*
   > @uses $wp_query Used to tell if the use a comment feed. * @uses do_action()
   > Calls ‘do_feed_$feed’ hook, if a hook exists for the feed. */ function do_feed(){
   > global $wp_query;
   >  $feed = get_query_var( ‘feed’ );
   >  // Remove the pad, if present.
   >  $feed = preg_replace( ‘/^_+/’, ”, $feed );
   >  if ( $feed == ” || $feed == ‘feed’ )
   >  $feed = get_default_feed();
   >  $hook = ‘do_feed_’ . $feed;
   >  if ( !has_action($hook) ) { $message = sprintf(
   > __( ‘ERROR: %s is not a valid feed template.’ ), esc_html($feed)); wp_die( 
   > $message, ”, array( ‘response’ => 404 ) ); }
   >  do_action( $hook, $wp_query->is_comment_feed );
   >  }
   > /**
   >  * Load the RDF RSS 0.91 Feed template. * * [@since](https://wordpress.org/support/users/since/)
   > 2.1.0 */ function do_feed_rdf() { load_template( ABSPATH . WPINC . ‘/feed-rdf.
   > php’ ); }
   > /**
   >  * Load the RSS 1.0 Feed Template

Viewing 1 replies (of 1 total)

 *  [vtxyzzy](https://wordpress.org/support/users/vtxyzzy/)
 * (@vtxyzzy)
 * [14 years, 7 months ago](https://wordpress.org/support/topic/i-need-help-php-parse-error/#post-2339202)
 * Because this is in a WordPress core file, you should try to upload a fresh copy
   using ftp.
 * If you can’t do that, take a backup of your site first, then re-install WordPress
   by going to Admin->Dashboard->Updates and clicking ‘Re-install Now’. Be aware
   that you might need to reassign your menus or restore some other settings after
   the re-install.

Viewing 1 replies (of 1 total)

The topic ‘I NEED HELP: PHP Parse error’ is closed to new replies.

## Tags

 * [php parse error](https://wordpress.org/support/topic-tag/php-parse-error/)

 * In: [Fixing WordPress](https://wordpress.org/support/forum/how-to-and-troubleshooting/)
 * 1 reply
 * 2 participants
 * Last reply from: [vtxyzzy](https://wordpress.org/support/users/vtxyzzy/)
 * Last activity: [14 years, 7 months ago](https://wordpress.org/support/topic/i-need-help-php-parse-error/#post-2339202)
 * Status: not resolved

## Topics

### Topics with no replies

### Non-support topics

### Resolved topics

### Unresolved topics

### All topics
