Link to home
Start Free TrialLog in
Avatar of omegalove
omegalove

asked on

PHP Parse error: syntax error, unexpected $end in C:\inetpub\wwwroot\WebDate\install.php on line 417

PHP Parse error:  syntax error, unexpected $end in C:\inetpub\wwwroot\WebDate\install.php on line 417

<?php

require_once('smartway/lib/system.lib');
set_magic_quotes_runtime(0);

if (!$step) $step = 1;
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>
<head>
	<title>webDate Installation</title>
	<link rel="stylesheet" type="text/css" href="install/style.css">
</head>

<body marginheight="0" marginwidth="0" topmargin="0" leftmargin="0">
	<table width="100%" cellpadding="0" cellspacing="0" border="0">
		<tr>
			<td><img src="install/images/logo.gif" alt="" border="0"></td>
			<td background="install/images/bg_top.gif" width="100%" align="right" style="padding:10px;" valign="bottom"></td>
			<td><img src="install/images/border_top.gif" width="26" height="91" alt="" border="0"></td>
		</tr>
	</table>
	<center>
	<br><br>
<?php

if (file_exists('installer.done'))
{
echo<<<END
<p><b>Since webDate has already been installed here, the installer has disabled
itself</b>.</p>

<p>Should you need to redo the installation process, you will need to delete
the file named <i>installer.done</i>.</p>
END;

?>
	<br><br>
	</center>
	<table width="100%" border="0" height="50">
	  <tr>
	  	<td colspan="2"><hr noshade size="1" color=C0C0C0></td>
	  </tr>
	  <tr>
	    <td valign="top" width="35"><a href="http://www.webscribble.com/support.shtml" target="_BLANK"><font color="#669966">[<img src="install/images/p.gif" width="14" height="14" border="0">]</font></a></td>
	    <td height="22" align="left"><a href="http://www.webscribble.com/support.shtml" target="_BLANK"><font color="#999999">Contact us with any questions</font></a></td>
	  </tr>
	  <tr>
	    <td colspan="2"><hr noshade size="1" color=C0C0C0></td>
	  </tr>
	</table>
	<br>
	<table width="100%" border="0">
	  <tr>
	    <td>webDate Installation</td>
	    <td align="right">&copy; Web Scribble Solutions, Inc. 2002-2005</td>
	  </tr>
	</table>
	<br>
</body>
</html>
<?
exit;
}

switch ($step)
{
  case 2:
    if (!$db_name)
      step('<p><b>You must specify a database name</b></p>');
  
    // Try to establish a database connection.
    $db = @mysql_connect($db_host, $db_user, $db_password);
    if (!$db)
    {
      $mysql_err = mysql_error();
      step("<p><b>Error: Could not connect to the database server. Please check your settings and
        try again. The error returned was: $mysql_err</b></p>", 1);
    }
    if (@mysql_select_db($db_name, $db))
      $db_status = "<p><b>Database $db_name successfully located.</b></p>";
    else if (@mysql_create_db($db_name, $db))
    {
      if (@mysql_select_db($db_name, $db))
        $db_status = "<p><b>Database $db_name successfully created.</b></p>";
      else
        step("<p><b>Database $db_name successfully created, but could not be selected.</b></p>");
    }
    else
      step("Error: Connected to the database server, but could not locate or create database $db_name");
    $errors = run_install_sql_script('install/tables', $db);
    if ($errors)
      step("<p><b>Table creation failed with the following error(s)</b>:</p><p>$errors</p>");

    // Save the DB configuration.
    $fp = @fopen('smartway/conf/conf.xml', 'r');
    if (!$fp)
      step("<p><b>Error opening the configuration file. Please ensure that you have uploaded everything
        correctly and have set the proper permissions.</b></p>", 1);
    $buffer = @fread($fp, filesize('smartway/conf/conf.xml'));
    
    $buffer = str_replace('your_db_host', $db_host, $buffer);
    $buffer = str_replace('your_db_username', $db_user, $buffer);
    $buffer = str_replace('your_db_password', $db_password, $buffer);
    $buffer = str_replace('your_db_name', $db_name, $buffer);

    $fp = @fopen('smartway/conf/conf.xml', 'w');
    if (!$fp)
      step('<p><b>Error modifying the configuration file. Please ensure that you have uploaded everything
        correctly and have set the proper permissions.</b></p>', 1);
    if (!@fwrite($fp, $buffer))
      step('<p><b>Error saving the configuration file. Please check that the disk is not full.</b></p>');
    fclose($fp);
    step($db_status, 2);
    break;
  case 3:

    // Verify the form data.
    if (!$serialnumber)
      $errors_string .= "  <li>You must enter a serial number.</li>\n";
    if (!$admin_name)
      $errors_string .= "  <li>You must enter an admin login name.</li>\n";
    if (!$admin_password || !$admin_password2)
      $errors_string .= "  <li>You must fill in both password fields.</li>\n";
    if ($admin_password != $admin_password2)
      $errors_string .= "  <li>Both password fields must match.</li>\n";
    if (!$root_host)
      $errors_string .= "  <li>You must enter a base URL.</li>\n";
    if (!$site_title)
      $errors_string .= "  <li>You must enter a Site Title.</li>\n";
    if (!preg_match('!^http://!i', $root_host))
      $errors_string .= "  <li>Your base URL must begin with &quot;http://&quot;.</li>\n";
    if (!$admin_email)
      $errors_string .= "  <li>You must enter an admin email address.</li>\n";
    if (!preg_match('/(?:\S+)\@(?:\S+)/', $admin_email))
      $errors_string .= "  <li>Your email address does not appear to be of a valid format.</li>\n";

    if ($errors_string)
      step("<p><b>We could not proceed because due to the following error(s):
<ol>
$errors_string
</ol></b></p>\n", 2);

    // Save the DB configuration -- conf.xml.
    $fp = @fopen('smartway/conf/conf.xml', 'r+');
    if (!$fp)
      step("<p><b>Error modifying the configuration file. Please ensure that you have uploaded everything
        correctly and have set the proper permissions.</b></p>", 2);
    $buffer = @fread($fp, filesize('smartway/conf/conf.xml'));

    $buffer = str_replace('#your_serial_number"><', "#your_serial_number\">$serialnumber<", $buffer);
    $buffer = str_replace('>webscribble<', ">$admin_name<", $buffer);
    $buffer = str_replace('c2NyaWJibGU=', base64_encode($admin_password), $buffer);
    $buffer = str_replace('your_email', $admin_email, $buffer);

    @ftruncate($fp, 0);
    fseek($fp, SEEK_SET, 0);
    if (!@fwrite($fp, $buffer))
      step("<p><b>Error saving the smartway/conf/conf.xml configuration file. Please check that the disk is not full.</b></p>", 2);
    fclose($fp);
    
    // Save the DB configuration -- sitesettings/conf.xml.
    $fp = @fopen('smartway/plug-ins/sitesettings/conf.xml', 'r+');
    $buffer = @fread($fp, filesize('smartway/plug-ins/sitesettings/conf.xml'));

    $buffer = str_replace('your_website_url', $root_host, $buffer);
    $buffer = str_replace('your_site_title', $site_title, $buffer);

    @ftruncate($fp, 0);
    fseek($fp, SEEK_SET, 0);
    if (!@fwrite($fp, $buffer))
      step("<p><b>Error saving the smartway/plug-ins/sitesettings/conf.xml configuration file. Please check that the disk is not full.</b></p>", 2);
    fclose($fp);
    
    $fp = @fopen("installer.done", "x+");
    if(!$fp)
      step("<p><b>Error creating lock file. Please check your permissions.</b></p>
		<p>This is not, in itself, a fatal error; however, it leaves you vulnerable to someone running install.php behind
		your back and overwriting your information. Therefore, you should delete install.php <b>as soon as possible</b>.</p>", 3);
		
    step("<p>webDate is now successfully installed!</p>", 3);
    fclose($fp);
    break;
    
  default:  // Assume step 1.
    if (!$db_host)
      $db_host = "localhost";
      
    // Check permissions.
    $bad_perm_files .= ok_perms('smartway/');
    $bad_perm_files .= ok_perms('smartway/conf/');
    $bad_perm_files .= ok_perms('smartway/conf/conf.xml');
    $bad_perm_files .= ok_perms('photos/');
    $bad_perm_files .= ok_perms('videos/');

	$bad_perm_files .= ok_perms('images/');
	$bad_perm_files .= ok_perms('templates/');
	$bad_perm_files .= ok_perms('templates/forms/');
	$bad_perm_files .= ok_perms('templates/mail/');

    if ($bad_perm_files)
    {
      echo<<<END
<p><b>Preliminary tests have failed. The directories and/or files listed below
do not have sufficient permissions. Please CHMOD them and all contents to 0777 and re-run this script.</b></p>

<ul>
$bad_perm_files
</ul>
<p align="center">
<a href="$PHP_SELF">Retry the script</a></p>

END;
      exit;
    }
    step();
}

function ok_perms($file)
{
  return is_readable($file) && is_writable($file) ? '' : "<li>$file</li>";
}

function step($error = 'Welcome to the webDate installer!<br>', $step_num = 1)
{
  global $root_host;

  switch ($step_num)
  {
    case 2:
      $root_host = 'http://'.$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']);
      if ($root_host{strlen($root_host) - 1} != '/')
        $root_host .= '/';
      echo<<<END
<center>
<font color="red"><b>$error</b></font><br>
<table border="0" cellspacing="0" cellpadding="1" bgcolor="#000000">
  <tr>
    <td>
      <table border="0" cellspacing="4" cellpadding="4" bgcolor="C7D5F1" width="350">
        <form action="{$_SERVER['PHP_SELF']}" action="post">
          <tr>
            <td>
              <table border="0" cellspacing="2" cellpadding="2" bgcolor="C7D5F1">
                <tr>
                  <td colspan="2">
					<p>Your tables have been created and populated successfully. Now, all that we
					need to do is to configure a few important variables.</p>
				  </td>
				</tr>
				<input type="hidden" name="step" value="3" />
			    <tr>
			      <td width="250">Your webDate serial number:</td>
			      <td><input type="text" name="serialnumber" /></td>
			    </tr>
			    <tr>
			      <td width="250">Base webDate URL:</td>
			      <td><input type="text" name="root_host" value="$root_host" /></td>
			    </tr>
			    <tr>
			      <td width="250">Title of your website:</td>
			      <td><input type="text" name="site_title" value="webDate" /></td>
			    </tr>
			    <tr>
			      <td width="250">Admin login name:</td>
			      <td><input type="text" name="admin_name" /></td>
			    </tr>
			    <tr>
			      <td width="250">Admin password:</td>
			      <td><input type="password" name="admin_password" /></td>
			    </tr>
			    <tr>
			      <td width="250">Confirm admin password:</td>
			      <td><input type="password" name="admin_password2" /></td>
			    </tr>
			    <tr>
			      <td width="250">Admin email address:</td>
			      <td><input type="text" name="admin_email" /></td>
			    </tr>
			  	<tr>
				  <td colspan="2" align="center"><input type="image" value="Proceed" src="install/images/proceed.gif" /></td>
				</tr>
			  </table>
            </td>
          </tr>
        </form>
      </table>
    </td>
  </tr>
</table>
</center>
END;
      break;
    case 3:
      echo<<<END
$error
<p>You may now log into the <a href="{$root_host}smartway/">webDate
administrative area</a> and continue to customize your site.</p>

<p>You may now delete &quot;install.php&quot;.</p>
END;
    break;
    default:
      echo<<<END
<center>
<font color="red"><b>$error</b></font><br>
<table border="0" cellspacing="0" cellpadding="1" bgcolor="#000000">
  <tr>
    <td>
      <table border="0" cellspacing="4" cellpadding="4" bgcolor="C7D5F1" width="350">
        <form action="{$_SERVER['PHP_SELF']}" action="post">
          <tr>
            <td>
              <table border="0" cellspacing="2" cellpadding="2" bgcolor="C7D5F1">
                <tr>
                  <td colspan="2">
					<p>In order to set up the backend properly, we need your database
					information.</p>
				  </td>
				</tr>
				<input type="hidden" name="step" value="2" />
			    <tr>
			      <td width="250">Database host:<br />
			        <span class="small">(IP address is OK)</span></td>
			      <td><input type="text" name="db_host" value="localhost" /></td>
			    </tr>
			    <tr>
			      <td>Database user name:</td>
			      <td><input type="text" name="db_user" /></td>
			    </tr>
			    <tr>
			      <td>Database password:</td>
			      <td><input type="password" name="db_password" /></td>
			    </tr>
			    <tr>
			      <td>Database name:</td>
			      <td><input type="text" name="db_name" /></td>
			    </tr>
			    <tr>
			      <td colspan="2" align="center"><input type="image" value="Proceed" src="install/images/proceed.gif" /></td>
				</tr>
			  </table>
            </td>
          </tr>
        </form>
      </table>
    </td>
  </tr>
</table>
</center>
END;
  }
?>
	<br><br>
	</center>
	<table width="100%" border="0" height="50">
	  <tr>
	  	<td colspan="2"><hr noshade size="1" color=C0C0C0></td>
	  </tr>
	  <tr>
	    <td valign="top" width="35"><a href="http://www.webscribble.com/support.shtml" target="_BLANK"><font color="#669966">[<img src="install/images/p.gif" width="14" height="14" border="0">]</font></a></td>
	    <td height="22" align="left"><a href="http://www.webscribble.com/support.shtml" target="_BLANK"><font color="#999999">Contact us with any questions</font></a></td>
	  </tr>
	  <tr>
	    <td colspan="2"><hr noshade size="1" color=C0C0C0></td>
	  </tr>
	</table>
	<br>
	<table width="100%" border="0">
	  <tr>
	    <td>webDate Installation</td>
	    <td align="right">&copy; Web Scribble Solutions, Inc. 2002-2005</td>
	  </tr>
	</table>
	<br>
</body>
</html>
<?
  exit;
}

// Run a set of queries, collecting errors for each.
function run_queries($queries_string, $db)
{
  $errors = '';

  $queries = split(';', $queries_string);
  reset($queries);
  foreach ($queries as $query)
  {
    $query = trim($query);
    if (empty($query))
      continue;
    mysql_query($query, $db);
    $this_error = mysql_error($db);
    if ($this_error)
      $errors .= "$this_error<br />";
  }
  return $errors;
}

function run_install_sql_script($file, $db)
{
  global $step;
  
  $fp = @fopen($file.'.sql', 'r');
  if (!$fp)
    step("<p><b>Error opening an install SQL script. Please ensure that you have uploaded everything
      correctly and have set the proper permissions (at least 755 for the &quot;install&quot; directory and
      644 for the files inside that directory).</b></p>", --$step);

  $script = fread($fp, filesize($file.'.sql'));
  fclose($fp);
  return run_queries($script, $db);
}
?>

Open in new window

ASKER CERTIFIED SOLUTION
Avatar of Snarfles
Snarfles
Flag of Australia image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
One thing that sticks out to me is that you have one curly bracket on line 226 that opens a statement { and the closing one spans an ending ?> (line 354) and the next beginning one <? (line 379). That will generate errors for sure.
Avatar of omegalove
omegalove

ASKER

download webdate and try it.
On lines 63 and 379 you have short open tags ("<?") rather than the full "<?php". If your server doesn't have that setting enabled (disabled by default on newer php's iirc) then it will generate a syntax error.
Avatar of Marco Gasi
I don't know if this can be a right puctuation, but at line 206 you have an empty line:

<a href="$PHP_SELF">Retry the script</a></p>

END;

Using "here document" syntax requires that END terminator appear on a line with just a semicolon. no extra whitespace. Technically, here you don't have a whitespace but a return character. I repeat: I don't know if this can be a problem, but you could try to delete the blank line...

Hope this helps
The only syntax issue with the code is the use of short-open tags.
awesome
No disrespect to Nol888 but how is his answer of short open tags better than my first answer that included saying that you should not use short open tags?
let me post the question again, my excuse.
I wish to dispute the reassignment. From that answer, it's not clear to see what exactly solved the issue, plus the author of the post made it clear that the PHP open tags were not his/her main solution. Instead they seemed to emphasize the use of (unnecessary) brackets to group code as the solution.

Also their explanation of the error message is incorrect, PHP throws the error when it was expecting more code (to finish a block, etc) but instead found EoF.