【问题标题】:Saving a document on another server在另一台服务器上保存文档
【发布时间】:2015-04-21 14:30:41
【问题描述】:

所以我正在使用 TCPDF 生成一个 pdf 文件并尝试使用

将生成的文档保存在另一个服务器上的文件夹中
$pdf->Output('\\\210.24.39.6\salesorder\salesorder.pdf', 'F');

我得到了错误

警告:fopen():不支持远程主机文件访问,

我能够从服务器计算机远程访问路径和文件夹。有谁知道为什么?

【问题讨论】:

  • 我建议您使用 ftp_* 函数或您喜欢的任何协议将 pdf 文件存储在远程服务器上,而不是通过 TCPDF 输出。
  • 检查您的 PHP 安装的 allow_url_fopen 设置
  • 如何配置ftp方式?我必须配置其他服务器吗?

标签: php server tcpdf


【解决方案1】:

您可以将共享挂载为 Windows 上的驱动器或 linux 服务器上的文件夹,而不是像使用本地文件系统一样使用它。

对于窗户:

net use \\210.24.39.6\salesorder\

对于 linux(别忘了创建文件夹 salesorder):

mount –t cifs 210.24.39.6:/salesorder /fullpath/salesorder –o username=test,workgroup=test

【讨论】:

    【解决方案2】:
    1. 一种可能的解决方案是scp,它代表Secured Copy

      它的语法如下:

      scp /local/dir/file.pdf root@destination.net:target/dir/file.pdf
      

      它通过 SSH 复制文件,需要在目标服务器上授权 SSH 密钥以省略密码请求。

    2. 另一种解决方案是使用 FTP 协议复制文件。

    3. 或设置allow_url_fopen = 1,但要了解这样做的风险herehere。很快:它不安全

    ! 选项 1 和 2 要求在源位置生成/保存文件并将其复制到另一个/目标位置。

    【讨论】:

      【解决方案3】:

      除了 scp(这是一个不错的选择)之外的另一个选项是在本地生成 PDF,然后将其复制到 IP 或 UNC 名称。我使用的一个实现如下:

      1) 生成 pdf 到您的本地驱动器。 (适合你的地方)

      $pdf->Output($filename, 'F');
      

      2) 使用内置的 php 函数将该文件复制到远程驱动器。我构建了一个函数来执行此操作,因为我还想进行一些检查,以确保它可以继续进行而不会出错。

      function CheckDirectoryExists($path) {
          if (!file_exists($path)) {          
              mkdir($path, 0777, true); 
          }
          return file_exists($path);
      }
      
      function CopyFile($file, $to_file) {
          if (!file_exists($file)) {
              return -1;
          }
          if (!file_exists($to_file)) {
              $path = '';
              $explodedPath = explode(dirSep, $to_file);
              for ($i = 0; $i < (sizeof($explodedPath) - 1); $i++) {
                  $path .= $explodedPath[$i] . dirSep;
              }
              CheckDirectoryExists($path);
          } else {
              unlink($to_file);
          }
          return copy($file, $to_file);
      }
      

      这应该可以,我在我设置的 init.php 中使用的是 UNC 名称而不是我的 IP 地址。

      【讨论】:

        猜你喜欢
        • 2016-10-18
        • 2016-05-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多