【问题标题】:"No such file or directory" on localhost copy本地主机副本上的“没有这样的文件或目录”
【发布时间】:2017-08-08 18:52:42
【问题描述】:

编辑:我很确定问题与我无法访问的防火墙有关。将 Canis 的答案标记为正确,我会想出别的办法,可能是 wget 或只是手动抓取文件并希望不需要重大更新。

编辑:这是latest version of the builderhere's the output。构建目录具有正确的结构和大部分文件,但只有它们的名称和扩展名 - 其中没有数据。

我正在编写一个 php 脚本,该脚本在本地目录中搜索文件,然后在我的 localhost (xampp) 中抓取相同的文件以复制到构建文件夹中(目标是在 localhost 上构建 php,然后将其放在服务器作为 html)。

不幸的是,我收到了错误:Warning: copy(https:\\localhost\intranet\builder.php): failed to open stream: No such file or directory in C:\xampp\htdocs\intranet\builder.php on line 73

这是一个例子 - 本地目录中的每个文件都返回相同的错误。源地址是正确的(我可以从错误日志中的地址访问本地主机上的文件)并且本地目录构造正确 - 只是将文件移动到其中不起作用。完整代码是here,最相关的部分是:

// output build files
foreach($paths as $path)
{
    echo "<br>";
    $path = str_replace($localroot, "", $path); 
    $source = $hosted . $path;
    $dest = $localbuild . $path;

    if (is_dir_path($dest))
    {
        mkdir($dest, 0755, true);
        echo "Make folder $source at $dest. <br>";
    }
    else
    {
        copy($source, $dest);
        echo "Copy $source to $dest. <br>";
    }
}

【问题讨论】:

  • 不要使用 URL 复制本地文件系统上的文件,使用本地文件系统路径

标签: php xampp copy localhost


【解决方案1】:

您正在尝试使用 URL 来遍历本地文件系统目录。 URL 仅供网络服务器理解网络请求。 如果你改变这个,你会有更多的运气:

copy(https:\\localhost\intranet\builder.php)

到这里:

copy(C:\xampp\htdocs\intranet\builder.php)

编辑

根据您在 cmets 中的其他信息,我了解到您需要生成静态 HTML 文件,以便在仅静态网络服务器上托管。这实际上不是复制文件的问题。它正在访问脚本在通过网络服务器运行时生成的 HMTL。

实际上,您可以通过几种不同的方式来做到这一点。我不确定生成器脚本是如何工作的,但似乎该脚本正试图从大量 PHP 文件中复制假定的输出。

要从 PHP 文件中获取生成的内容,您可以使用命令行 php 命令像 c:\some\path&gt;php some_php_file.php &gt; my_html_file.html 那样执行脚本,或者使用网络服务器的强大功能为您完成:

<?php

$hosted = "https://localhost/intranet/";              <--- UPDATED

foreach($paths as $path)
{
    echo "<br>";
    $path = str_replace($localroot, "", $path); 
    $path = str_replace("\\","/",$path);    <--- ADDED
    $source = $hosted . $path;
    $dest = $localbuild . $path;

    if (is_dir_path($dest))
    {
        mkdir($dest, 0755, true);
        echo "Make folder $source at $dest. <br>";
    }
    else
    {
        $content = file_get_contents(urlencode($source));
        file_put_contents(str_replace(".php", ".html", $dest), $content);
        echo "Copy $source to $dest. <br>";
    }
}

在上面的代码中,我使用file_get_contents() 从您使用https://... 的URL 读取html,在这种情况下,与copy() 不同,它将调用网络服务器,触发PHP 引擎生成输出。

然后我将纯 HTML 写入 $dest 文件夹中的文件,将文件名中的 .php 替换为 .html

编辑

在上面添加和修改了一点代码。

【讨论】:

  • @KriswithaK 所以,你的意思是你想使用 PHP 生成基于动态数据的 HTML,然后将输出作为静态文件存储在磁盘上,而不是生成 HTML该人何时访问您的页面?
  • @KriswithaK 请问为什么?为什么不只是动态显示呢?
  • @KriswithaK 你能发布更新的代码、调试和错误输出吗?只需像我一样添加编辑,这样我们就不会丢失原始问题。
  • @KriswithaK 抱歉,回复晚了。我看到你在 URL 中仍然有错误的斜杠。 IE。你有 https:\\ 而不是 https://。尝试替换这些可能会有所帮助。 ;)
  • @KriswithaK 更新了代码以说明我的意思。
猜你喜欢
  • 1970-01-01
  • 2021-12-05
  • 2017-06-16
  • 2016-01-11
  • 2018-08-24
  • 1970-01-01
  • 2017-02-22
  • 2014-12-08
  • 2020-05-09
相关资源
最近更新 更多