php ftp проверка, если папка существует, всегда возвращает ошибку при создании - PullRequest
3 голосов
/ 05 октября 2011

Может кто-нибудь сказать мне, что я делаю не так в этом коде?

if($id != '') {
    if(is_dir("../public_html".$tem_pasta['path']."/pics/".$id)) {
        echo "pasta já existia";
        $destination_file = "../public_html".$tem_pasta['path']."/pics/".$id."/".$myFileName;
    } else {
        //pasta nao existia
        if (ftp_mkdir($conn_id, "../public_html".$tem_pasta['path']."/pics/".$id)) {
            $destination_file = "../public_html".$tem_pasta['path']."/pics/".$id."/".$myFileName;
        //echo "pasta criada<br>";
        } else {
            echo "erro, não criou a pasta<br>";
        }
    }
} else {
    $destination_file = "../public_html".$tem_pasta['path']."/pics/".$myFileName;
}

он проверяет, есть ли у меня папка ($ id) в моем каталоге фото, и если нет, сценарий создает новую. работает хорошо, но если я пытаюсь загрузить другой файл в предыдущую созданную папку, он возвращает ошибку, говоря, что не создал папку ...

спасибо

Ответы [ 3 ]

7 голосов
/ 05 октября 2011

is_dir работает только в локальной файловой системе. Если вы хотите проверить, существует ли ftp-каталог, попробуйте это:

function ftp_is_dir($ftp, $dir)
{
    $pushd = ftp_pwd($ftp);

    if ($pushd !== false && @ftp_chdir($ftp, $dir))
    {
        ftp_chdir($ftp, $pushd);   
        return true;
    }

    return false;
} 

if($id != '') {
    if(ftp_is_dir($conn_id, "../public_html".$tem_pasta['path']."/pics/".$id)) {
    // and so on...
7 голосов
/ 05 октября 2011

Я не думаю, что вы можете использовать is_dir на ресурсе FTP, вам нужно проверить, равен ли размер dir / файла -1 с помощью ftp_size.

Потому что я думаю, что сейчас происходит следующее: вы снова пытаетесь создать ту же папку, и именно поэтому возникает ошибка.

Edit: Или проверьте с помощью ftp_chdir !

<?php 
function ftp_directory_exists($ftp, $dir) 
{ 
    // Get the current working directory 
    $origin = ftp_pwd($ftp); 

    // Attempt to change directory, suppress errors 
    if (@ftp_chdir($ftp, $dir)) 
    { 
        // If the directory exists, set back to origin 
        ftp_chdir($ftp, $origin);    
        return true; 
    } 

    // Directory does not exist 
    return false; 
} 
?> 

Должно работать!

2 голосов
/ 17 февраля 2016

Использование ftp_nlist и in_array

$ftp_files = @ftp_nlist($this->connection, $directory);

if ($ftp_files === false) {
    throw new Exception('Unable to list files. Check directory exists: ' . $directory);
}

if (!in_array($directory, $ftp_files)) {
    $ftp_mkdir = @ftp_mkdir($this->connection, $directory);

    if ($ftp_mkdir === false) {
        throw new Exception('Unable to create directory: ' . $directory);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...