PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Работа скрипта неоднозначна
mobila
Отправлено: 12 Июля, 2017 - 05:17:55
Post Id


Новичок


Покинул форум
Сообщений всего: 4
Дата рег-ции: Июль 2017  


Помог: 0 раз(а)




Есть скрипт который берет информацию с базы данных через хранимые процедуры
формирует csv файл, и загружает результат по фтп обратно на сайт.

Работало все нормально, однако в последнее время началось, затыкание работы скрипта,

встает колом на 19 строке, думал что может проблема в сотруднике , однако убирал сотрудника из базы и тогда скрипт вставал на следующем, обратил внимание что если я выводил доп информацию о работе скрипта на экран, (типо echo $workerCount." - ".$workerFirstName." (".$workerID.")) тогда скрипт вставал на 17 или 15 строке.

ps. работа хранимых процедур проверял на сервере базы данных - отрабатывает без ошибок.
вот сам скрипт:

<?php

require_once "functions.php";
require_once "csvBuilder.php";

//ini_set('display_errors',1); // отображать ошибки
//error_reporting(E_ALL); // отображать ошибки
set_time_limit(0);
//echo ini_get("memory_limit")."\n"; // показать лимит какой есть
ini_set("memory_limit", "256M");
//echo ini_get("memory_limit")."\n"; // показать лимит какой установлен

set_error_handler('err_handler');

function err_handler($errno, $errmsg, $filename, $linenum) {
$date = date('Y-m-d H:i:s (T)');
$f = fopen('errors.txt', 'a');
if (!empty($f)) {
$filename =str_replace($_SERVER['DOCUMENT_ROOT'],'',$filename);
$err = "$errmsg = $filename = $linenum\r\n";
fwrite($f, $err);
fclose($f);
}
}

$time_start = getmicrotime();
define("SITE_PATH", $_SERVER["DOCUMENT_ROOT"]);

class UserExport {

protected $medicalWorkers = array();
protected $data = array();
protected $csvFileName = "";

private $FTP_SERVER = "ftp";
private $FTP_SERVER_PORT = 21;
private $FTP_USER_NAME = "user";
private $FTP_USER_PASS = "passw";
private $FTP_UPDATE_PATH = "";

public function init(){

// шаг 1. Забираем список врачей с сайта
$url = '---';
$stringData = file_get_contents($url);
$this->medicalWorkers = unserialize($stringData);

$this->csvFileName = SITE_PATH."/csv/export.csv";

__("step 0 stop");
return $this;
}

protected function filterSchedule($result, $workerID){

$data = array();
while($line = mssql_fetch_array($result, MYSQL_ASSOC)){

if($line["Subj_ID"] != $workerID){
continue;
}

$data[] = array(
$line["Subj_ID"],
$line["computed2"],
$line["duration"],
$line["busy"]
);
}

return $data;
}

public function prepareData(){

// mssql
$link = mssql_connect("saite", "user", "passw") or die("Could not connect : " . mssql_error());
mssql_select_db("site_cashe") or die("Could not select database"); //

// Monday Wednesday Saturday работает нормально,
// ошибка работы Thursday, Firday, Sunday

$dateStart = date("Y.m.d");
$dateStop = date("Y.m.d", strtotime("now+7 day"));

__("step 1 stop");

$zapos = " select Subj_ID, coalesce(SUBJECT_schedule,''), coalesce(specialty_schedule,''), convert(varchar(19),date_begin,120), duration, busy, place from site_cashe.dbo.mss_view_md_schedule";

// шаг 2. забираем для каждого доктора информацию о его расписании
$data = array();
__(count($this->medicalWorkers));
$workerCount = 0;
foreach($this->medicalWorkers as $workerID=>$workerFirstName){

$query = "exec site_cashe.dbo.mss_proc_md_sched ule @date_start='".GetA( 'start_date', $dateStart )."', @date_end='".GetA( 'end_date', $dateStop )."', @subj='".$workerFirstName."%', @spec='%', @busy_look=".GetA( 'busy', 1 ).$zapos;


$result = mssql_query($query) or die("Query failed : " . mssql_get_last_message());
__($workerCount." = ".$query);

//шаг 3. отсеиваем не нужную информацию, и складываем в общую копилку

$data = array_merge( $data,
$this->filterSchedule($result, $workerID)
);
__($workerCount." - ".$workerFirstName." (".$workerID.") период ".$dateStart ." - ".$dateStop);

$workerCount++;

if($workerCount > 100){
__("Break {$workerCount} !");
break;
}

/* Освобождаем память от результата */
mssql_free_result($result);

}

/* Закрываем соединение */
mssql_close($link);

__("step 3 stop");
$this->data = $data;

return $this;
}

public function createCSV(){

$data = $this->data;

// Шаг 4. формируем результаты в виде csv
$fields = array(
array(
"Caption"=>"Код врача",
"Name"=>"0"
),
array(
"Caption"=>"Начало приема",
"Name"=>"1"
),
array(
"Caption"=>"Длительность",
"Name"=>"2"
),
array(
"Caption"=>"Занято",
"Name"=>"3"
)
);
$builder = new CsvBuilder;
$builder->create($data, $fields);
$result = $builder->buildToFile( $this->csvFileName );
__("step 4 stop");

return $this;
}

public function uploadToFTP(){

if(!file_exists($this->csvFileName)){
throw new Exception("Нет файла для экспорта ".$this->csvFileName);
}

// Шаг 5. Передаем сформированный csv файл по фтп на сервер сайта
$ftp_connect = @ftp_connect($this->FTP_SERVER, $this->FTP_SERVER_PORT);
$login_result = @ftp_login($ftp_connect, $this->FTP_USER_NAME, $this->FTP_USER_PASS);

if((!$ftp_connect) || (!$login_result)) {
throw new Exception("Невозможно установить FTP подключение к серверу <b>".
$this->FTP_SERVER."</b> для пользователя <b>".$this->FTP_USER_NAME."</b>");
}

// загрузить файлы
$pathToUpload = $this->FTP_UPDATE_PATH.".../Upload/schedule.csv";
ftp_pasv($ftp_connect, true);
if(!ftp_put($ftp_connect, $pathToUpload, $this->csvFileName, FTP_BINARY) ) {
throw new Exception("Не удалось залить залить файл ".$this->csvFileName." на FTP ".$pathToUpload);
}

ftp_close($ftp_connect);

__("step 5");
return $this;
}

// Шаг 6. дергаем на выполнение скрипт по загрузке данных
public function startToImport(){

$url = '...updateSchedule=1';
$stringData = file_get_contents($url);
__("step 6");
}
}

$export = new UserExport();

try{

__("Start!");
$export->init()
->prepareData()
->createCSV()
->uploadToFTP()
->startToImport();

__("Done!");
}
catch(Exception $e){

__("Error: ".$e->getMessage());
}


?>
(Добавление)
единственная ошибка которая в лог кидается

date() [<a href='function.date'>function.date</a>]: It is not safe to rely on the system's timezone settings. Please use the date.timezone setting, the TZ environment variable or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'Asia/Krasnoyarsk' for '7.0/no DST' instead = C:\Program Files\Apache Group\Apache2\htdocs\export.php = 85

но на сервере такой же TZ указан, кстати, да и эта ошибка вылетает когда скрипт отрабатывает без залипа.
 
 Top
mobila
Отправлено: 13 Июля, 2017 - 12:31:23
Post Id


Новичок


Покинул форум
Сообщений всего: 4
Дата рег-ции: Июль 2017  


Помог: 0 раз(а)




всем спасибо - нашел ошибку сам, оказалось в исходных данных неверный период внесен был.
Хорошо
 
 Top
mobila
Отправлено: 13 Июля, 2017 - 20:00:49
Post Id


Новичок


Покинул форум
Сообщений всего: 4
Дата рег-ции: Июль 2017  


Помог: 0 раз(а)




кстати , скрипт хоть и рабочий но с заложенным косяком Подмигивание
интересно никто не заметил его чтоли? ))))
 
 Top
Строитель
Отправлено: 13 Июля, 2017 - 20:07:01
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 841
Дата рег-ции: Февр. 2014  


Помог: 26 раз(а)




mobila пишет:
интересно никто не заметил его чтоли?
Да кому он, кроме вас, нужен-то Радость
 
 Top
mobila
Отправлено: 14 Июля, 2017 - 02:40:29
Post Id


Новичок


Покинул форум
Сообщений всего: 4
Дата рег-ции: Июль 2017  


Помог: 0 раз(а)




Строитель пишет:
mobila пишет:
интересно никто не заметил его чтоли?
Да кому он, кроме вас, нужен-то Радость


да это понятно, но я про спортивный интерес Радость
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« Если скрипт не работает »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB