Поиск файла по примерному названию php - Дизайн и модификация Invision Power Board

Перейти к содержимому

 

СвернутьПрикрепленные теги

Теги не найдены

  • 2 Страниц +
  • 1
  • 2
  • Вы не можете создавать новые темы
  • Вы не можете отвечать в этой теме

Поиск файла по примерному названию php

#1 Пользователь не на сайте   TemKa_SD ответил: »

 
 
  • Advanced
  • ***
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 562
  • Регистрация: 16-Январь 18
  • Репутация: 7
  • Откуда:Спасск-Дальний
  • IPB version:4.1.x
 

Отправлено 11 Май 2019 - 22:26

Здравствуйте. Я реализовал функционал просмотра лога, хочу добавить к просмотру определенного лога второй файл из другой папки, это тоже лог, но он создается чуть позже и соответственно другое название.

bot25_11_05_2019_20:22:51.log - основной лог.
bot25_11_05_2019_20:22:52.log - вторичный лог.

	public function viewFile()
	{
		if ( \IPS\NO_WRITES )
		{
			\IPS\Output::i()->error( 'no_writes', '1C324/4', 403, '' );
		}

		$file = static::logDir() . \IPS\Request::i()->file;
		$file_gcb = static::logDirGCB() . \IPS\Request::i()->file;


		if ( !is_file( $file ) )
		{
			\IPS\Output::i()->error( 'node_error', '2C324/5', 404, '' );
		}

		\IPS\Output::i()->sidebar['actions']['delete'] = array(
			'icon'	=> 'times-circle',
			'link'	=> \IPS\Http\Url::internal( 'app=wc3&module=bots&controller=logs&do=delete' )->setQueryString( 'file', \IPS\Request::i()->file ),
			'title'	=> 'delete',
			'data'	=> array( 'confirm' => '' )
		);

		$log = file($file);
		$log = \array_slice( $log, -400, 400, TRUE );

		$gcb_log = file($file_gcb);
		$gcb_log = \array_slice( $file_gcb, -400, 400, TRUE );

		\IPS\Output::i()->title	 = basename( $file );
		\IPS\Output::i()->breadcrumb[] = array( \IPS\Http\Url::internal( "app=wc3&module=bots&controller=logs" ), \IPS\Member::loggedIn()->language()->addToStack('menu__wc3_bots_logs') );
		\IPS\Output::i()->output = \IPS\Theme::i()->getTemplate( 'logs' )->view( implode("", $log), implode("", $gcb_log) );
	}


Второстепенный лог, в котором нужно реализовать что-то вроде функции поиска по названию файла основного лога.

$file_gcb = static::logDir() . \IPS\Request::i()->file;


Так вот оно грузит, если названия одинаковые: http://prntscr.com/nnbw7b

Сообщение изменено: TemKa_SD (11 Май 2019 - 22:29)

0

#2 Пользователь не на сайте   siv1987 ответил: »

 
 
  • Advanced
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: IPB Skins Team
  • Сообщений: 9 443
  • Регистрация: 20-Март 09
  • Репутация: 2 544
  • IPB version:3.1.x
 

Отправлено 11 Май 2019 - 22:53

Что-то я плохо понимаю суть запроса. У вас есть два файла в разных катологах, и вы хотите открыть второй по имени первого, но имена немного отличаются? Нельзя тогда оба файла назвать одинаково? Или убрать время из имени файла? Можно конечно просканировать второй каталог например функцией glob (в ней есть поиск по маске), но имхо попахивает костылем. Если эти файлы создаются из одного процесса php, можно использовать унифицированное время из константы которое определяется при запуске скрипта и будет константное на весь процесс выполнения.
0

#3 Пользователь не на сайте   TemKa_SD ответил: »

 
 
  • Advanced
  • ***
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 562
  • Регистрация: 16-Январь 18
  • Репутация: 7
  • Откуда:Спасск-Дальний
  • IPB version:4.1.x
 

Отправлено 12 Май 2019 - 01:11

Вы всё правильно поняли.

Так, я не всю информацию предоставил, это два разных процесса.

    public function startBot($bot_id)
    {
		$bot = static::load( $bot_id );
		$path = static::BOT_PATH;
		$bot_pid = $bot->bot_pid;
		$log = $path . 'logs/' . 'bot' . $bot_id . '_' . date('d') . '_' . date( 'm' ) . '_' . date( 'Y' ) . '_' . date( 'H' ) . ':' . date( 'i' ) . ':' . date( 's' ) . '.log';

		$bot_sid = $bot->bot_id;
		$port = static::botSettings($bot_sid)->botConfig['bot_hostport'];

		if( $bot_pid ) {
			\IPS\Output::i()->error( \IPS\Member::loggedIn()->language()->addToStack('wc3_bot_run_error_1', FALSE, array( 'sprintf' => array($bot_pid))), $bot_pid, 500, '' );
		} else if ( !static::checkPort( $port ) ) {
			$bot->bot_pid = 0;
			$bot->save();
			\IPS\Output::i()->error( \IPS\Member::loggedIn()->language()->addToStack('wc3_bot_run_error_2', FALSE, array( 'sprintf' => array($port))), $port, 500, '' );
		}
			else {
			$bot_pidNew = \exec("cd {$path}{$bot_id}; nohup ./{$bot_id}++ > {$log} 2>&1 & echo $!");
			$bot->bot_pid = $bot_pidNew;
			$bot->save();
		}
    }

    public function startGarena($bot_id)
    {
    	$bot = static::load( $bot_id );
    	$path = static::BOT_PATH;
		$gcb_pid = $bot->gcb_pid;
		$log = $path . 'gcb_logs/' . 'bot' . $bot_id . '_' . date('d') . '_' . date( 'm' ) . '_' . date( 'Y' ) . '_' . date( 'H' ) . ':' . date( 'i' ) . ':' . date( 's' ) . '.log';

		if( $gcb_pid ) {
			\IPS\Output::i()->error( \IPS\Member::loggedIn()->language()->addToStack('wc3_bot_gcb_run_error_1', FALSE, array( 'sprintf' => array($gcb_pid))), $gcb_pid, 500, '' );
		} else {
			$gcb_pidNew = \exec("cd {$path}{$bot_id}/gcb/; nohup java -jar gcb.jar > {$log} 2>&1 & echo $!");
			$bot->gcb_pid = $gcb_pidNew;
			$bot->save();
		}
    }


Они запускаются одновременно, иногда даже секунды запуска совпадают, иногда нет. Можно конечно от секунд отказаться, но это еще больший костыль.
0

#4 Пользователь не на сайте   siv1987 ответил: »

 
 
  • Advanced
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: IPB Skins Team
  • Сообщений: 9 443
  • Регистрация: 20-Март 09
  • Репутация: 2 544
  • IPB version:3.1.x
 

Отправлено 12 Май 2019 - 07:36

Если запускаются одновременно, может стоить запустить в одном процессе php? Под процессом php имеется ввиду генерация страницы при текущим запросе, а не вызов функции exec. Чтото мне подсказывает что отрабатывают эти функции в одном запросе. Определите в constants.php константу define( IPS_UNIX_TIME, time() ) и используйте ее значение при генерации даты date( "d_m_Y_H:i:s", IPS_UNIX_TIME )
Можете в своем приложение определить какую-то переменную класса которое будет содержать одно время для разных функций.
0

#5 Пользователь не на сайте   TemKa_SD ответил: »

 
 
  • Advanced
  • ***
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 562
  • Регистрация: 16-Январь 18
  • Репутация: 7
  • Откуда:Спасск-Дальний
  • IPB version:4.1.x
 

Отправлено 12 Май 2019 - 08:30

Ну да, в одном запросе, но задержка в любом случае будет мне кажется, это два разных приложения, одно на JAVA, второе на C++. По поводу времени не понял, что значит одно время для разных функций? Время - оно общее, каждую секунду всё больше.
0

#6 Пользователь не на сайте   siv1987 ответил: »

 
 
  • Advanced
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: IPB Skins Team
  • Сообщений: 9 443
  • Регистрация: 20-Март 09
  • Репутация: 2 544
  • IPB version:3.1.x
 

Отправлено 12 Май 2019 - 09:10

Я вам показал пример выше. Вы определяете одну константу или переменную с текущем временем перед выполнением этих функции а потом используете ее там где нужно унифицированное время. Функция date принимает второй не обязательный аргумент с времен timestamp, смотрите документацию.
0

#7 Пользователь не на сайте   TemKa_SD ответил: »

 
 
  • Advanced
  • ***
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 562
  • Регистрация: 16-Январь 18
  • Репутация: 7
  • Откуда:Спасск-Дальний
  • IPB version:4.1.x
 

Отправлено 12 Май 2019 - 09:14

Так а если моим модулем будут пользоваться другие люди, им тоже это делать?
0

#8 Пользователь не на сайте   siv1987 ответил: »

 
 
  • Advanced
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: IPB Skins Team
  • Сообщений: 9 443
  • Регистрация: 20-Март 09
  • Репутация: 2 544
  • IPB version:3.1.x
 

Отправлено 12 Май 2019 - 09:17

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

#9 Пользователь не на сайте   TemKa_SD ответил: »

 
 
  • Advanced
  • ***
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 562
  • Регистрация: 16-Январь 18
  • Репутация: 7
  • Откуда:Спасск-Дальний
  • IPB version:4.1.x
 

Отправлено 12 Май 2019 - 11:14

Я просто не понимаю как оно должно работать, ладно, спасибо, попробую.
0

#10 Пользователь не на сайте   siv1987 ответил: »

 
 
  • Advanced
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: IPB Skins Team
  • Сообщений: 9 443
  • Регистрация: 20-Март 09
  • Репутация: 2 544
  • IPB version:3.1.x
 

Отправлено 12 Май 2019 - 14:29

Не понимаю что тут непонятного

$time = time();
....
file_put_contents( $folder1."/bot_".date( "d_m_Y_H:i:s", $time ), $log1 );
.....
file_put_contents( $folder2."/bot_".date( "d_m_Y_H:i:s", $time ), $log2 );

Для форматирования даты функция будет использовать время из переменной $time, которая будет одинаковым и для первой и для второй функции.
0

#11 Пользователь не на сайте   TemKa_SD ответил: »

 
 
  • Advanced
  • ***
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 562
  • Регистрация: 16-Январь 18
  • Репутация: 7
  • Откуда:Спасск-Дальний
  • IPB version:4.1.x
 

Отправлено 12 Май 2019 - 20:01

Что ему надо? http://prntscr.com/nnm6ld нельзя функцию использовать тут? Сделать просто функцией, котороя будет возвращать time()?

Сообщение изменено: TemKa_SD (12 Май 2019 - 20:03)

0

#12 Пользователь не на сайте   siv1987 ответил: »

 
 
  • Advanced
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: IPB Skins Team
  • Сообщений: 9 443
  • Регистрация: 20-Март 09
  • Репутация: 2 544
  • IPB version:3.1.x
 

Отправлено 12 Май 2019 - 20:19

Определение констант класса

Цитата

They are defined by using one of the keywords public, protected, or private, followed by a normal variable declaration. This declaration may include an initialization, but this initialization must be a constant value--that is, it must be able to be evaluated at compile time and must not depend on run-time information in order to be evaluated.


Можно функцию, только надо помнить что она должна возвращать статическое один раз определенное значение.

function getTime(){
    static $time;
    if(!$time){
        $time = time();
    }

    return $time;
}

0

#13 Пользователь не на сайте   TemKa_SD ответил: »

 
 
  • Advanced
  • ***
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 562
  • Регистрация: 16-Январь 18
  • Репутация: 7
  • Откуда:Спасск-Дальний
  • IPB version:4.1.x
 

Отправлено 12 Май 2019 - 20:29

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

Но я всё равно не понимаю, почему оно должно запускаться в одно время, между выполнением функций есть задержка в миллисекундах, и время МОЖЕТ БЫТЬ разное, а МОЖЕТ БЫТЬ и одинаковое.

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

Ну да, как я и предполагал: на секунду выше.

Сообщение изменено: siv1987 (12 Май 2019 - 20:56)

0

#14 Пользователь не на сайте   TemKa_SD ответил: »

 
 
  • Advanced
  • ***
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 562
  • Регистрация: 16-Январь 18
  • Репутация: 7
  • Откуда:Спасск-Дальний
  • IPB version:4.1.x
 

Отправлено 12 Май 2019 - 20:54

Есть идея, при запуске первой функции записать время в БД, при запуске второй функции указать это время во втором логе, думаю идеальное решение. Да и само время можно выводить где-нибудь, будет написано сколько времени назад был запущен бот. Что скажите?

Сообщение изменено: TemKa_SD (12 Май 2019 - 20:55)

0

#15 Пользователь не на сайте   siv1987 ответил: »

 
 
  • Advanced
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: IPB Skins Team
  • Сообщений: 9 443
  • Регистрация: 20-Март 09
  • Репутация: 2 544
  • IPB version:3.1.x
 

Отправлено 12 Май 2019 - 21:07

Просмотреть сообщениеTemKa_SD сказал(а):

Но я всё равно не понимаю, почему оно должно запускаться в одно время, между выполнением функций есть задержка в миллисекундах, и время МОЖЕТ БЫТЬ разное, а МОЖЕТ БЫТЬ и одинаковое.

Это потому что вы не читате документацию. Я уже сто раз объяснил почему - если указать второй аргумент, функция будет использовать это время, если не указано - текущее время. Вы задаете свое время во втором аргументе. Что здесь не понятного? Уже на пальцах объясняю куда уже проще. Откройте мануал и изучите свойство функции. И вообще, возьмите как привычку читать описания функций в мануале на php.net
0

Сообщить об этой теме:


  • 2 Страниц +
  • 1
  • 2
  • Вы не можете создавать новые темы
  • Вы не можете отвечать в этой теме

1 пользователей читают эту тему
0 зарегистрированных, 1 гостей, 0 скрытых


Контактная информация

Вопросы по работе сайта

+7 (917) 501-4765
C 10 до 20 в рабочие дни (время московское)

Техническая поддержка

Контактные данные специалистов

Дизайн форумов

IPB 3.x ¦ IPB 2.x

Бесплатные шаблоны

IPB 3.2 – 3.4 ¦ IPB 3.1 ¦ IPB 3.0 ¦ IPB 2.2 – 2.3 ¦ IPB 2.1 ¦ Клипарт
Лицензия на использование ¦ Ваша поддержка ¦ О проекте
Copyright © 2005-2019 IPBSkins.ru Team
При копировании материалов с сайта
прямая ссылка на источник обязательна