Php可以写一个文件,但无法取消链接,在Windows上,是否可能?

时间:2012-10-19 11:10:55

标签: php file-permissions

我有以下功能,用于检查目录是否可写。

/**
 * check if the path is writable. if the path is a folder it creates a test file.
 *
 * @param string $path
 * @return boolean
 */
public static function is_writable( $path ) {
    //will work in despite of Windows ACLs bug
    //NOTE: use a trailing slash for folders!!!
    //see http://bugs.php.net/bug.php?id=27609
    //see http://bugs.php.net/bug.php?id=30931
    if ( $path{strlen($path)-1} === DIRECTORY_SEPARATOR ) {// recursively return a temporary file path
        return self::is_writable( $path . uniqid( mt_rand() ) . '.tmp' );
    } else if ( is_dir( $path ) ) {
        return self::is_writable( $path . DIRECTORY_SEPARATOR . uniqid( mt_rand() ) . '.tmp' );
    }
    $file_already_exists = file_exists( $path );
    // check tmp file for read/write capabilities
    $f = @fopen( $path, 'a');
    if ( $f === false ) {
        return false;
    }
    if ( ! $file_already_exists ) {
        unlink( $path );
    }
    return true;
}

这一直很好,直到最近我总是收到警告,因为unlink()无权删除该文件。但临时文件是正常创建的,所以我可以写入目录。

  

警告:取消链接(C:\ Program Files(x86)\ Zend \ Apache2 \ htdocs \ wordpress \ wp-content \ plugins \ all-in-one-event-calendar-premium \ cache \ 152006398050813468bb6ec.tmp)[功能.unlink]:C:\ Program Files(x86)\ Zend \ Apache2 \ htdocs \ wordpress \ wp-content \ plugins \ all-in-one-event-calendar-premium \ lib \ utility \ class-ai1ec-中的权限被拒绝第35行的filesystem-utility.php

这怎么可能?我试图给我正在测试的目录777,我仍然收到警告!我在带有Zend服务器的Windows 7上

4 个答案:

答案 0 :(得分:3)

尝试添加fclose()调用,在创建文件后将文件指针保持打开状态。

如果你想做的就是确定你是否能够创建文件,也可以考虑使用touch()

答案 1 :(得分:0)

尝试取消关联时,您的文件不存在。看这里:

if ( ! $file_already_exists ) { //TRUE if file does not exist.
    unlink( $path );
}

当file_exist为FALSE时它起作用

答案 2 :(得分:0)

C:\ Program Files(x86)是受保护的系统目录。尝试使用资源管理器拖动文件 - 您需要通过点击UAC提示来获得必要的权限。

如果要在文件系统的这一部分中编写或删除PHP脚本,则需要从管理提示符运行它(打开开始菜单,在搜索框中键入“cmd”,右键单击在cmd命令上选择“以管理员身份运行”。)

在该提示符下,调用您的PHP脚本,它将拥有写入该文件夹或删除内容的所有权限,并且通常会在您认为适合的任何位置对您的系统造成严重破坏;)

正如其他人所提到的,chmod()在Windows中毫无意义,不会做任何事情。这只是一个* nix的东西。

答案 3 :(得分:-1)

通常c:\的Windows 7需要管理员写入添加/删除任何文件。要么给apache uaser admin写/给htdocs文件夹777权限/移动apache docrot c:\