Нужен процесс формы для автоматического переименования загруженной фотографии

ПРОБЛЕМА:

У меня есть код буферизации php, который «называет» мои страницы .html, сгенерированные формой, на основе данных в одном из полей формы в моей форме.

<!--Start Buffer->
<?php ob_start(); $URL=preg_replace('#[^_0-9a-zA-Z]#', '_', $_REQUEST['timeValue']); ?> 

Это конкретное поле формы автоматически заполняется текущими миллисекундными часами unix.

    <!--FormPage-->
    <!--Timevalue/Unix millisecond code/field->

    <div class="formElement">TIMESTAMP URL<br><input id="timeValue" name="timeValue"></div>
    <script src="timeValueURL.js"></script>

Поэтому ... мои файлы .html в конечном итоге сохраняются с «именем» (т.е. номером), которое совпадает с тем, какие «миллисекунды» были в момент «отправки» моей формы.

* Примечание. Моя кнопка «Отправить» также «обновляет» часы в миллисекундах при отправке.

Сгенерированные файлы .html затем сохраняются в один из допустимых каталогов; "категории / новости", "категории / спорт" или "категории / развлечения".

Итак, (Пример) Если файл .html сохранен в каталог 'news' ... и часы в миллисекундах были на '1500000000000', когда форма была отправлена ​​... файл .html будет иметь URL 'mywebsite.com /categories/news/1500000000000.html '


В той же форме ... У меня есть поле для загрузки файлов, в котором мои посетители могут загружать файл изображения со своего сервера / устройства.

Примечание. Допустимые типы файлов изображений ограничены JPEG, PNG и GIF.

Эти загруженные изображения сохраняются в папке с именем «категории-изображения».

В настоящее время ... эти файлы изображений сохраняются в этой папке под тем «именем», которое они имели при загрузке.

Пример. Если пользователь загружает изображение в формате JPEG с именем «blueimage.jpg», файл в настоящее время будет сохранен по URL-адресу «mywebsite.com/categories/category-images/blueimage.jpg».

Вместо этого ... я хотел бы, чтобы файл изображения имел то же «имя», что и файл .html.

Итак, используя приведенный выше пример ... изображение должно иметь имя "1500000000000.jpg" и URL-адрес

mywebsite.com/categories/category-images/1500000000000.jpg.


ВОПРОС:

Есть ли способ добиться этого, аналогичный или, возможно, даже включающий код, используемый для наименования файла .html?


ЗАМЕТКА:

Мне пришло в голову, что я также должен включить php для обработки изображений.

Итак, вот это ....

<?php 
    $target_dir = "articles/article-images/";
    $target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]); $uploadOk = 1;
    $imageFileType = pathinfo($target_file,PATHINFO_EXTENSION);
    if(isset($_POST["submit"]))
    {
        $check = getimagesize($_FILES["fileToUpload"]["tmp_name"]); 
        if($check !== false)
        {
            echo "" . $check[""] . ""; $uploadOk = 1;
        } 
        else
        {
            echo "  &#xd7; FILE IS NOT AN IMAGE"; $uploadOk = 0;
        } 
    }
    if(file_exists($target_file))
    {
        echo "  &#xd7; THIS IMAGE ALREADY EXIST ON SERVER"; $uploadOk = 0;
    }
    if ($_FILES["fileToUpload"]["size"] > 500000)
    {
        echo "  &#xd7; FILE IS TOO LARGE"; $uploadOk = 0;
    }
    if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg" && $imageFileType != "gif" )
    {
        echo "   &#xd7; ONLY JPG, JPEG, PNG & GIF FILES ARE PERMITTED"; $uploadOk = 0; 
    }
    if ($uploadOk == 0)
    {
        echo "  &#xd7; IMAGE WAS NOT UPLOADED";
    }
    else
    {
        if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file))
        {
            echo '<img class="fixed-ratio-resize" src="../../articles/article-images/'. basename( $_FILES["fileToUpload"]["name"]). '">';
        } 
        else
        {
            echo "  &#xd7; IMAGE WAS NOT UPLOADED";
        }
    } 
?>

person Jamie Sexton    schedule 27.05.2017    source источник


Ответы (1)


Вам просто нужно взять имя html-файла (миллисекунды, где бы ни находился этот код) и заменить $_FILES["fileToUpload"]["name"]. Я буду ссылаться на это значение как $millisecs с расширением $imageFileType:

<?php
# Presumably this whole thing is based off a post, so just check at the top
if(!isset($_POST["submit"])) {
    # Let the user know, this this can not be accessed without a submission
    die('Nothing submitted.');
}
# Set the extension first since you aren't going to use the name
$imageFileType  =  pathinfo($_FILES["fileToUpload"]["name"],PATHINFO_EXTENSION);
# Set dir
$target_dir = "articles/article-images/";
# Add your milliseconds carried over from your html script. Add extension,
# this will be the new name
$target_file = $target_dir.$millisecs.".{$imageFileType}"; 
# Default affermative
$uploadOk = 1;
# Get image size
$check = getimagesize($_FILES["fileToUpload"]["tmp_name"]); 
if($check !== false) {
    # I am not suer what this is...it doesn't look like you should echo
    # anything at all...
    echo "".$check[""]."";
    $uploadOk = 1;
}
else {
    echo "  &#xd7; FILE IS NOT AN IMAGE";
    $uploadOk = 0;
}

if(file_exists($target_file)) {
    echo "  &#xd7; THIS IMAGE ALREADY EXIST ON SERVER";
    $uploadOk = 0;
}

if ($_FILES["fileToUpload"]["size"] > 500000) {
    echo "  &#xd7; FILE IS TOO LARGE";
    $uploadOk = 0;
}
# Set allowed file types
$allowed = array('jpg','jpeg','png','gif');
#Check if type is in list
if(!in_array(strtolower($imageFileType),$allowed)) {
    echo "   &#xd7; ONLY JPG/JPEG, PNG & GIF FILES ARE PERMITTED";
    $uploadOk = 0; 
}

if($uploadOk == 0) {
    echo "  &#xd7; IMAGE WAS NOT UPLOADED";
}
else {
    # Move the temp file to the new name here
    if(move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
        # Write the basename of the new file here
        echo '<img class="fixed-ratio-resize" src="../../articles/article-images/'. basename($target_file). '">';
    } 
    else {
        echo "  &#xd7; IMAGE WAS NOT UPLOADED";
    }
}
person Rasclatt    schedule 27.05.2017