WordPress.org

Ready to get started?Download WordPress

Forums

[resolved] CGI Error from IIS (10 posts)

  1. iain010100
    Member
    Posted 6 years ago #

    I'm trying to install WP on an IIS server through FTP. I uploaded all the files, set up a mySQL database, and entered the proper database, username, and password into wp-config.php, and corrected the DB_HOST (I was the 1% that needed to do this).

    I'm getting this error from wp-config.php.

    CGI Error
    The specified CGI application misbehaved by not returning a complete set of HTTP headers

    I've searched for answers and came up with two pages that don't work. The code in the solution mentioned in this thread (http://wordpress.org/support/topic/131976) was removed and moved here (http://wordpress.pastebin.ca/893007), which returns "post has expired" error.

    I think I need to correct some path values from UNIX to Windows filesystem, but I'm not sure about the details.

    System: Windows NT IIS04201 5.2 build 3790
    Build Date: May 4 2007 13:29:21
    Server API: CGI/FastCGI
    PHP Version: 4.4.7
    PERL Version: 5.8.8
    PHP API: 20020918
    PHP Extension: 20020429
    Zend Extension: 20050606
    MySQL Version: 5.0.45

    Any help is appreciated,
    -- Iain

  2. Jeremy Clark
    Moderator
    Posted 6 years ago #

    When you edited the wp-config.php file what program did you use if it wasn't notepad then you'll need to delete the one from the server and upload a new fresh one that you edited with notepad. Also make sure there are no blank lines after the closing ?> of that file.

  3. andrewscott
    Member
    Posted 6 years ago #

    I have the same issues, that did not handle it.

  4. Scott Kingsley Clark
    Member
    Posted 6 years ago #

    I'm having the same issue as well, with both 2.3.3 and 2.5

  5. iain010100
    Member
    Posted 6 years ago #

    I use a straight ASCII text editor and I have not added any spaces before <? and after ?>.

  6. iain010100
    Member
    Posted 6 years ago #

    Here's the solution. I found this by

    1) googling this link: http://wordpress.pastebin.ca/893007

    2) clicking on "Cached."

    A great way to view an expired post.

    Google's cached link.

    --------------------------

    This code replaces wp-includes/wp-db.php

    <?php
    //  WordPress DB Class
    
    //  ORIGINAL CODE FROM:
    //  Justin Vincent (justin@visunet.ie)
    //	http://php.justinvincent.com
    
    define('EZSQL_VERSION', 'WP1.25');
    define('OBJECT', 'OBJECT', true);
    define('ARRAY_A', 'ARRAY_A', false);
    define('ARRAY_N', 'ARRAY_N', false);
    
    if (!defined('SAVEQUERIES'))
    	define('SAVEQUERIES', false);
    
    class wpdb {
    
    	var $show_errors = true;
    	var $num_queries = 0;
    	var $last_query;
    	var $col_info;
    	var $queries;
    
    	// Our tables
    	var $posts;
    	var $users;
    	var $categories;
    	var $post2cat;
    	var $comments;
    	var $links;
    	var $options;
    	var $optiontypes;
    	var $optionvalues;
    	var $optiongroups;
    	var $optiongroup_options;
    	var $postmeta;
    	var $usermeta;
    	var $terms;
    	var $term_taxonomy;
    	var $term_relationships;
    
    	var $charset;
    	var $collate;
    
    	/**
    	 * Connects to the database server and selects a database
    	 * @param string $dbuser
    	 * @param string $dbpassword
    	 * @param string $dbname
    	 * @param string $dbhost
    	 */
    	function wpdb($dbuser, $dbpassword, $dbname, $dbhost) {
    		return $this->__construct($dbuser, $dbpassword, $dbname, $dbhost);
    	}
    
    	function __construct($dbuser, $dbpassword, $dbname, $dbhost) {
    		register_shutdown_function(array(&$this, "__destruct"));
    
    		if ( defined('DB_CHARSET') )
    			$this->charset = DB_CHARSET;
    
    		if ( defined('DB_COLLATE') )
    			$this->collate = DB_COLLATE;
    
            $this->dbuser = $dbuser;
            $this->dbpassword = $dbpassword;
            $this->dbname = $dbname;
            $this->dbhost = $dbhost;
    
            $this->connecttodb();
    	}
    
    	function connecttodb()
    	{
    
    		$this->dbh = @mysql_connect($this->dbhost, $this->dbuser, $this->dbpassword, true);
    		if (!$this->dbh) {
    			$this->bail("
    <h1>Error establishing a database connection</h1>
    This either means that the username and password information in your <code>wp-config.php</code> file is incorrect or we can't contact the database server at <code>$dbhost</code>. This could mean your host's database server is down.
    
    <ul>
    	<li>Are you sure you have the correct username and password?</li>
    	<li>Are you sure that you have typed the correct hostname?</li>
    	<li>Are you sure that the database server is running?</li>
    </ul>
    If you're unsure what these terms mean you should probably contact your host. If you still need help you can always visit the <a href='http://wordpress.org/support/'>WordPress Support Forums</a>.
    
    ");
    		}
    
    		if ( !empty($this->charset) && version_compare(mysql_get_server_info(), '4.1.0', '>=') )
     			$this->query("SET NAMES '$this->charset'");
    
    		$this->select($this->dbname);
    	}
    
    	function checkconnection()
    	{
            $maxcount = 5;
            $cnt = 1;
    
            $ping = mysql_ping( $this->dbh ) ;
    
            while( !$ping && $cnt < $maxcount)
            {
                @mysql_close($this->dbh);
                $this->connecttodb();
    
                $ping = mysql_ping( $this->dbh ) ;
    
                if(!$ping )
                {
                    sleep(2);
                }
                $cnt+=1;
            }
    
            if(!$ping ) { die("Attempted to connect for " . $maxcount . " but failed...") ; }
    
    	}
    
    	function __destruct() {
    		return true;
    	}
    
    	/**
    	 * Selects a database using the current class's $this->dbh
    	 * @param string $db name
    	 */
    	function select($db) {
    		if (!@mysql_select_db($db, $this->dbh)) {
    			$this->bail("
    <h1>Can’t select database</h1>
    We were able to connect to the database server (which means your username and password is okay) but not able to select the <code>$db</code> database.
    
    <ul>
    <li>Are you sure it exists?</li>
    <li>On some systems the name of your database is prefixed with your username, so it would be like username_wordpress. Could that be the problem?</li>
    </ul>
    If you don't know how to setup a database you should <strong>contact your host</strong>. If all else fails you may find help at the <a href='http://wordpress.org/support/'>WordPress Support Forums</a>.
    ");
    		}
    	}
    
    	/**
    	 * Escapes content for insertion into the database, for security
    	 *
    	 * @param string $string
    	 * @return string query safe string
    	 */
    	function escape($string) {
    		return addslashes( $string ); // Disable rest for now, causing problems
    		if( !$this->dbh || version_compare( phpversion(), '4.3.0' ) == '-1' )
    			return mysql_escape_string( $string );
    		else
    			return mysql_real_escape_string( $string, $this->dbh );
    	}
    
    	/**
    	 * Escapes content by reference for insertion into the database, for security
    	 * @param string $s
    	 */
    	function escape_by_ref(&$s) {
    		$s = $this->escape($s);
    	}
    
    	/**
    	 * Prepares a SQL query for safe use, using sprintf() syntax
    	 */
    	function prepare($args=NULL) {
    		if ( NULL === $args )
    			return;
    		$args = func_get_args();
    		$query = array_shift($args);
    		$query = str_replace("'%s'", '%s', $query); // in case someone mistakenly already singlequoted it
    		$query = str_replace('"%s"', '%s', $query); // doublequote unquoting
    		$query = str_replace('%s', "'%s'", $query); // quote the strings
    		array_walk($args, array(&$this, 'escape_by_ref'));
    		return @vsprintf($query, $args);
    	}
    
    	// ==================================================================
    	//	Print SQL/DB error.
    
    	function print_error($str = '') {
    		global $EZSQL_ERROR;
    		if (!$str) $str = mysql_error($this->dbh);
    		$EZSQL_ERROR[] =
    		array ('query' => $this->last_query, 'error_str' => $str);
    
    		$str = htmlspecialchars($str, ENT_QUOTES);
    		$query = htmlspecialchars($this->last_query, ENT_QUOTES);
    		// Is error output turned on or not..
    		if ( $this->show_errors ) {
    			// If there is an error then take note of it
    			print "<div id='error'>
    			<p class='wpdberror'><strong>WordPress database error:</strong> [$str]
    			<code>$query</code>
    
    			</div>";
    		} else {
    			return false;
    		}
    	}
    
    	// ==================================================================
    	//	Turn error handling on or off..
    
    	function show_errors() {
    		$this->show_errors = true;
    	}
    
    	function hide_errors() {
    		$this->show_errors = false;
    	}
    
    	// ==================================================================
    	//	Kill cached query results
    
    	function flush() {
    		$this->last_result = array();
    		$this->col_info = null;
    		$this->last_query = null;
    	}
    
    	// ==================================================================
    	//	Basic Query	- see docs for more detail
    
    	function query($query) {
    		// filter the query, if filters are available
    		// NOTE: some queries are made before the plugins have been loaded, and thus cannot be filtered with this method
    
    		$this->checkconnection();
    
    		if ( function_exists('apply_filters') )
    			$query = apply_filters('query', $query);
    
    		// initialise return
    		$return_val = 0;
    		$this->flush();
    
    		// Log how the function was called
    		$this->func_call = "\$db->query(\"$query\")";
    
    		// Keep track of the last query for debug..
    		$this->last_query = $query;
    
    		// Perform the query via std mysql_query function..
    		if (SAVEQUERIES)
    			$this->timer_start();
    
    		$this->result = @mysql_query($query, $this->dbh);
    		++$this->num_queries;
    
    		if (SAVEQUERIES)
    			$this->queries[] = array( $query, $this->timer_stop() );
    
    		// If there is an error then take note of it..
    		if ( mysql_error($this->dbh) ) {
    			$this->print_error();
    			return false;
    		}
    
    		if ( preg_match("/^\\s*(insert|delete|update|replace) /i",$query) ) {
    			$this->rows_affected = mysql_affected_rows($this->dbh);
    			// Take note of the insert_id
    			if ( preg_match("/^\\s*(insert|replace) /i",$query) ) {
    				$this->insert_id = mysql_insert_id($this->dbh);
    			}
    			// Return number of rows affected
    			$return_val = $this->rows_affected;
    		} else {
    			$i = 0;
    			while ($i < @mysql_num_fields($this->result)) {
    				$this->col_info[$i] = @mysql_fetch_field($this->result);
    				$i++;
    			}
    			$num_rows = 0;
    			while ( $row = @mysql_fetch_object($this->result) ) {
    				$this->last_result[$num_rows] = $row;
    				$num_rows++;
    			}
    
    			@mysql_free_result($this->result);
    
    			// Log number of rows the query returned
    			$this->num_rows = $num_rows;
    
    			// Return number of rows selected
    			$return_val = $this->num_rows;
    		}
    
    		return $return_val;
    	}
    
    	/**
    	 * Get one variable from the database
    	 * @param string $query (can be null as well, for caching, see codex)
    	 * @param int $x = 0 row num to return
    	 * @param int $y = 0 col num to return
    	 * @return mixed results
    	 */
    	function get_var($query=null, $x = 0, $y = 0) {
    		$this->func_call = "\$db->get_var(\"$query\",$x,$y)";
    		if ( $query )
    			$this->query($query);
    
    		// Extract var out of cached results based x,y vals
    		if ( $this->last_result[$y] ) {
    			$values = array_values(get_object_vars($this->last_result[$y]));
    		}
    
    		// If there is a value return it else return null
    		return (isset($values[$x]) && $values[$x]!=='') ? $values[$x] : null;
    	}
    
    	/**
    	 * Get one row from the database
    	 * @param string $query
    	 * @param string $output ARRAY_A | ARRAY_N | OBJECT
    	 * @param int $y row num to return
    	 * @return mixed results
    	 */
    	function get_row($query = null, $output = OBJECT, $y = 0) {
    		$this->func_call = "\$db->get_row(\"$query\",$output,$y)";
    		if ( $query )
    			$this->query($query);
    		else
    			return null;
    
    		if ( !isset($this->last_result[$y]) )
    			return null;
    
    		if ( $output == OBJECT ) {
    			return $this->last_result[$y] ? $this->last_result[$y] : null;
    		} elseif ( $output == ARRAY_A ) {
    			return $this->last_result[$y] ? get_object_vars($this->last_result[$y]) : null;
    		} elseif ( $output == ARRAY_N ) {
    			return $this->last_result[$y] ? array_values(get_object_vars($this->last_result[$y])) : null;
    		} else {
    			$this->print_error(" \$db->get_row(string query, output type, int offset) -- Output type must be one of: OBJECT, ARRAY_A, ARRAY_N");
    		}
    	}
    
    	/**
    	 * Gets one column from the database
    	 * @param string $query (can be null as well, for caching, see codex)
    	 * @param int $x col num to return
    	 * @return array results
    	 */
    	function get_col($query = null , $x = 0) {
    		if ( $query )
    			$this->query($query);
    
    		$new_array = array();
    		// Extract the column values
    		for ( $i=0; $i < count($this->last_result); $i++ ) {
    			$new_array[$i] = $this->get_var(null, $x, $i);
    		}
    		return $new_array;
    	}
    
    	/**
    	 * Return an entire result set from the database
    	 * @param string $query (can also be null to pull from the cache)
    	 * @param string $output ARRAY_A | ARRAY_N | OBJECT
    	 * @return mixed results
    	 */
    	function get_results($query = null, $output = OBJECT) {
    		$this->func_call = "\$db->get_results(\"$query\", $output)";
    
    		if ( $query )
    			$this->query($query);
    		else
    			return null;
    
    		// Send back array of objects. Each row is an object
    		if ( $output == OBJECT ) {
    			return $this->last_result;
    		} elseif ( $output == ARRAY_A || $output == ARRAY_N ) {
    			if ( $this->last_result ) {
    				$i = 0;
    				foreach( $this->last_result as $row ) {
    					$new_array[$i] = (array) $row;
    					if ( $output == ARRAY_N ) {
    						$new_array[$i] = array_values($new_array[$i]);
    					}
    					$i++;
    				}
    				return $new_array;
    			} else {
    				return null;
    			}
    		}
    	}
    
    	/**
    	 * Grabs column metadata from the last query
    	 * @param string $info_type one of name, table, def, max_length, not_null, primary_key, multiple_key, unique_key, numeric, blob, type, unsigned, zerofill
    	 * @param int $col_offset 0: col name. 1: which table the col's in. 2: col's max length. 3: if the col is numeric. 4: col's type
    	 * @return mixed results
    	 */
    	function get_col_info($info_type = 'name', $col_offset = -1) {
    		if ( $this->col_info ) {
    			if ( $col_offset == -1 ) {
    				$i = 0;
    				foreach($this->col_info as $col ) {
    					$new_array[$i] = $col->{$info_type};
    					$i++;
    				}
    				return $new_array;
    			} else {
    				return $this->col_info[$col_offset]->{$info_type};
    			}
    		}
    	}
    
    	/**
    	 * Starts the timer, for debugging purposes
    	 */
    	function timer_start() {
    		$mtime = microtime();
    		$mtime = explode(' ', $mtime);
    		$this->time_start = $mtime[1] + $mtime[0];
    		return true;
    	}
    
    	/**
    	 * Stops the debugging timer
    	 * @return int total time spent on the query, in milliseconds
    	 */
    	function timer_stop() {
    		$mtime = microtime();
    		$mtime = explode(' ', $mtime);
    		$time_end = $mtime[1] + $mtime[0];
    		$time_total = $time_end - $this->time_start;
    		return $time_total;
    	}
    
    	/**
    	 * Wraps fatal errors in a nice header and footer and dies.
    	 * @param string $message
    	 */
    	function bail($message) { // Just wraps errors in a nice header and footer
    		if ( !$this->show_errors )
    			return false;
    		wp_die($message);
    	}
    }
    
    if ( ! isset($wpdb) )
    	$wpdb = new wpdb(DB_USER, DB_PASSWORD, DB_NAME, DB_HOST);
    ?>
  7. bothandstudios
    Member
    Posted 6 years ago #

    I am attempting to run 2.5 and I get the CGI error when I have changed the permalinks to anything but the default.

    I tried this code change but it broke my site.

    Needless to say I am still trying to find a solution so I can use permalinks.

  8. Anonymous
    Unregistered
    Posted 6 years ago #

    I have just upgraded to 2.6 and still having the same problem.

  9. leet8845
    Member
    Posted 5 years ago #


  10. leet8845
    Member
    Posted 5 years ago #

    I had this problem with a blog, I managed to fix it.

    I installed on a server which I ran many other wordpress blogs, all 2.6.3.

    I tried all the different fixes and none worked for me.

    I switched my PHP version 5 to version 4 in the settings, in my webserver control panel.

    This seemed to help, the wordpress install screen loaded but I also got a new error message at the bottom. Which I used this to fix before I continued; link

    I hope this helps someone.

Topic Closed

This topic has been closed to new replies.

About this Topic

Tags