powered by simpleCommunicator - 2.0.18     © 2024 Programmizd 02
Map
Форумы / Поиск: Искать последние сообщения автора: БурыйТина
25 сообщений из 1 000, страница 1 из 40
Просто трёп / АХТУНГ! Кто раздаёт приглашения в AREA-51? (читайте тут!)
    #40138136
Фотография БурыйТина
Скрыть профиль Поместить в игнор-лист
Участник
Паддержу
...
Рейтинг: 0 / 0
C++ / Создать документ Word в С++
    #40138133
Фотография БурыйТина
Скрыть профиль Поместить в игнор-лист
Участник
Реализовал, получился легкий ппц...
Не ожидал таких сложностей, но отступать уже было поздно.
Правда Сматьего# делает тоже самое за несколько строчек. Но я никак не смог привыкнуть к коду шарпа, не ложится и все.
...
Рейтинг: 0 / 0
Просто трёп / Привет!
    #40138130
Фотография БурыйТина
Скрыть профиль Поместить в игнор-лист
Участник
и Йа
...
Рейтинг: 0 / 0
C++ / Создать документ Word в С++
    #40138123
Фотография БурыйТина
Скрыть профиль Поместить в игнор-лист
Участник
Valentin Kolesnikov [игнорируется] 

День добрый
возник вот тут затык
Цитата 
[игнорируется]
Добавьте ссылку на библиотеки Interop для Word и Excel. Для этого перейдите в "Solution Explorer", щелкните правой кнопкой мыши на "References" и выберите "Add Reference...". Затем выберите "Microsoft.Office.Interop.Word" и "Microsoft.Office.Interop.Excel" в списке.
Не могу я найти ссылку на эту библиотеку. Через NuGet нахожу, но не встает пакет, там в зависимостях Net, а у меня чистый C++ проект.

Видимо надо перейти на C# и Net ?

Я выбрал С++ учитывая что имел с ним опыт около 15 лет назад. Программирование было как хобби. 15 лет я ничего не писал, сейчас возникло желание несколько автоматизировать свой труд.

подскажите пожалуйста, чистый С++ ушел ввиду того что все перешли на Net для поддержки кроссплатформенности? чтобы компилировать программу в нужную ОСь и все?

вот рока результат моих страданий ))
Код: C++
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
 CoInitialize(NULL);
 CLSID clsid;
 HRESULT hr = CLSIDFromProgID(L"Word.Application", &clsid);//Выполняет поиск идентификатора CLSID в реестре с учетом идентификатора ProgID.
 // "Excel.Application" for MSExcel

 IDispatch* pWApp = nullptr;
 if (SUCCEEDED(hr))
 {
     hr = CoCreateInstance(clsid, NULL, CLSCTX_LOCAL_SERVER,
         IID_IDispatch, (void**)&pWApp);//Создает и инициализирует по умолчанию один объект класса , связанный с указанным идентификатором CLSID.
 }

 DISPID dispID[2];
 VARIANT pvResult;
 LPOLESTR ptName = LPOLESTR(L"Visible");
 hr = pWApp->GetIDsOfNames(IID_NULL, &ptName, 1, LOCALE_USER_DEFAULT, dispID);
 if (SUCCEEDED(hr))
 {
     VARIANT x;
     x.vt = VT_I4;
     x.lVal = 1; // 1=visible; 0=invisible;
     DISPID prop = DISPATCH_PROPERTYPUT;

     //DISPPARAMS dp = { NULL,NULL,0,0 };
     //dp.cArgs = 1;
     //dp.rgvarg = &x;
     //dp.cNamedArgs = 1;
     //dp.rgdispidNamedArgs = NULL;

     DISPPARAMS dp = { NULL,NULL,0,0 };
     dp.cArgs = 1;
     dp.cNamedArgs = 1;
     dp.rgdispidNamedArgs = &dispID[1];

     dp.rgvarg = new VARIANT[dp.cArgs];
     dp.rgvarg[0].vt = VT_BSTR;
     dp.rgvarg[0].bstrVal = SysAllocString(OLESTR("Hello"));

         hr = pWApp->Invoke(dispID[0], IID_NULL, LOCALE_SYSTEM_DEFAULT, DISPATCH_PROPERTYPUT,
             &dp, &pvResult, NULL, NULL);

         //MessageBoxA(hWnd, "Важная инфа", "Дошел", MB_OK);
         pWApp->Release();
         delete[] dp.rgvarg;
 }
Процесс ворд создается, но дальше я ничего не могу с ним сделать, ни отобразить, ни уничтожить. Остановился короче. Я хочу сделать экземляр Ворда видимым и уже передавать туда данные и т.д., чтобы видеть как программа работает.
...
Изменено: 09.10.2023, 15:29 - БурыйТина
Рейтинг: 0 / 0
C++ / Создать документ Word в С++
    #40138113
Фотография БурыйТина
Скрыть профиль Поместить в игнор-лист
Участник
Братцы, подскажите пожалуйста как в Visual Studio C++ создать документ Word или Exel и программно отредактировать его?
Поделитесь кусочком кода?
...
Рейтинг: 0 / 0
Просто трёп / Уважаемые старые участники вернитесь назад
    #40138101
Фотография БурыйТина
Скрыть профиль Поместить в игнор-лист
Участник
Знающие что форума нет, не узнают что он реинкарнировался :(
...
Рейтинг: 0 / 0
PHP, Perl, Python / покритикуйте Пожалуйста скрипт
    #40036246
Фотография БурыйТина
Скрыть профиль Поместить в игнор-лист
Участник
Создаем дерево кэша и генерируем случайное имя файла

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
function getRandomFileName($path, $extension='')//Генерирует имя файла из 20 случайных символов и возвращает полный путь к файлу
    {
        $extension = $extension ? '.' . $extension : '';
       // $path = $path ? $path . '/' : '';
 
        do {
            $name = substr(md5(microtime() . rand(0, 9999)), 0, 20);
			$hash = sha1($name);
			$chunks = str_split($hash, 4);
			$cache_dir = $path.$chunks[0].'/'.$chunks[1].'/'.$chunks[2].'/';
			if (!is_dir($cache_dir)) mkdir($cache_dir, 0775, true);	
            $file = $cache_dir . $name . $extension;		
        } while (file_exists($file));
 
        return $file;
    }



(''')0___0(''')
\ '( î_î )' / /
\ \_0_/ /
l . . l
/ /Y\ \
(„„„)_(„„„) Превед !
...
Рейтинг: 0 / 0
PHP, Perl, Python / Скрипт умирает не отработав
    #40034438
Фотография БурыйТина
Скрыть профиль Поместить в игнор-лист
Участник
vkle
Отчасти странная функция. Есть же готовая https://www.php.net/manual/ru/function.tempnam для аналогичной цели.
Впрочем, и в том и в другом случае дерево для кэша не создается . А значит, по мере наполнения файлами (единицы тысяч) "плоской" директории появятся тормоза. Чем больше файлов - тем заметнее.
В ряде случаев кеш проще в базе хранить. Здесь как раз такой случай - им файла можно получить только лишь из базы, так почему бы сразу из базы не получить контент? Минус обращение к ФС получается. Впрочем, это вопрос другого толка, к данной теме отношения не имеет.


Дошли руки до этого замечания. Не поделитесь ли примером, как дерево для кэша создавать?
...
Рейтинг: 0 / 0
PHP, Perl, Python / Скрипт умирает не отработав
    #40032721
Фотография БурыйТина
Скрыть профиль Поместить в игнор-лист
Участник
Написал источнику API данных, они признали проблему на их стороне, поправили. Теперь ошибки присутствуют иногда, но не в таком объеме.
...
Рейтинг: 0 / 0
PHP, Perl, Python / Скрипт умирает не отработав
    #40032493
Фотография БурыйТина
Скрыть профиль Поместить в игнор-лист
Участник
Дописал загрузку через сокеты.
Исходя из анализа логов, у источника API данных стоит какое-то ограничение, о котором мне не сказали, и после определенной частоты запросов сначала выдают 500, а если начинаю запрашивать далее то вообще перестают отвечать.
Сейчас попробую поиграть с ожиданиями типа sleep и подобрать оптимальную частоту запросов посмотрю что будет.
...
Рейтинг: 0 / 0
PHP, Perl, Python / Скрипт умирает не отработав
    #40032490
Фотография БурыйТина
Скрыть профиль Поместить в игнор-лист
Участник
vkle,

Да уже разобрался, спасибо
Код: php
1.
	list($header, $body) = explode("\r\n\r\n", $result, 2);


Вот так прекрасно разделяет и тело потом сохраняем в файл pdf
сейчас научусь разбирать заголовок. Мне по сути из него нужен ответ 200 или иной, и размер контента, чтобы сравнить с сохраненным файлом. Вы очень мне помогли дав правильное направление. По крайней мере в сокетах четко работает таймаут и процент удачных загрузок выше, чем у курла. Теперь смогу замыкать это в бесконечные циклы и запрещать выход без скачивания файла.
Останется только научиться еще сравнивать и сливать 2 JSON файла, чтобы в битрикс отдавать не всю "портянку" данных, а только новые данные и у меня одна часть будет сделана, можно будет в битриксе настроить бизнес процессы в зависимости от того, какие данные получены.
Спасибо большое за поддержку.
...
Рейтинг: 0 / 0
PHP, Perl, Python / Скрипт умирает не отработав
    #40032410
Фотография БурыйТина
Скрыть профиль Поместить в игнор-лист
Участник
Стоило задать вопрос, сразу пришел ответ
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
if (!$fp) {
    echo "Ошибка создания сокета $errstr ($errno)
\n";
} else {
	echo "Сокет успешно создан: $fp
\n";
	
    fwrite($fp, "GET /$path HTTP/1.0\r\nHost: $host\r\nAccept: */*\r\n\r\n");
	
    while (!feof($fp)) {
        echo fgets($fp, 128);
    }
	
    fclose($fp);



Все успешно выбрасывает в браузер. Теперь надо понять где начало и конец и как выделить именно PDF файл из ответа. Я думаю что действительно через сокеты будет надежнее качать чем курлом
...
Рейтинг: 0 / 0
PHP, Perl, Python / Скрипт умирает не отработав
    #40032368
Фотография БурыйТина
Скрыть профиль Поместить в игнор-лист
Участник
vkle,

Очень интересно оказалось про сокеты.
Страницы открывать научился через SSL, но вот PDF скачивать не получается

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
$port = 443;
$timeout = 30;
$host = "torta-torta.ru";
$path = "docs/pustoy-fayl-pdf-5-5d1eee323ff31-5d43c64a48619.pdf"; 
$opts = array(
    'ssl' => array(
        'verify_peer' => false,
        'verify_peer_name' => false
    ),
	'header'=>array(
		"Accept-language: ru\r\n" .
        "Cookie: foo=bar\r\n" .
		"charset: windows-1251"
			)
);
$context = stream_context_create($opts);
$fp = stream_socket_client('ssl://'.$host.':'.$port, $errno, $errstr, 30, STREAM_CLIENT_CONNECT, $context);
if (!$fp) {
    echo "Ошибка создания сокета $errstr ($errno)
\n";
} else {
	//fwrite($fp, $out);
    $out = "GET /$path  HTTP/1.1\r\n";
    $out .= "Host: $host\r\n";
    $out .= "Connection: Close\r\n\r\n";
	echo "$out
\n";
    fwrite($fp, $out);
	
    while (!feof($fp)) {
        echo fgets($fp, 128);
    }
	
    fclose($fp);
}



Вот скрипт, дает вот такой ответ

авторGET /docs/pustoy-fayl-pdf-5-5d1eee323ff31-5d43c64a48619.pdf HTTP/1.1 Host: torta-torta.ru Connection: Close
HTTP/1.1 400 Bad Request Date: Tue, 29 Dec 2020 13:59:32 GMT Server: Apache/2.4.29 (Ubuntu) Content-Length: 312 Connection: close Content-Type: text/html; charset=iso-8859-1
Bad Request
Your browser sent a request that this server could not understand.
Apache/2.4.29 (Ubuntu) Server at www.codestudio.site Port 443



Что не так? Почему файл "забрать" не могу?
...
Рейтинг: 0 / 0
PHP, Perl, Python / Скрипт умирает не отработав
    #40032357
Фотография БурыйТина
Скрыть профиль Поместить в игнор-лист
Участник
peter64,

авторпопробуйте в начало скрипта вставить error_reporting(E_ALL) и посмотрите результат;
Была похожая проблема с IIS. При обработке exсel файлов вылетал скрипт.
У IIS было ограничение по времени работы скрипта.

Спасибо, вставил

авторБурыйТина,
https://stackoverflow.com/questions/31472800/connection-timed-out-after-10000-milliseconds-in-curl-and-php-geocoder
Рекомедуют : curl_setopt($curl, CURLOPT_TIMEOUT,0);



Это не буду, так как после таймаута, должны делать запрос повторно, источник данных не всегда отвечает.
...
Рейтинг: 0 / 0
PHP, Perl, Python / Скрипт умирает не отработав
    #40032159
Фотография БурыйТина
Скрыть профиль Поместить в игнор-лист
Участник
peter64,
Не знаю, он облачный
...
Рейтинг: 0 / 0
PHP, Perl, Python / Скрипт умирает не отработав
    #40032101
Фотография БурыйТина
Скрыть профиль Поместить в игнор-лист
Участник
Я наигрался с попыткой хранения JSON ответов в БД, целый день пытался понять что я делаю не так, а потом узнал что моя версия MYSQL не позволяет хранить JSON. И когда очередь дошла до хранения PDF я как то не думал даже о его хранении в БД, а сделал хранение в ФС сразу.
Тут у меня возникает еще одна проблема, иногда почему-то файл скачивается не полностью. В отчете отдан весь файл, судя по объему переданных данных, а по факту получаю "битый" pdf. Таких файлов около 10% получается.
Про хранение в базе услышал, а пока писал возникла мысль, может эти файлы разнести как-то по директориям? Получать общее количество файлов в директории и создавать следующую? Вы это имели ввиду когда писали дерево для кэша? Я только со второго прочтения понял.
Я бы не хотел базу файлами забивать или это совсем не страшно?
Про https://www.php.net/manual/ru/function.tempnam не знал, поэтому "слепил" странную функцию.
За сокеты спасибо, читаю, очень интересная тема оказалась.
...
Рейтинг: 0 / 0
PHP, Perl, Python / Скрипт умирает не отработав
    #40032019
Фотография БурыйТина
Скрыть профиль Поместить в игнор-лист
Участник
vkle,

Спасибо за ответ!
Я не имею опыта программирования и не имею соответствующего образования. Решаю прикладную задачу под себя лично.

теперь по деталям начнем с простого

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
function getRandomFileName($path, $extension='')
    {
        $extension = $extension ? '.' . $extension : '';
        do {
            $name = substr(md5(microtime() . rand(0, 9999)), 0, 20);			
            $file = $path . $name . $extension;		
        } while (file_exists($file));
        return $file;
    }



Что касаемо таблицы, то это кэш своеобразный, чтобы 2 раза не скачивать одно и тоже

По последнему
авторА какие способы Вы уже пробовали за более чем десять дней?
Задали вопрос техподдержке. Они не увидели проблему на реальном скрипте. Понятно.
И всё?


Сделал все что смог, на что хватает знаний и образования.
Всячески изучил курл, много нового узнал, поигрался с таймаутами, ожиданиями и т.д.
Понял что никак сам не справлюсь и пришел сюда, узнал новое слово "сокеты" пошел гуглить что это и говнокодить. Что умею ...
Спасибо что помогаете.
...
Рейтинг: 0 / 0
PHP, Perl, Python / Скрипт умирает не отработав
    #40031945
Фотография БурыйТина
Скрыть профиль Поместить в игнор-лист
Участник
Вот код целиком

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
$start = microtime(true);
	set_time_limit(600);
	
	$key = API_KEY;
	$host = TIME_WEB_HOST;
	$user = TIME_WEB_USER;
	$pass = TIME_WEB_PASS;
	$base = TIME_WEB_BASE;
	$date = date('Y-m-d H:i:s'); file_put_contents(dirname(__FILE__)."/logs/curl_info.log", "\n\n $date *****************ПОПЫТКА СКАЧАТЬ ФАЙЛ***************\n Адрес для скачивания https://?key=$key&pdfUrl=$arg \n", FILE_APPEND);	
	$link = new mysqli($host, $user, $pass, $base);
	$sql = "SELECT * FROM files WHERE URL = '$arg'";
	if(!$link->ping){$link = new mysqli($host, $user, $pass, $base);}
	$sql_result = $link->query($sql);
	$nr = $sql_result -> num_rows;//mysqli_num_rows($sql_result);
	if($nr == 0){//Не скачивали этот файл
		$date = date('Y-m-d H:i:s'); file_put_contents(dirname(__FILE__)."/logs/curl_info.log", "$date Файл не загружался ранее \n", FILE_APPEND );
		$ch = curl_init("https://?key=$key&pdfUrl=$arg");
		$fname = getRandomFileName(dirname(__FILE__)."/", "pdf");
		$tmp = dirname(__FILE__)."/!tmp";
		$fp = fopen($tmp, 'wb');
		curl_setopt($ch, CURLOPT_FILE, $fp);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_TIMEOUT, 60); //CURLOPT_TIMEOUT => 60
		do{
			$date = date('Y-m-d H:i:s'); file_put_contents(dirname(__FILE__)."/logs/curl_info.log", "$date *****************ПОПЫТКА СКАЧАТЬ ФАЙЛ***************\n", FILE_APPEND);	
			set_time_limit(600);
			//sleep(61);
			curl_exec($ch);
			if(curl_errno($ch)){
				$date = date('Y-m-d H:i:s'); file_put_contents(dirname(__FILE__)."/logs/curl_info.log", "$date curl_errno - ".curl_errno($ch), FILE_APPEND);
				
				//throw new Exception(curl_error($ch));
				
				
				}
			$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);	
			$content_length_download = curl_getinfo($ch, CURLINFO_CONTENT_LENGTH_DOWNLOAD);
			$curl_info_size_download =  curl_getinfo($ch, CURLINFO_SIZE_DOWNLOAD);
			$date = date('Y-m-d H:i:s'); file_put_contents(dirname(__FILE__)."/logs/curl_info.log", "$date http_code - $http_code  content_length_download - $content_length_download curl_info_size_download - $curl_info_size_download
			Время выполнения скрипта: ".round(microtime(true) - $start, 4)." сек.\n", FILE_APPEND);	
			}while($http_code!=200);	
		//$info = curl_getinfo($ch);	
		//print_r($info);
		curl_close($ch);
		fclose($fp);
		file_put_contents($fname, file_get_contents($tmp));	
		if(($file_size = filesize($fname))==0){
			unlink($fname);
			}else{
				$sql = "INSERT INTO files
				(URL, download_to)
				VALUES
				('$arg','$fname')";
				if(!$link->ping){$link = new mysqli($host, $user, $pass, $base);}
				$sql_result = $link->query($sql);	
				$file_id = $link->insert_id;

			}
			
		}else{//Есть кэшированные данные			
		$row = $sql_result -> fetch_assoc();
		$fname = $row['download_to'];
		$file_id = $row['pk'];
		$date = date('Y-m-d H:i:s'); file_put_contents(dirname(__FILE__)."/logs/curl_info.log", "$date Файл загружен из кэша $fname\n", FILE_APPEND );
		}
	

	//$date = date('Y-m-d H:i:s'); file_put_contents(dirname(__FILE__)."/logs/curl_info.log", "$date http_code - $http_code content_length_download - $content_length_download file_size - $file_size curl_info_size_download $curl_info_size_download, arg - $arg\n", FILE_APPEND );	
	$date = date('Y-m-d H:i:s'); file_put_contents(dirname(__FILE__)."/logs/curl_info.log", "$date fname - $fname\n", FILE_APPEND );	
	return $file_id;
	$date = date('Y-m-d H:i:s'); file_put_contents(dirname(__FILE__)."/logs/curl_info.log", "$date file_id - $file_id\n", FILE_APPEND );	
}




В логе всегда все заканчивается одинаково

curl_info.log

2020-12-28 19:29:52 *****************ПОПЫТКА СКАЧАТЬ ФАЙЛ***************
Адрес для скачивания https://pdf
2020-12-28 19:29:52 Файл не загружался ранее
2020-12-28 19:29:52 *****************ПОПЫТКА СКАЧАТЬ ФАЙЛ***************




И после этого тишина.

До этого может быть скачано несколько файлов успешно, а может и вообще ничего не скачать.
Как с этим бороться?

ЗЗы время отключки скрипта всегда разное, техподдержка таймвеба не видит ничего, что бы прибивало скрипт
...
Рейтинг: 0 / 0
PHP, Perl, Python / Скрипт умирает не отработав
    #40029474
Фотография БурыйТина
Скрыть профиль Поместить в игнор-лист
Участник
Крашится curl_exec из этого цикла и записи из этого цикла, более внешнего цикла нет. Дата меняется от выполнения curl_exec. Много раз все отрабатывается хорошо и дает нужный результат, но после 40-50 вызовов происходит краш.
Пока писал, возникла мысль, может тот кто дает мне API считает что я слишком часто запросы делаю и тупо блочит меня? При этом не говоря это?
Надо попробовать паузу поставить между запросами.
Только вот не понимаю почему он не ждет 60 секунд, как в опциях написано? Может сразу ошибку получает? Но какую? как ее поймать и отработать?
Проблема возникает когда не отвечает API
Код прописать не могу, так как для чистоты эксперимента придется открывать АПИ источник и ключ.
...
Рейтинг: 0 / 0
PHP, Perl, Python / Скрипт умирает не отработав
    #40029446
Фотография БурыйТина
Скрыть профиль Поместить в игнор-лист
Участник
Продолжение

ЛогФайл вернул ошибку:
Connection timed out after 60000 milliseconds2020-12-20 11:28:45 зашли в обработку ошибки или пустого значения
2020-12-20 11:28:45 Запрос: http://ХХХХ
вернул ошибку:
Connection timed out after 60000 milliseconds2020-12-20 11:28:45 зашли в обработку ошибки или пустого значения
2020-12-20 11:28:45 Запрос: http://ХХХХ
вернул ошибку:
Connection timed out after 60000 milliseconds2020-12-20 11:28:45 зашли в обработку ошибки или пустого значения
2020-12-20 11:28:45 Запрос: http://ХХХ
вернул ошибку:
Connection timed out after 60000 milliseconds2020-12-20 11:28:45 зашли в обработку ошибки или пустого значения
2020-12-20 11:28:45 Запрос: http://ХХХХ
вернул ошибку:
Connection timed out after 60000 milliseconds2020-12-20 11:28:45 зашли в обработку ошибки или пустого значения
2020-12-20 11:28:45 Запрос: http:ХХХХ
вернул ошибку:
Connection timed out after 60000 milliseconds2020-12-20 11:28:45 зашли в обработку ошибки или пустого значения
2020-12-20 11:28:45 Запрос: http://ХХХ
вернул ошибку:
Connection timed out after 60000 milliseconds2020-12-20 11:28:45 зашли в обработку ошибки или пустого значения
2020-12-20 11:28:45 Запрос: http://ХХХХ



И так 2 Гигабайта
По логу видно что он не ждет 60 секунд. Что это может значить?
...
Рейтинг: 0 / 0
PHP, Perl, Python / Скрипт умирает не отработав
    #40029437
Фотография БурыйТина
Скрыть профиль Поместить в игнор-лист
Участник
ИТОГО:
Отсутствие ответа обработать в данной ситуации невозможно, а исправлять ситуацию долго и дорого. Надо смириться. Так?

ЗЫ
автор- Процесс принудительно завершает (или убивает - от слова kill) ядро ОС (или другие "силовые структуры" сервера), обнаружив превышение норм потребления - по памяти, по ресурсам CPU или по каким-то еще признакам/свойствам/ограничениям.


Это тщательно и неоднократно проверялось. Нет превышений и "силовые структуры" тут не причем.
...
Рейтинг: 0 / 0
PHP, Perl, Python / Скрипт умирает не отработав
    #40029427
Фотография БурыйТина
Скрыть профиль Поместить в игнор-лист
Участник
Вот так выглядит кусок кода

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
			$defaults = array(
				CURLOPT_URL => "URL",
				CURLOPT_HEADER => 0,
				CURLOPT_RETURNTRANSFER => TRUE,
				CURLOPT_TIMEOUT => 60
			); 	
			$ch = curl_init();
			curl_setopt_array($ch, $defaults);
			set_time_limit(130);
			$date = date('Y-m-d H:i:s');
			file_put_contents(dirname(__FILE__)."/logs/call_API.log", "$date делан запрос: http:\n", FILE_APPEND);			
			$data = curl_exec($ch);
			$date = date('Y-m-d H:i:s');
			file_put_contents(dirname(__FILE__)."/logs/call_API.log", "$date Запрос вернул: \n".$data, FILE_APPEND);			
			while($data === false or $data == '' ){
				set_time_limit(130);
				$date = date('Y-m-d H:i:s');
				file_put_contents(dirname(__FILE__)."/logs/call_API.log", "$date зашли в обработку ошибки или пустого значения\n". $data, FILE_APPEND);
					
					if($data === false){
						set_time_limit(130);
						$date = date('Y-m-d H:i:s');
						file_put_contents(dirname(__FILE__)."/logs/call_API.log", "$date Запрос вернул ошибку: $data \n".curl_error($ch), FILE_APPEND);
				}
				
			
			}



В логах последняя запись

лог2020-12-20 08:54:01 делан запрос: http:ХХХХХ


После этого тишина.
Всю голову уже сломал, что я не предусмотрел? Не отвечает curl_exec? Как это отловить и обработать?
...
Рейтинг: 0 / 0
PHP, Perl, Python / Скрипт умирает не отработав
    #40029419
Фотография БурыйТина
Скрыть профиль Поместить в игнор-лист
Участник
vkle,

поддержкаЗдравствуйте.

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


поддержкаmax_execution_time, его значение равно 800 секунд.



отключение скрипта происходит гораздо раньше. Установка бесконечного времени на выполнение скрипта, тоже не дает эффекта.

Зато утром в логах я увидел что

Код: php
1.
while(($data = curl_exec($ch)) === false or $data == '' )



все же работает и повторяет запросы при пустом ответе и если возвращается ошибка.
Может на этом решится проблема? Буду смотреть. Я так понимаю что все события предусмотрены вышеприведенным кодом, за исключением того, что закончился лимит времени на выполнение
...
Рейтинг: 0 / 0
PHP, Perl, Python / PHP & Excel
    #40029418
Фотография БурыйТина
Скрыть профиль Поместить в игнор-лист
Участник
vkle,

После Вашего сообщения тему можно было закрыть, я не знал что так можно.
Я не разработчик, но пришлось разбираться. Вы помогли.
Спасибо за ответ.
...
Рейтинг: 0 / 0
PHP, Perl, Python / Скрипт умирает не отработав
    #40029338
Фотография БурыйТина
Скрыть профиль Поместить в игнор-лист
Участник
Итак, новые вводные.
Умирает на curl_exec хотя далеко не всегда. Видимо что-то не получается с каким-то очередным запросом. Подскажите пожалуйста как отследить и отработать ошибку? curl_error пользы не приносит, ибо если скрип умирает, то он никуда больше не идет.
while(($data = curl_exec($ch)) === false or $data == '' ) такая конструкция у меня пытается заставить отработать запросы, но внутрь while не попадает обработчик.
...
Рейтинг: 0 / 0
25 сообщений из 1 000, страница 1 из 40
Форумы / Поиск: Искать последние сообщения автора: БурыйТина
Пользователи онлайн (27): Анонимы (24), Yandex Bot, Bing Bot 1 мин., Google Bot 8 мин.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]