Я создаю страницу, которая позволяет пользователю вводить данные об определенном элементе оборудования, а также загружать изображение этого оборудования на сервер, чтобы его можно было отображать, когда другие пользователи запрашивают этот конкретный элемент оборудования. Оборудование будет отслеживаться по серийному номеру.
После того, как пользователь вводит всю информацию об оборудовании, выбирает местоположение изображения и нажимает кнопку отправить … данные оборудования записываются в базу данных MySQL, изображение переименовывается с серийным номером оборудования и сохраняется в папке с именем «uploads», расположенной в корневой каталог сайтов.
Все работает отлично! Однако теперь мне нужно начать хранить изображения на другом сервере, чтобы они также были доступны для нашей ГИС-системы.
Мы устанавливаем папку на другом сервере …. // trxshares / GIS / transformer_pictures. Мой ИТ-отдел установил виртуальный каталог IIS, указывающий на папку trxshares в корне сайта ввода данных.
Вот рабочий код для загрузки в локальную папку uploads /:
if(isset($_FILES['image']))
{
if($_FILES['image']['name'] != NULL)
{
$errors= array();
$file_name = $_FILES['image']['name'];
$file_size = $_FILES['image']['size'];
$file_tmp = $_FILES['image']['tmp_name'];
$file_type = $_FILES['image']['type'];
$exp = explode(".", $_FILES['image']['name']);
$file_ext = strtolower(end($exp));
$extensions= array("jpg");
if(in_array($file_ext,$extensions)=== false)
$errors[]="extension not allowed, please choose a .jpg file.";
if($file_size > 4096000)
$errors[]='File size must be less than 4 MB';
if(empty($errors)==true)
{
move_uploaded_file($file_tmp,"uploads/".$SerialNo.".".$file_ext);
}
else
print_r($errors);
}
Опять же, код выше работает отлично.
В следующем блоке я пытаюсь переместить файл в виртуальный каталог и получаю ошибки:
if(isset($_FILES['image']))
{
if($_FILES['image']['name'] != NULL)
{
$errors= array();
$file_name = $_FILES['image']['name'];
$file_size = $_FILES['image']['size'];
$file_tmp = $_FILES['image']['tmp_name'];
$file_type = $_FILES['image']['type'];
$exp = explode(".", $_FILES['image']['name']);
$file_ext = strtolower(end($exp));
$extensions= array("jpg");
if(in_array($file_ext,$extensions)=== false)
$errors[]="extension not allowed, please choose a .jpg file.";
if($file_size > 4096000)
$errors[]='File size must be less than 4 MB';
if(empty($errors)==true)
{
move_uploaded_file($file_tmp, $_SERVER['DOCUMENT_ROOT']."\\transformer_pictures\\".$SerialNo.".".$file_ext);
}
else
print_r($errors);
}
и получите эту ошибку:
Предупреждение: move_uploaded_file (C: \ inetpub \ wwwroot \ lusapps \ transformer_pictures \ 1684271793.jpg): не удалось открыть поток: нет такого файла или каталога в C: \ inetpub \ wwwroot \ lusapps \ app \ power \ power-transformers.php on строка 398 Предупреждение: move_uploaded_file (): невозможно переместить ‘C: \ Windows \ Temp \ phpA27E.tmp’ в ‘C: \ inetpub \ wwwroot \ lusapps \ transformer_pictures \ 1684271793.jpg’ в C: \ inetpub \ wwwroot \ lusapps \ app \ power \ power-transformers.php на линии 398 *
Я не могу понять, как правильно ссылаться на виртуальный каталог …. есть идеи? Спасибо
Попробуйте использовать только имя виртуального каталога. Например, если ваш виртуальный каталог — transformer_pictures, тогда используйте / transformer_pictures без $ SERVER [Document_Root].
Другой подход может заключаться в использовании общего ресурса на другом сервере. // other_server_path / transformer_pictures, просто убедитесь, что у пользователя пула приложений есть права доступа к этому каталогу.
Других решений пока нет …