在将项目打包为bin文件后,原系统里有个从public目录里文件获取不到了

jetlong

问题描述

各位大佬,在将项目打包为bin文件后,原系统里有个从public目录里获取字体文件生成验证码的功能,打包成bin后,系统提示无法获取到文件,且打包配置文件里的 exclude_pattern 也没有排除 public目录,请问这个还会是什么情况导致

错误内容:
getimagesize(phar:\D:\MyProject\admin\build\admin.phar\public\static\fonts\sai.ttf): Failed to open stream: No such file or directory

340 2 0
2个回答

864328615

解决了吗大佬,我也遇到了,验证码插件的字体文件获取不到了

864328615
/**
     * @param $font
     * @return string
     */
    protected static function getFontPath($font)
    {
        static $fontPathMap = [];
        if (!\class_exists(\Phar::class, false) || !\Phar::running()) {
            return $font;
        }

        $tmpPath = sys_get_temp_dir() ?: '/tmp';
        $filePath = "$tmpPath/" . basename($font);
        clearstatcache();
        if (!isset($fontPathMap[$font]) || !is_file($filePath)) {
            file_put_contents($filePath, file_get_contents($font));
            $fontPathMap[$font] = $filePath;
        }
        return $fontPathMap[$font];
    }

    $fontttf = self::getFontPath($ttfPath . $config['fontttf']);

我用的那个tinywang的验证码插件 应该是同理的,解决方法抄的webman作者出的那个验证码,目前已解决

  • jetlong 2023-08-25

    可以,这个方案可行,其实文件还是获取的二进制文件外的字体文件了,可以将那个临时目录改写入到 runtime目录里去,就在当前运行程序下的runtime目录里了,不会到系统缓存目录里了

  • jetlong 2023-08-25

    谢谢你了

  • jetlong 2023-08-25

    在 functions.php 里加了个函数

    /**

    • @param $path 资源路径,如:public_path() . DIRECTORY_SEPARATOR . 'static'. DIRECTORY_SEPARATOR . 'abc.ttf'
    • @return string
      */
      function get_public_resource_path($path)
      {
      static $fontPathMap = [];
      if (!\class_exists(\Phar::class, false) || !\Phar::running()) {
      return $path;
      }

      $tmpPath = runtime_path() . DIRECTORY_SEPARATOR . 'temp';
      if (!is_dir($tmpPath)) {
          mkdir($tmpPath);
      }
      $filePath = $tmpPath . DIRECTORY_SEPARATOR . basename($path);
      clearstatcache();
      if (!isset($fontPathMap[$path]) || !is_file($filePath)) {
          file_put_contents($filePath, file_get_contents($path));
          $fontPathMap[$path] = $filePath;
      }
      return $fontPathMap[$path];

      }

🔝