it-swarm-vi.com

Hạn chế mở rộng đối với Tải lên nhiều tệp (JInput)?

JLoader::register('JFile', JPATH_LIBRARIES . '/joomla/filesystem/file.php');

$fields = array('one', 'two', 'three');

foreach ($fields as $field)
{
$file     = $input->files->get($field);
$src      = $file['tmp_name'];
$filename = JFile::makeSafe($file['name']);
$dest     = JPATH_BASE . "/screen/" . $filename;

 if ( strtolower(JFile::getExt($filename) ) == 'jpg') {
 if (JFile::upload($src, $dest))
{
    echo "upload successful";
}
}
else {
header("Location: /error.php"); 
}

Vấn đề tôi gặp phải là khi tôi sử dụng đoạn mã trên:

1) Khi tôi cố tải lên bất kỳ tệp không phải jpg nào, Tuyên bố ELSE được thực thi :)

else {
header("Location: /error.php"); 
}

nhưng khi tôi sử dụng cái này IF-STATMENT thay vì cái đã đề cập ở trên. :

if (JFile::upload($src, $dest))
{
    header("Location: /done.php");
}

và sau đó khi tôi cố tải lên bất kỳ tệp không phải jpg, nó sẽ nhảy tới IF-STATMENT:

if (JFile::upload($src, $dest))
{
    header("Location: /done.php");
}

Tại sao chuyện này đang xảy ra?

Chỉ khi tôi thay đổi echo "upload successful"; Thành header("Location: /done.php"); Tại sao sự kiện thay đổi?

1
saibbyweb

Thử đi:

$app = JFactory::getApplication();

if ( strtolower(JFile::getExt($filename) ) == 'jpg') {
    if (JFile::upload($src, $dest))
    {
        $app->setHeader('Location', JUri::root() . 'modules/mod_mymodule/done.php');
        // Success
    }
    else 
    {
        $app->setHeader('Location', JUri::root() . 'modules/mod_mymodule/error.php'); 
        // File could not be uploaded
    }   
}
else 
{
    $app->setHeader('Location', JUri::root() . 'modules/mod_mymodule/error.php'); 
    // Incorrect file type. Please select a jpg
}
1
Lodder