php синтаксис

Mongolor

Новичок
php синтаксис

[Wed Oct 3 01:44:12 2007] [error] PHP Parse error: syntax error, unexpected '<' in /home/рататта/include/PHPBB/php_out.php(66) : eval()'d code on line 1

вот сам файл

PHP:
if (!defined("IN_MKP")) {
    	die ("Sorry !! You cannot access this file directly.");
}

function mkportal_board_out() {
		global $db, $userdata, $Checkmkout, $mkportals, $DB, $Skin, $MK_PATH, $MK_TEMPLATE, $mklib, $ForumOut, $mklib_board, $board_config;
		$MK_PATH = "../";
		require $MK_PATH."mkportal/conf_mk.php";
		$mkportals->base_url = $MK_PATH.$FORUM_PATH."/index.php";
		$mkportals->forum_url = $MK_PATH.$FORUM_PATH;

		require_once $MK_PATH."mkportal/include/mk_mySQL.php";
		$DB = new db_driver;
		$DB->db_connect_id = $db->db_connect_id;
		// assign member information
		$mkportals->member['id'] = $userdata['user_id'];
		$mkportals->member['name'] = $userdata['username'];

		if($userdata['user_id'] == -1) {
			$mkportals->member['id'] = "";
		}
		$mkportals->member['last_visit'] = $userdata['user_lastvisit'];
		$mkportals->member['session_id'] = $userdata['session_id'];

		$mkportals->member['user_new_privmsg'] = $userdata['user_unread_privmsg']."/".$userdata['user_new_privmsg'];
		if ($userdata['user_last_privmsg'] > $userdata['user_lastvisit'] && $userdata['user_new_privmsg'] > 0) {
			$mkportals->member['show_popup'] = 1;
		}
		$mkportals->member['email'] = $userdata['user_email'];
		$mkportals->member['timezone'] = $userdata['user_timezone'];
		//$mkportals->member['dateformat'] = $userdata['user_dateformat'];

		//assign member group -> attention don't change this !!
		$mkportals->member['mgroup'] = 3;
		
		// assign to forum admin access to MKportal CPA
		if($userdata['user_level'] == 1) {
			$mkportals->member['g_access_cp'] = 1;
			$mkportals->member['mgroup'] = 1;
		}
		if($userdata['user_id'] == -1) {
			$mkportals->member['mgroup'] = 9;
		}
		if($userdata['user_level'] == 2) {
			$mkportals->member['mgroup'] = 2;
		}
		$mkportals->member['theme'] = $userdata['user_style'];
		if (empty($userdata['user_style'])) {
			$mkportals->member['theme'] = $board_config['default_style'];
		}
		$mkportals->member['mk_lang'] = $userdata['user_lang'];
		if (empty($mkportals->member['mk_lang'])) {
			$mkportals->member['mk_lang'] = $board_config['default_lang'];
		}
		require_once $MK_PATH."mkportal/include/functions.php";
		require_once $MK_PATH."mkportal/include/PHPBB/php_board_functions.php";
		require_once "$mklib->template/tpl_main.php";
		if($MK_OFFLINE && !$mkportals->member['g_access_cp'] && !$mklib->member['g_access_cpa']) {
				$message = $mklib->lang['offline'];
				$mklib->off_line_page($message);
				exit;
		}

		ob_start();
    		eval($ForumOut);  !!!!!!<== ВОТ ето 66 строка!!!!!!
    		$contentspage = ob_get_contents();
     		ob_end_clean();

		$ForumOut = $mklib->printpage_forum("$mklib->forumcs", "$mklib->forumcd", "Forum", $ForumOut);
		print $ForumOut; 

}
Я подписал 66ю строку

Пишет мол синтаксическая ошибка, нимогу понять в чем суть :(
 

tony2001

TeaM PHPClub
PHP Parse error: syntax error, unexpected '<' in /home/рататта/include/PHPBB/php_out.php(66) : eval()'d code on line 1

ошибка в коде, который выполняется eval().
 

Mongolor

Новичок
PHP:
$ForumOut .= ob_get_contents();
      ob_end_clean();
} else  {
    eval($this->compiled_code[$handle]);

}
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
echo $ForumOut;
Думаю без коментариев станет ясно.
 

Wicked

Новичок
что тут непонятного?

ошибка синтаксиса - не в приведенном тобой коде, а в том коде, который eval'ится приведенным тобой кодом. Поэтому мы предлагаем тебе посмотреть на этот eval'юируемый код. Сделать это можно, распечатав значение переменной $ForumOut, в которой этот код лежит как строка.
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
Mongolor

для тех кто в танке
eval() evaluates the string given in code_str as PHP code.


То-есть грубо-говоря вставив в "чистый" скрипт значение переменной [m]$ForumOut[/m]

И выполнив этот скрипт Вы получите ответ всё ли в порядке с $ForumOut ну или где допущены ошибки.

$a = 'echo "test passed";';
eval($a);
результат работы -
test passed

$a = 'echo "test passed"';
eval($a);
результат работы -
Parse error: parse error, unexpected $, expecting ',' or ';' eval()'d code on line 1

Ищем глюк
echo $a ----> echo "test passed"

После вставки в "чистый" скрипт
<?php
echo "test passed"
die();
?>
Parse error: parse error, unexpected T_EXIT, expecting ',' or ';'

Всё понятно?

По крайней мере мне лишь таким образом удалось отловить eval()'d глюки в одном из проектов.
 

boombick

boombick.org
бррр.. Это не отладка, это ад просто... Не, правду мама говорила, что eval - это зло!
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
boombick
Полностью согласен.
К сожалению, иногда такое в руки попадается. :(
 

Nogrogomed

Новичок
ярым примером может служить использование ENUM в Mysql. Других вариантов выцеживания пунктов этого типа я не нашел. Тjлько eval. Правда в других с этой ф-ией не сталкивался :)
 

SiMM

Новичок
> ярым примером может служить использование ENUM в Mysql. Других вариантов выцеживания пунктов этого типа я не нашел. Тjлько eval.
Чего?
 

Nogrogomed

Новичок
hammet, в данной теме непричем. рызмышления на тему использования eval и не более того.


SiMM, приходилсь сталкиваться с проектами, использующими тип ENUM('Заказ принят к рассмотрению', 'Заказ выполнен'), и добавлять к ним третий элемент например 'Заказ в обработке'. Так вот формировать <select> проще всего было с использованием eval, хотя по хорошему надо было бы создать еще одну таблицу.
 

berkut

Новичок
Nogrogomed а пример формирования селекта из енама, с помощью евал можно?

-~{}~ 04.10.07 16:51:

вообще, ещё есть alter table
 

Nogrogomed

Новичок
ALTER TABLE - это и так ясно. Но потом надо по любому переписывать код с выбором "текущего состояния" допустим с двух пунктов до трех.

На доделках чужих проектов чаще всего легче вставить "заплатку", чем переделывать структуру. Вот в качестве таких заплаток и используется примерно такой код:

PHP:
$sql = "DESCRIBE `zakaz` `status`";
$r = mysql_query($sql) or die(mysql_error());
$mas = mysql_fetch_assoc($r);
$Type = str_replace('enum', 'array', $mas['Type']);
$strEval = '$'.$mas['Field'].'='.$Type.';';
eval($strEval);
Хотя подобный подход нарушает нормализацию отношений по теории БД, но в условиях "надо побыстрее сделать" - помогает :)

П.С. В конце кода для проверки вставляем var_dump($$mas['Field']);
 
Сверху