unlink($filename) : Предупреждение об отказе в доступе

Я получаю сообщение об отказе в доступе, когда пытаюсь использовать unlink().

Я создал функцию для удаления изображения из каталога содержимого:

function del($fnam){
chmod('content/'.$fnam, 0777);   
chown('content/'.$fnam,465);
unlink('content/'.$fnam);   
}

Я использовал chmod() и chown() после чтения с форумов, но все равно получаю это предупреждение, и изображение не удаляется.

Как бы то ни было, это работает как шарм, когда я вызываю его из другого места.

if($temp2==1){      //For Delete
$sql="delete from blog where b_id=$temp1";
$im=fetch('blog','b_img','b_id='.$temp1);

//Deleting Image

    del($im);
}

код выше не находится ни в какой функции (выполняется процедурным образом), и это дает мне положительный ответ. Как это исправить?


person Ajaz    schedule 23.07.2015    source источник
comment
вам нужны права на запись в содержащем каталоге, чтобы иметь возможность удалить файл, поскольку это файл каталога, который необходимо изменить для удаления файла. и вы УВЕРЕНЫ, что передаете правильный аргумент своей функции del?   -  person Marc B    schedule 23.07.2015
comment
@MarcB да, я передаю правильный аргумент, потому что функция работает отлично, когда я вызываю ее где-либо еще, даже если это была ошибка аргумента, она могла выдать ошибку из-за недопустимого имени файла или неверного пути, чего не было.   -  person Ajaz    schedule 23.07.2015
comment
@MarcB, как я могу изменить файл для удаления? спасибо   -  person Ajaz    schedule 23.07.2015
comment
@Ajaz, у тебя есть доступ к оболочке или доступ к ftp?   -  person Jigar    schedule 23.07.2015
comment
Я нашел его, просто снова написал весь код, и он работал как по волшебству. LOL компьютеры странные.   -  person Ajaz    schedule 01.08.2015


Ответы (4)


В этой ситуации вы не можете удалить файл с помощью php, потому что у php недостаточно разрешений, если вы не можете изменить разрешение сверху, попробуйте взломать FTP (я знаю, что это не обычно, но это работает, и это может помочь вам для личных использование)

// set up basic connection
$conn_id = ftp_connect($ftp_server);

// login with username and password
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);

// try to delete $file
if (ftp_delete($conn_id, $file)) {
 echo "$file deleted successful\n";
} else {
 echo "could not delete $file\n";
}
person CyC0der    schedule 23.07.2015
comment
это зависит от ваших возможностей хостинга и разрешения - person CyC0der; 01.08.2015

К сожалению, ваш код предполагает, что chmod и chown будут работать всегда, это неверное предположение.

Если у вас нет правильных разрешений, они также могут потерпеть неудачу.

Измените код таким образом, и он должен сказать вам, какой бит на самом деле идет не так.

function del($fnam){
    if ( ! chmod('content/'.$fnam, 0777) )  {
        echo 'chmod failed';
    }
    if ( ! chown('content/'.$fnam,465) ) {
        echo 'chown failed';
    }

    if ( ! unlink('content/'.$fnam) ) {  
        echo 'unlink failed';
    }

}
person RiggsFolly    schedule 23.07.2015

Вы не получаете ожидаемых результатов, потому что:

Согласно руководству chown:

Попытки изменить владельца имени файла на пользователя user. Только суперпользователь может изменить владельца файла.

Это будет работать только в том случае, если ваше приложение работает от имени пользователя root, что, я уверен, не так.

Согласно руководству chmod:

Пытается изменить режим указанного файла на указанный в режиме.

По сути, chmod и unlink не будут работать, если у вас нет необходимых разрешений.

person angelcool.net    schedule 23.07.2015

Попробуйте изменить разрешения для каталога содержимого

function del($fnam){
   chmod('content/, 0777);   
   unlink('content/'.$fnam);   
}
person katwekibs    schedule 23.07.2015
comment
если он не может удалить, я сомневаюсь, что он может изменить разрешение. - person Jigar; 23.07.2015