Здравейте!
Честито Рождество Христово и весело посрещане на Новата година!
През последните дни се занимавам с кодове за ъплоуд и след като не можах да си избера (оказа се, че темата не е толкова бедна) се върнах към следния скрипт. Използвал съм го преди, с класове е, няма рисайз, но пък имам идея как да го накарам да обработва неопределен брой заявки.
ПРОБЛЕМЪТ е, че на платения ми хост дава грешка, докато на фрий-хоста ми работи безпроблемно. СТРАННОТО е, че причината за грешката (и съобщението) подозрително се повтаря и при други кодове за ъплоуд и рисайз.
Ето класа, файл Upload.php
<?
class Upload
{
// Име на файла
var $name;
// MIME тип на файла
var $type;
// Големина на файла в Bytes
var $size;
// Резултат, като начало false
var $ok = false;
// Място, където желаете да копирате файла
var $direrctory;
// Конструктор на класа
// Определяне на мястото, където желаете да копирате файла
function Upload($path)
{
$this->directory = $path;
}
function LoadImage($file)
{
// променливата $this->name приема името на файла
$this->name = $_FILES['file']['name'];
// променливата $this->type приема MIME типа на файла
$this->type = $_FILES['file']['type'];
// променливата $this->size приема големината на файла в Bytes
$this->size = $_FILES['file']['size'];
// Проверка, дали файлът съдържа едно от разширенията
if(eregi("(jpg|gif|txt|csv|html)$", $this->name))
{
if(($this->size < 100000) && ($this->size!=0))
{
// Копиране на файла в избраната от Вас директория
copy($file,$this->directory . $this->name);
// променливата $this->ok приема стойност true
$this->ok = true;
}
else
{
// променливата $this->ok приема стойност false
$this->ok = false;
}
}
else
{
// променливата $this->ok приема стойност false
$this->ok = false;
}
// връщане на променливата $this->ok
return $this->ok;
}
// Дава името на файла
function get_name()
{
return $this->name;
}
// Дава типа на файла
function get_type()
{
return $this->type;
}
// Дава големината на файла
function get_size()
{
return $this->size;
}
}
?>
А ето и втория файл, в който се извиква класа, тук е и формата за ъплоуд:
<?
if(is_uploaded_file($HTTP_POST_FILES['file']['tmp_name']))
{
require('Upload.php');
$up = new Upload("images/");
$up->LoadImage($file);
echo $up->get_name() . "<br>";
echo $up->get_type() . "<br>";
echo $up->get_size() . "<br>";
}
?>
<form name="form" enctype="multipart/form-data" method="post" action="">
<input type="file" name="file"><input name="Send" type="submit" value="Upload">
</form>
След опит за качване на файл, парсерът изписва следното предупреждение:
Warning: copy(pic/0001.jpg) [function.copy]: failed to open stream: Permission denied in /users/tntmorg/public_html/probna_4/Upload.php on line 38
Файлът не е качен, но иначе получавам данните за него: име, тип, размер:
0001.jpg
image/pjpeg
59962
Странното е, че въпросният 38-ми ред, както можете да видите, е реда, в който се използва функцията copy. (помествам кода със забележките, ако някой реши да го ползва - както отбелязах - иначе работи).
В предишните скриптове си мислех, че проблемът е в неточното указване на пътя (извън класа), но все повече си мисля, че проблемът е в хоста ми. Какви биха могли да бъдат причните функцията copy да не работи? А може би имам грешка другаде (?!), макар че копирах кода от работещия скрипт в awardspace.com.
На 3-ти ще изтормозя администраторите на топхост да ми обяснят доста странности около услугата, която предлагат, но все пак, ще ми помогнете много, ако ме ориентирате за проблема.
Благодаря предварително!
Честито Рождество Христово и весело посрещане на Новата година!
През последните дни се занимавам с кодове за ъплоуд и след като не можах да си избера (оказа се, че темата не е толкова бедна) се върнах към следния скрипт. Използвал съм го преди, с класове е, няма рисайз, но пък имам идея как да го накарам да обработва неопределен брой заявки.
ПРОБЛЕМЪТ е, че на платения ми хост дава грешка, докато на фрий-хоста ми работи безпроблемно. СТРАННОТО е, че причината за грешката (и съобщението) подозрително се повтаря и при други кодове за ъплоуд и рисайз.
Ето класа, файл Upload.php
<?
class Upload
{
// Име на файла
var $name;
// MIME тип на файла
var $type;
// Големина на файла в Bytes
var $size;
// Резултат, като начало false
var $ok = false;
// Място, където желаете да копирате файла
var $direrctory;
// Конструктор на класа
// Определяне на мястото, където желаете да копирате файла
function Upload($path)
{
$this->directory = $path;
}
function LoadImage($file)
{
// променливата $this->name приема името на файла
$this->name = $_FILES['file']['name'];
// променливата $this->type приема MIME типа на файла
$this->type = $_FILES['file']['type'];
// променливата $this->size приема големината на файла в Bytes
$this->size = $_FILES['file']['size'];
// Проверка, дали файлът съдържа едно от разширенията
if(eregi("(jpg|gif|txt|csv|html)$", $this->name))
{
if(($this->size < 100000) && ($this->size!=0))
{
// Копиране на файла в избраната от Вас директория
copy($file,$this->directory . $this->name);
// променливата $this->ok приема стойност true
$this->ok = true;
}
else
{
// променливата $this->ok приема стойност false
$this->ok = false;
}
}
else
{
// променливата $this->ok приема стойност false
$this->ok = false;
}
// връщане на променливата $this->ok
return $this->ok;
}
// Дава името на файла
function get_name()
{
return $this->name;
}
// Дава типа на файла
function get_type()
{
return $this->type;
}
// Дава големината на файла
function get_size()
{
return $this->size;
}
}
?>
А ето и втория файл, в който се извиква класа, тук е и формата за ъплоуд:
<?
if(is_uploaded_file($HTTP_POST_FILES['file']['tmp_name']))
{
require('Upload.php');
$up = new Upload("images/");
$up->LoadImage($file);
echo $up->get_name() . "<br>";
echo $up->get_type() . "<br>";
echo $up->get_size() . "<br>";
}
?>
<form name="form" enctype="multipart/form-data" method="post" action="">
<input type="file" name="file"><input name="Send" type="submit" value="Upload">
</form>
След опит за качване на файл, парсерът изписва следното предупреждение:
Warning: copy(pic/0001.jpg) [function.copy]: failed to open stream: Permission denied in /users/tntmorg/public_html/probna_4/Upload.php on line 38
Файлът не е качен, но иначе получавам данните за него: име, тип, размер:
0001.jpg
image/pjpeg
59962
Странното е, че въпросният 38-ми ред, както можете да видите, е реда, в който се използва функцията copy. (помествам кода със забележките, ако някой реши да го ползва - както отбелязах - иначе работи).
В предишните скриптове си мислех, че проблемът е в неточното указване на пътя (извън класа), но все повече си мисля, че проблемът е в хоста ми. Какви биха могли да бъдат причните функцията copy да не работи? А може би имам грешка другаде (?!), макар че копирах кода от работещия скрипт в awardspace.com.
На 3-ти ще изтормозя администраторите на топхост да ми обяснят доста странности около услугата, която предлагат, но все пак, ще ми помогнете много, ако ме ориентирате за проблема.
Благодаря предварително!