Перейти к контенту
  • 0

проблема с PHP


Вопрос

Вставляю код в общий шаблон форума:

 

<!--exec.file="http://домен.ru/имя-файла.php"-->

или

<!--exec.url="http://домен.ru/имя-файла.php"-->

 

Не каких реакций. На версии 2.1.7. всё работало отлично.

Ссылка на комментарий
Поделиться на других сайтах

Рекомендуемые сообщения

  • 0
Если file не получается, значит php файл недоступен форуму. Смотрите там chmod, есть ли он вообще и т.д.
Ссылка на комментарий
Поделиться на других сайтах

  • 0
В 2.2 есть константа, определяющая, можно ли вставлять файлы подобным образом или нет (видел где-то в файлах, не помню точно).
Ссылка на комментарий
Поделиться на других сайтах

  • 0

2Master

 

Константа эта включает только exec.url

Для exec.file я не нашёл дополнительных условий.

Ссылка на комментарий
Поделиться на других сайтах

  • 0
Дык может папка в которой он лежит не доступна?

Всё доступно. Может можно по другому какнибуть?

 

P.S. Ктонибуть помогите решить проблему.

Изменено пользователем zil1924
Ссылка на комментарий
Поделиться на других сайтах

  • 0
2Master

 

Константа эта включает только exec.url

Для exec.file я не нашёл дополнительных условий.

Миш, смотри первое сообщение автора:

<!--exec.file="http://домен.ru/имя-файла.php"-->

или

<!--exec.url="http://домен.ru/имя-файла.php"-->

— если константа «IPB_ACP_ALLOW_EXEC_URL» в файле ./init.php выключена (её значение равно нулю), то запустить файл с указанного адреса не выйдет, как ты не пытайся.

В коде, который отвечает за обработку тегов <!--exec.file=""--> и <!--exec.url=""-->, используется условие, что если мы указали в шаблоне <!--exec.file=""--> и в нём не содержится http(s)?://, выполняем.

 

Решение проблемы автора.

Файл ./init.php, найти код:

define( 'IPB_ACP_ALLOW_EXEC_URL', 0 );

Заменить на:

define( 'IPB_ACP_ALLOW_EXEC_URL', 1 );

В Вашем шаблоне использовать под адреса конструкцию:

<!--exec.url="http://домен.ru/имя-файла.php"-->

— а не:

<!--exec.file="http://домен.ru/имя-файла.php"-->

Это разделение было сделано в целях безопасности...

Ссылка на комментарий
Поделиться на других сайтах

  • 0

2sM1Le

 

Я знаю.

Ну хорошо пусть "IPB_ACP_ALLOW_EXEC_URL" выключена.

И exec.url не работает.

 

Но почему не работает exec.file?

 

А понятно. Почему.

Сам себе отвечаю.

 

Потому что exec.file должен указывать на путь к файлу, а не URL.

 

2zil1924

 

Вам нужно в exec.file писать не http:// а путь к скрипту на локальном уровне,

если вы хотите использовать именно exec.file

Ссылка на комментарий
Поделиться на других сайтах

  • 0
2sM1Le

 

Я знаю.

Ну хорошо пусть "IPB_ACP_ALLOW_EXEC_URL" выключена.

И exec.url не работает.

 

Но почему не работает exec.file?

 

А понятно. Почему.

Сам себе отвечаю.

 

Потому что exec.file должен указывать на путь к файлу, а не URL.

 

2zil1924

 

Вам нужно в exec.file писать не http:// а путь к скрипту на локальном уровне,

если вы хотите использовать именно exec.file

Я сделал как написал sM1Le. Все работает

 

Тему можно закрывать.

Ссылка на комментарий
Поделиться на других сайтах

  • 0

что-то я не понимаю....

форум 2.1.6

пишу в общем шаблоне

<!--exec.url="http://домен.ru/имя-файла.php"-->

всё работает, пишу тоже самое в global_board_header ничего не работает, вываливает на страницу просто текст. Где грабли?

Ссылка на комментарий
Поделиться на других сайтах

  • 0
что-то я не понимаю....

форум 2.1.6

пишу в общем шаблоне

<!--exec.url="http://домен.ru/имя-файла.php"-->

всё работает, пишу тоже самое в global_board_header ничего не работает, вываливает на страницу просто текст. Где грабли?

Так и должно быть.

 

./sources/classes/class_display.php:

		//-----------------------------------------
	// Parse EXEC commands in wrapper only
	// If we moved this below the block of str_replace
	// we'd get exec commands parsed in HTML templates
	// too... Do we want that? Not for now...
	//-----------------------------------------

	if ( stristr( $this->ipsclass->skin['_wrapper'], '<!--exec.' ) )
	{
		$this->_parse_exec_tags();
	}

Берём и переводим.

 

Для того чтобы exec-теги парсились и в шаблонах тоже, нужно вырезать этот кусок кода и вставить его после всех str_replace, которые идут после него, т.е. перед

		  //-----------------------------------------
	  // Get the macros and replace them
	  //-----------------------------------------

Ссылка на комментарий
Поделиться на других сайтах

  • 0

сделал все вот так вставил в общий шаблон

<!--exec.url="http://домен.ru/имя-файла.php"-->

заменил

define( 'IPB_ACP_ALLOW_EXEC_URL', 1 );

на 1

вставляю проверочный код а в ответ тишина....

кто знает в чем проблема? форум 2.3.4

Ссылка на комментарий
Поделиться на других сайтах

  • 0

http://домен.ru/имя-файла.php сам по себе всё выводит?

В настройках PHP может быть отключена возможность инклюда урлов. Вам нужно вывести текст с другого сайта?

Ссылка на комментарий
Поделиться на других сайтах

  • 0
Берём и переводим.

 

Для того чтобы exec-теги парсились и в шаблонах тоже, нужно вырезать этот кусок кода и вставить его после всех str_replace, которые идут после него, т.е. перед

 

здравствтуйте...

спасибо за решение проблемы - действительно все работает... но, как в анекдоте, есть один нюанс

 

это решение замечательно работает и в форуме, и в галлерее, и почти в блогах...

 

вот о блогах и поподробнее....

в общем листинге блогов на индексной странице - все ОК... (/index.php?automodule=blog)

но когда я перехожу на страницу личных блогов к авторам с урлами вида /index.php?automodule=blog&blogid=1& возникает опять та же проблема... - все комментируется :-(

 

никак не пойму где что отключить :-(

не подскажете решения????

 

заранее спасибо!

Ссылка на комментарий
Поделиться на других сайтах

  • 0
та же проблема... - все комментируется :-(

В смысле? :D

 

Наскорлько я помню, у блогов свой класс/функция вывода страницы, попробуйте по дистрибутиву блогов поискать exec или exec\.

Так вы найдёте эту функцию, в которой нужно сделать аналогичное действие.

Ссылка на комментарий
Поделиться на других сайтах

  • 0
Насколько я помню, у блогов свой класс/функция вывода страницы

это то я понял... поэтомуц и задал такой вопрос :D

 

 

попробуйте по дистрибутиву блогов поискать exec или exec\.

Так вы найдёте эту функцию, в которой нужно сделать аналогичное действие.

поиск по "exec" в дистрибутиве выдет кучу строк... причем все просмотренные мною - $this->ipsclass->DB->simple_exec();

 

как я понимаю simple_exec() это и есть нужная мне функция...

 

нашел в ips_kernel/class_db.php строки:

/*-------------------------------------------------------------------------*/

// ALIAS: Simple elements

/*-------------------------------------------------------------------------*/

 

/**

* Alias for simple_exec

*

* @see simple_exec

* @since 2.1

*/

 

function simple_exec()

{

return $this->exec_query();

}

 

та в свою очередь ссылается еще на какую-то функцию...

запутался :-(

 

да и знаний php-шных не хватит :-(

 

может направите...

Ссылка на комментарий
Поделиться на других сайтах

  • 0
Нет, не эта. Ищите тогда по exec\. или -exec
Ссылка на комментарий
Поделиться на других сайтах

  • 0
Нет, не эта. Ищите тогда по exec\. или -exec

 

в дистрибутиве блога нет - :-(

 

в файле www\sources\classes\class_display.php, соответсвенно два раза находится:

 

в районе 320 строки

//-----------------------------------------
			// Do we have a PM show?
			//-----------------------------------------

			if ( $this->ipsclass->member['show_popup'] AND ! $this->ipsclass->member['members_disable_pm'] )
			{
					$this->ipsclass->DB->simple_construct( array( 'update' => 'members', 'set' => 'show_popup=0', 'where' => 'id='.$this->ipsclass->member['id'] ) );
					$this->ipsclass->DB->simple_shutdown_exec();

					if ( $this->ipsclass->input['act'] != 'Msg' )
					{
							$this->ipsclass->skin['_wrapper'] = str_replace( '<!--IBF.NEWPMBOX-->', $this->ipsclass->get_new_pm_notification(), $this->ipsclass->skin['_wrapper'] );
					}
			}

			if ( stristr( $this->ipsclass->skin['_wrapper'], '<!--exec.' ) )
			{
					$this->_parse_exec_tags();
			}

сюда то как раз я и переставил по вашей рекомендации выше код

 

и еще один (в раойне 550 строки)

/*-------------------------------------------------------------------------*/
	// Parse EXEC tags
	/*-------------------------------------------------------------------------*/

	/**
	* Parses exec tags in the wrapper
	* Nicked from IP.Dynamic.
	*/
	function _parse_exec_tags()
	{
			preg_match_all( "#<\!--exec\.(file|url)=(?:[\"'])?(.+?)(?:[\"'])?-->#is", $this->ipsclass->skin['_wrapper'], $match );

			for ($i=0; $i < count($match[0]); $i++)
			{
					$method = strtolower(trim( $match[1][$i] ));
					$uri	= trim( $match[2][$i] );

					//-----------------------------------------
					// PARSE: URL
					//-----------------------------------------

					if ( $method == 'url' )
					{
							//-----------------------------------------
							// Buffer...
							//-----------------------------------------

							@ob_start();
							include( $uri );
							$data = @ob_get_contents();
							@ob_end_clean();
					}
					//-----------------------------------------
					// PARSE: LOCAL FILE
					//-----------------------------------------
					else
					{
							if ( file_exists( $uri ) )
							{
									//-----------------------------------------
									// Buffer...
									//-----------------------------------------

									@ob_start();
									include( $uri );
									$data = @ob_get_contents();
									@ob_end_clean();
							}
					}

					$this->ipsclass->skin['_wrapper'] = str_replace( $match[0][$i], "<!--included content-->\n".$data."\n<!--/ included content-->", $this->ipsclass->skin['_wrapper'] );
					unset( $data );
			}
	}

Ссылка на комментарий
Поделиться на других сайтах

  • 0

Извиняюсь за повторный вопрос, но неужели нельзя решить проблему с циклом FOR?

 

Файл выполняется, но если в нем содержится цикл FOR, то перестает работать скрипт.

Ссылка на комментарий
Поделиться на других сайтах

Присоединиться к обсуждению

Вы можете ответить сейчас, а зарегистрироваться позже. Если у вас уже есть аккаунт, войдите, чтобы ответить от своего имени.

Гость
Ответить на вопрос...

×   Вы вставили отформатированный текст.   Удалить форматирование

  Допустимо не более 75 смайлов.

×   Ваша ссылка была автоматически заменена на медиа-контент.   Отображать как ссылку

×   Ваши публикации восстановлены.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Зарузка...
×
×
  • Создать...

Важная информация

Находясь на нашем сайте, вы соглашаетесь на использование файлов cookie, а также с нашим положением о конфиденциальности Политика конфиденциальности и пользовательским соглашением Условия использования.