Задать вопрос
@Kirill2501

Почему пропадает абсолютный путь к фотографии?

Привет, может кто помочь? При загрузке фото выводится /red/files/image/имя файла.jgp, а нужно сайт.ру/red/files/image/имя файла.jgp файла.jgp В чем здесь проблема? если в $save_url указать абсолютный путь, имя сайта пропадает
<?php
require_once 'JSON.php';

$php_path = dirname(__FILE__) . '/';
$php_url = dirname($_SERVER['PHP_SELF']) . '/';

//Путь к каталогу сохранения файлов
$save_path = $php_path . '../files/';
//Файл сохранить URL-адрес каталога
$save_url = $php_url . '../files/';
//Определение расширений файлов, которые можно загрузить
$ext_arr = array(
	'image' => array('gif', 'jpg', 'jpeg', 'png', 'bmp'),
	'flash' => array('swf', 'flv'),
	'media' => array('swf', 'flv', 'mp3', 'wav', 'wma', 'wmv', 'mid', 'avi', 'mpg', 'asf', 'rm', 'rmvb'),
	'file' => array('doc', 'docx', 'xls', 'xlsx', 'ppt', 'htm', 'html', 'txt', 'zip', 'rar', 'gz', 'bz2'),
);
//Максимальный размер файла 10 мегабайт
$max_size = 10000000;

$save_path = realpath($save_path) . '/';

//Ошибка загрузки PHP
if (!empty($_FILES['imgFile']['error'])) {
	switch($_FILES['imgFile']['error']){
		case '1':
			$error = 'Больше, чем php.ini позволяет размер.';
			break;
		case '2':
			$error = 'Размер, превышающий допустимый размер формы.';
			break;
		case '3':
			$error = 'Загружаются только части изображения.';
			break;
		case '4':
			$error = 'Пожалуйста, выберите изображение.';
			break;
		case '6':
			$error = 'Временный каталог не найден.';
			break;
		case '7':
			$error = 'Ошибка записи файлов на жесткий диск.';
			break;
		case '8':
			$error = 'Загрузка файла остановлена расширением.';
			break;
		case '999':
		default:
			$error = 'Неизвестная ошибка.';
	}
	alert($error);
}

//Когда вы загружаете файлы.
if (empty($_FILES) === false) {
	//Исходное имя
	$file_name = $_FILES['imgFile']['name'];
	//Имя временного файла на сервере.
	$tmp_name = $_FILES['imgFile']['tmp_name'];
	//Размер файла.
	$file_size = $_FILES['imgFile']['size'];
	//Проверка имени файла.
	if (!$file_name) {
		alert("Выберите файл.");
	}
	//Проверка каталога.
	if (@is_dir($save_path) === false) {
		alert("Загруженный каталог не существует.");
	}
	//Проверка разрешений на запись в каталог
	if (@is_writable($save_path) === false) {
		alert("Загрузка каталога без разрешения на запись.");
	}
	//Проверка загрузки
	if (@is_uploaded_file($tmp_name) === false) {
		alert("Не удалось загрузить.");
	}
	//Проверьте размер файла
	if ($file_size > $max_size) {
		alert("Размер файла загрузки превышает лимит.");
	}
	//Проверьте имя каталога
	$dir_name = empty($_GET['dir']) ? 'image' : trim($_GET['dir']);
	if (empty($ext_arr[$dir_name])) {
		alert("Имя каталога неверно.");
	}
	//Получить расширение файла
	$temp_arr = explode(".", $file_name);
	$file_ext = array_pop($temp_arr);
	$file_ext = trim($file_ext);
	$file_ext = strtolower($file_ext);
	//Проверка расширения
	if (in_array($file_ext, $ext_arr[$dir_name]) === false) {
		alert("Загрузка расширений файлов не допускается\только допустимо" . implode(",", $ext_arr[$dir_name]) . "Формат.");
	}
	//Создание папки
	if ($dir_name !== '') {
		$save_path .= $dir_name . "/";
		$save_url .= $dir_name . "/";
		if (!file_exists($save_path)) {
			mkdir($save_path);
		}
	}
	$ymd = date("Ymd");
	$save_path .= $ymd . "/";
	$save_url .= $ymd . "/";
	if (!file_exists($save_path)) {
		mkdir($save_path);
	}
	//Новое имя файла
	$new_file_name = date("YmdHis") . '_' . rand(10000, 99999) . '.' . $file_ext;
	//Перемещение файлов
	$file_path = $save_path . $new_file_name;
	if (move_uploaded_file($tmp_name, $file_path) === false) {
		alert("Не удалось загрузить файл.");
	}
	@chmod($file_path, 0644);
	$file_url = $save_url . $new_file_name;

	header('Content-type: text/html; charset=UTF-8');
	$json = new Services_JSON();
	echo $json->encode(array('error' => 0, 'url' => $file_url));
	exit;
}

function alert($msg) {
	header('Content-type: text/html; charset=UTF-8');
	$json = new Services_JSON();
	echo $json->encode(array('error' => 1, 'message' => $msg));
	exit;
}
?>
  • Вопрос задан
  • 136 просмотров
Подписаться 1 Простой 1 комментарий
Решения вопроса 1
@dzhebrak
Вы нигде не добавляете текущий домен в переменную $file_url, поэтому в ней указан относительный путь.

Для получения текущего домена можно использовать $_SERVER['HTTP_HOST']

PS. Лучше (по крайней мере для начинающих) использовать готовые фреймворки - в них обычно подобный функционал уже реализован. Также вы будете видеть best practices, да и поддерживать такой код в дальнейшем будет проще.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы