Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Добавление фото на сайт. что не так ???


Автор: lutyi1984 4.10.2011, 23:59
Ребята у меня проблема такого характера. мне нужно загрузить фото на сайт c файла admin/имя файла.php в "корневую" папку images , вот код который я использую
Код

<input type="file" name="myfile"  id="myfile" /></label> /*Строка для загрузки фото*/
в файле обработчике у меня следующее
<?php //================Настройки============= //
$maxwidth = "150px"; // максимальная ширина картинок на превью
$fotos_dir = "/../images//"; // Директория для фотографий 
$foto_name = $fotos_dir.time()."_".basename($_FILES['myfile']['name']); // Полное имя файла вместе с путем
$foto_light_name = time()."_".basename($_FILES['myfile']['name']); // Имя файла исключая путь
$foto_tag = "<img src=\"$foto_name\" border=\"0\">"; // Готовый тэг для вставки картинки на страницу
$foto_tag_preview = "<img src=\"$foto_name\" border=\"0\" width=\"$maxwidth\">"; // Тот же тэг, но для превью

// Текст ошибок
$error_by_mysql = "<span style=\"font: bold 15px tahoma; color: red;\">Ошибка при добавлении данных в базу</span>";
$error_by_file = "<span style=\"font: bold 15px tahoma; color: red;\">Невозможно загрузить файл в директорию. Возможно её не существует или папка не обладает правами 777 - измените права данной папки</span>";



// Начало
if(isset($_FILES["myfile"]))
{
$myfile = $_FILES["myfile"]["tmp_name"];
$myfile_name = $_FILES["myfile"]["name"];
$myfile_size = $_FILES["myfile"]["size"];
$myfile_type = $_FILES["myfile"]["type"];
$error_flag = $_FILES["myfile"]["error"];

// Если ошибок не было
if($error_flag == 0)
{
        
    
$DOCUMENT_ROOT = $_SERVER['DOCMENT_ROOT'];
$upfile = getcwd()."/../images//" . time()."_".basename($_FILES["myfile"]["name"]);/*куда зальём*/
if ($_FILES['myfile']['tmp_name'])
{

  
//Если не удалось загрузить файл

if (!move_uploaded_file($_FILES['myfile']['tmp_name'], $upfile)) 
{
echo "$error_by_file";
exit;
}

}
else
{
    echo 'Проблема: возможна атака через загрузку файла. ';
    echo $_FILES['myfile']['name'];
    exit;
}


// После удачной обработки файла, выводим сообщение
echo "<h3>Результат добавления фото на сайт:</h3> <br />";
echo "<b>Файл успешно скопирован в директорию:</b> ".$fotos_dir." <br /><b>Имя файла:</b> ".$foto_light_name."<br />";
echo "<br /><small>Превью загруженной картинки:</small> <br />$foto_tag_preview<br /><br />";

$img_foto = "$foto_light_name";

// Заносим путь картинки в базу данных
$q = mysql_query ("INSERT INTO tb_foto (title, img_foto, longdesc_foto ) VALUES ('$title','$img_foto','$longdesc_foto')");
$query = mysql_query($q);


// Данные успешно внесены в базу данных, выводим сообщение
if ($query == '') {
echo "<br /><b>Данные успешно внесены в базу</b>";
}

// В противном случае, выводим ошибку при добавлении в базу данных
else {
echo "$error_by_mysql";

}

        }
 
 elseif ($myfile_size == 0) {
 echo "Вы не выбрали файл для загрузки!";
 } 
    

}
?>



Если применять этот код на локальном сервере (localhost) , то всё работает как положено и фото грузиться в папку images, а вот когда это всё дело на сайте фото почему-то грузиться в корень сайта. Права на папку images 777 я выставил... Подскажите. что не так ??? 

Автор: krundetz 5.10.2011, 09:01
Посмотриете на сервере значение вот этой переменной:
Код

$upfile = getcwd()."/../images//" . time()."_".basename($_FILES["myfile"]["name"]);/*куда зальём*/


Автор: MuToGeN 5.10.2011, 11:19
<form enctype="multipart/form-data">
</form>

Автор: lutyi1984 5.10.2011, 21:37
Цитата(krundetz @  5.10.2011,  09:01 Найти цитируемый пост)
Посмотриете на сервере значение вот этой переменной:
Выделить всёкод PHP
1:
    
$upfile = getcwd()."/../images//" . time()."_".basename($_FILES["myfile"]["name"]);/*куда зальём*/


Вот что на локалке Z:\home\localhost\www\molod\images\
А вот что на сервере /domains/имя моего сайта/public_html/images

И что самое тронное, что на локалке всё работает а на сервере хоть убейся нет и всё... 
Где у меня тут ошибка ??? 

Автор: capitan 7.10.2011, 12:05
Код

$DOCUMENT_ROOT = $_SERVER['DOCMENT_ROOT'];
$upfile = getcwd()."/../images//" . time()."_".basename($_FILES["myfile"]["name"]);/*куда зальём*/


А почему не так?
Код

$DOCUMENT_ROOT = $_SERVER['DOCMENT_ROOT'];
$upfile = $DOCUMENT_ROOT ."/images/" . time()."_".basename($_FILES["myfile"]["name"]);/*куда зальём*/

Автор: lutyi1984 11.10.2011, 18:23
Цитата(capitan @  7.10.2011,  12:05 Найти цитируемый пост)
1:
2:
    
$DOCUMENT_ROOT = $_SERVER['DOCMENT_ROOT'];
$upfile = getcwd()."/../images//" . time()."_".basename($_FILES["myfile"]["name"]);/*куда зальём*/


А почему не так?
Выделить всёкод PHP
1:
2:
    
$DOCUMENT_ROOT = $_SERVER['DOCMENT_ROOT'];
$upfile = $DOCUMENT_ROOT ."/images/" . time()."_".basename($_FILES["myfile"]["name"]);/*куда зальём*/


по тому что данная директория ../images/ - означает что нужно залить в папку выше, а данная /images/ - в этой же папки залить....
 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)