【问题标题】:Php check if unlink returns false or truephp 检查 unlink 是否返回 false 或 true
【发布时间】:2017-06-29 01:46:12
【问题描述】:

我想检查 unlink 是返回 true 还是 false。

目前我试过这个:

if(!unlink("$directory/$file"))
{
     echo "works not";
}
else
{
     echo "works";
}

我没有输出,我只是收到这条消息:

unlink("path"...VTS_01_1.VOB): Permission denied

但它不起作用,有什么想法吗?

【问题讨论】:

  • 你在这里得到了什么输出?
  • 我什么也没得到,我只收到这条消息:unlink("path"...VTS_01_1.VOB): Permission denied
  • 我故意打开该文件夹/文件以捕获错误并显示针对此问题的合适消息,在这种情况下没有权限错误它只是向我显示错误,因为我有文件夹/文件打开。
  • 嗯,有些东西应该在这里以一种或另一种方式输出......你能试着做除了echo之外的字面上的任何其他,来统治出于任何奇怪的原因,输出到stdout 有一些问题吗?改为抛出异常,写入其他文件,播放声音或其他内容,只是为了查看它正在进入ifelse

标签: php permissions return unlink


【解决方案1】:

你可以在尝试unlink之前使用is_writable函数:

if( ! @is_writable( "$directory/$file" ) ) {
     echo "works not";
}
else {
    unlink( "$directory/$file" );
    echo "works";
}

is_writable函数如果失败会显示警告(如果根据配置显示错误),所以使用@来抑制错误,如上面的代码所示。

话虽如此,你的 CODE 也没有错,即使你的 CODE 和错误一起出现,你也应该得到 works not 作为输出。如果您不明白,那很可能意味着在您的代码中设置了错误处理程序,并且处理程序正在通过exitdie 结束执行。

例如下面的CODE只会产生Error,没有输出(如果"$directory/$file"不可写):

function handle_error( $errno, $errstr, $errfile, $errline ) {
    die( $errstr );
}
set_error_handler( 'handle_error' );

// Note: since error handler ends execution with die
// even suppressing warning with @unlink will not give you
// any output other than the error
if( ! @unlink( "$directory/$file" ) ) {
     echo "works not";
}
else {
     echo "works";
}

所以检查set_error_handlerset_exception_handler,看看它们是否正在停止执行。输出缓冲也可能是原因。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-17
    • 1970-01-01
    • 2019-02-28
    • 1970-01-01
    • 2023-04-04
    • 2023-03-31
    • 1970-01-01
    • 2013-06-29
    相关资源
    最近更新 更多