1

我有以下函数用于检查目录是否可写。

/**
 * 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)[function.unlink] : C:\Program Files (x86)\Zend\Apache2\htdocs\wordpress\wp-content\plugins\all-in-one-event-calendar-premium\lib\utility\class-ai1ec-filesystem-utility 中的权限被拒绝.php 在第 35 行

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

4

4 回答 4

3

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

touch()如果您只想确定是否能够创建文件,也可以考虑使用。

于 2012-10-19T16:08:01.097 回答
0

当您尝试取消链接时,您的文件不存在。看这里:

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

它在 file_exist 为 FALSE 时工作

于 2012-10-19T11:22:22.107 回答
0

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

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

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

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

于 2012-10-19T11:40:55.537 回答
-1

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

于 2012-10-19T11:19:32.983 回答