Увеличивающиеся файлы картинок

Версия 1.6

Одна из типичных ошибок в версии 1.6 это добавление файла к существующему при обмене, зачем вообще было выбрано добавление? А все дело в обмене ZIP архивом, когда 1С разбивает файл на куски одинакового размера с одинаковым именем отправляет файлы на сервер пока не соберется один большой. Так вот достаточно для исправления ошибки поставить условие которое будет определять если архив, то надо добавлять к файлу, если другой файл – перезаписывать.

Привожу пример функции modeFile() в /admin/controller/exchange1c.php

 

	/**
	 * ver 1
	 * update 2017-06-02
	 * Обрабатывает загруженный файл на сервер
	 */
	private function modeFile($mode, &$error) {

    	$this->log('modeFile', 2);

        $xmlfiles = array();

		if (!$this->checkAuthKey()) exit;
		$cache = DIR_CACHE . 'exchange1c/';

		// Проверяем на наличие каталога
		if(!is_dir($cache)) mkdir($cache);

		// Проверяем на наличие имени файла
		if (isset($this->request->get['filename'])) {
			$uplod_file = $cache . $this->request->get['filename'];
		}
		else {
			$error = "modeFile(): No file name variable";
			return false;
		}

		// Проверяем XML или изображения
		if (strpos($this->request->get['filename'], 'import_files') !== false) {
			$cache = DIR_IMAGE;
			$uplod_file = $cache . $this->request->get['filename'];
			$this->checkUploadFileTree(dirname($this->request->get['filename']) , $cache);
		}

		// Проверка на запись файлов в кэш
		if (!is_writable($cache)) {
			$error = "modeFile(): The folder " . $cache . " is not writable!";
			return false;
		}

		$this->log("upload file: " . $uplod_file,2);

		$time_limit = ini_get('max_execution_time');
		$memory_limit = ini_get('memory_limit');
		$this->log("time_limit: " . $time_limit, 2);
		$this->log("memory_limit: " . $memory_limit, 2);

		set_time_limit(0);
		ini_set('memory_limit', '-1');

		// Получаем данные
		$data = file_get_contents("php://input");
		if ($data !== false) {

			// расширение файла
			$file_ext = strtoupper(substr(strrchr($uplod_file, '.'), 1));
			
			// Записываем в файл
			if ($file_ext == 'ZIP') {
				$filesize = file_put_contents($uplod_file, $data, FILE_APPEND | LOCK_EX);
			} else {
				$filesize = file_put_contents($uplod_file, $data, LOCK_EX);
			}
			$this->log("file size: " . $filesize, 2);

			if ($filesize) {
				chmod($uplod_file , 0664);

				$xmlfiles = $this->extractZip($uplod_file, $error);
				if ($error) {
					$this->echo_message(0, "modeFile(): Error extract file: " . $uplod_file);
					return false;
				};
				if (count($xmlfiles)) {
					// Это архив, удаляем архив
					unlink($uplod_file);
				}
			} else {
				$this->echo_message(0, "modeFile(): Error create file");
			}
		}
		else {
			$this->echo_message(0, "modeFile(): Data empty");
		}

		set_time_limit($time_limit);
		ini_set('memory_limit', $memory_limit);

		return $xmlfiles;

	} // modeFile()

Кириллов Виталий
Программист 1С, php, java, jquery. Мастер по ремонту электроники

Добавить комментарий

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