PHP-код, нарушающий макет HTML - PullRequest
1 голос
/ 16 апреля 2011

У меня есть простой загрузчик файлов, который благодаря stackoverflow теперь полностью работает, однако, когда я скопировал код PHP в свой основной макет, однажды инициализированный для загрузки файла, но это неправильный формат или размер, и это повторяетошибка, он нарушает HTML-код под ним.Я думаю, что это связано с «выходом»;после каждого эха?но могу ошибаться.

<?php
if($_POST['upload']) {
if($_FILES['image']['name'] == "")
{
    #there's no file name return an error
    echo "<br/><b>Please select a file to upload!\n</b>";
    exit;
}
#we have a filename, continue

#directory to upload to
$uploads = '/home/habbonow/public_html/other/quacked/photos';
$usruploads = 'photos';

#allowed file types
$type_array = array(image_type_to_mime_type(IMAGETYPE_JPEG), image_type_to_mime_type(IMAGETYPE_GIF), image_type_to_mime_type(IMAGETYPE_PNG), 'image/pjpeg');

if(!in_array($_FILES['image']['type'], $type_array))
{
    #the type of the file is not in the list we want to allow
    echo "<br/><b>That file type is not allowed!\n</b>";
    exit;
}

$max_filesize = 512000;
$max_filesize_kb = ($max_filesize / 1024);

if($_FILES['image']['size'] > $max_filesize)
{
    #file is larger than the value of $max_filesize return an error
    echo "<br/><b>Your file is too large, files may be up to ".$max_filesize_kb."kb\n</b>";
    exit;
}

$imagesize = getimagesize($_FILES['image']['tmp_name']);

#get width
$imagewidth = $imagesize[0];
#get height
$imageheight = $imagesize[1];

#allowed dimensions
$maxwidth = 1024;
$maxheight = 1024;

if($imagewidth > $maxwidth || $imageheight > $maxheight)
{
    #one or both of the image dimensions are larger than the allowed sizes return an error
    echo "<br/><b>Your file is too large, files may be up to ".$maxwidth."px x ".$maxheight."px in size\n</b>";
    exit;
}

move_uploaded_file($_FILES['image']['tmp_name'], $uploads.'/'.$_FILES['image']['name']) or die ("Couldn't upload ".$_FILES['image']['name']." \n");

echo "<br/>The URL to your photo is <b>" . $usruploads . "/" . $_FILES['image']['name'] . "</b>. Please use this when defining the gallery photos";

}

?>

<form name="uploader" method="post" action="" enctype="multipart/form-data">
      <input type="file" name="image" style="width:300px;cursor:pointer" />
      <input type="submit" name="upload" value="Upload Image" />
</form>

Ответы [ 3 ]

3 голосов
/ 16 апреля 2011

Действительно, когда вы звоните exit;это означает «немедленно прекратить всю обработку; этот сценарий завершен».Все, что последует за ним, в том числе HTML, интерпретироваться не будет.

Лучшей организацией было бы сделать этот код функцией с эффектом:

function uploadMyStuffPlease() {

    if($_POST['upload']) {
        if($_FILES['image']['name'] == "")
        {
            #there's no file name return an error
            echo "<br/><b>Please select a file to upload!\n</b>";
            return;
        }
        #we have a filename, continue

    // ....

}

Теперь вы можете простовызовите uploadMyStuffPlease(), который выполнит столько обработки, сколько сможет, и, возможно, вернет рано в случае ошибки.В любом случае, функция вернет , поэтому остальная часть вашего скрипта (включая HTML) все еще может быть интерпретирована.

1 голос
/ 16 апреля 2011
if(isset($_POST['upload'])){

OR

if(!empty($_POST['upload'])){

И удалить exit ...

1 голос
/ 16 апреля 2011

Если вы позвоните exit;, ваш PHP-скрипт больше не сможет выводить что-либо .Вот почему макет не работает.

Возможно, вам следует стараться не допускать части HTML в свой PHP-код и особенно избегать открывать теги, которые впоследствии не закрываются (например, div s или что-либо еще).

При этом, вероятно, безопаснее всего просто поместить все в функцию, которая не завершит работу скрипта по завершении (см. Посты других).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...