Перейти к контенту
  • 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, то перестает работать скрипт.

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

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

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить на вопрос...

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

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

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

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

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

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

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

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