为了账号安全,请及时绑定邮箱和手机立即绑定

php is_writable 对于可写挂载总是返回 false

php is_writable 对于可写挂载总是返回 false

PHP
绝地无双 2022-12-23 13:43:06
为了将我的应用程序转换为 laravel,我尝试创建一个新应用程序。我正在使用网络挂载来访问 linux 服务器上的文件。没有ssh访问。我的机器是Windows。服务器可作为网络安装访问。在安装的驱动器上创建 laravel-6 应用程序时出现此错误:Generating optimized autoload files> Illuminate\Foundation\ComposerScripts::postAutoloadDump> @php artisan package:discover --ansiIn PackageManifest.php line 179:  The R:\path\to\laravel\bootstrap\cache directory must be present and writable.Script @php artisan package:discover --ansi handling the post-autoload-dump event returned with error code 1在我可以读写的所有目录中。经过一些测试后,我发现is_writable对于驱动器上的文件(在 Windows 上)总是返回 false。这很愚蠢,因为我可以在驱动器上创建和修改文件(包括缓存目录)。我也在 cygwin 中尝试过它。同样的结果。phpfileperms方法返回 formatted: 40777。所以我想它应该是可读可写的。PHP版本:7.3.9如何配置我的 windows php 环境以将文件视为可写?
查看完整描述

1 回答

?
慕姐8265434

TA贡献1813条经验 获得超2个赞

当您访问网络(smb 或 samba)文件时,这似乎是 php 中一个已知的错误。

已经问过类似的问题:is_writable 为 NFS-share 返回 false,即使它对用户 www-data 是可写的

阅读此内容以获取有关该错误的更多信息:https ://bugs.php.net/bug.php?id=68926

不幸的是,这个问题的唯一解决方案(据我所知)是编写您自己的自定义is_writeable函数,如下所示:

<?php

namespace Same\As\One\You\Use\Them\In;

function is_readable($file)

{

    if(file_exists($file) && is_file($file))

    {

        $f = @fopen($file, 'rb');

        if(fclose($f))

        {

            return true;

        }

    }


    return false;

}


function is_writable($file)

{

    $result = false;

    if(file_exists($file) && is_file($file))

    {

        $f = @fopen($file, 'ab');

        if(fclose($f))

        {

            return true;

        }

    }


    return false;

}

?>


查看完整回答
反对 回复 2022-12-23
  • 1 回答
  • 0 关注
  • 168 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号