【问题标题】:Symfony: InvalidArgumentException while parsing web.xmlSymfony:解析 web.xml 时出现 InvalidArgumentException
【发布时间】:2015-03-03 16:04:04
【问题描述】:

最近我将一个 Symfony 系统移到另一个服务器上,从那以后就出现了错误。 技术细节如下: windows server 2012 上的 apache 2.4 服务器 apache可以通过本地网络访问的文件服务器

当我移动 Symfony 页面时,我删除了缓存。 现在发生的事情是,我收到这些错误消息:

InvalidArgumentException: Unable to parse file "\\FILESERVER\PAGEPATH\vendor\symfony\symfony\src\Symfony\Bundle\FrameworkBundle\DependencyInjection/../Resources/config\web.xml".

InvalidArgumentException: [WARNING 1549] failed to load external entity "file://///FILESERVER/PAGEPATH/vendor/symfony/symfony/src/Symfony/Component/DependencyInjection/Loader/schema/dic/services/services-1.0.xsd" (in n/a - line 0, column 0)
[WARNING 3084] Element '{http://www.w3.org/2001/XMLSchema}import': Failed to locate a schema at location 'file://///FILESERVER/PAGEPATH/vendor/symfony/symfony/src/Symfony/Component/DependencyInjection/Loader/schema/dic/services/services-1.0.xsd'. Skipping the import. (in in_memory_buffer - line 8, column 0)
[ERROR 1845] Element '{http://symfony.com/schema/dic/services}container': No matching global declaration available for the validation root. (in //FILESERVER/PAGEPATH/web/ - line 5, column 0)

似乎是什么问题,在第一个错误中,路径中混合了斜杠和反斜杠,但我不知道如何解决这个问题。

【问题讨论】:

  • 看起来很愚蠢但是....你能试试this解决方案吗?
  • 重新启动计算机?是的,我试过了。
  • 我已经更新了我的答案。希望对您有所帮助。

标签: php symfony symfony-2.4 invalidargumentexception


【解决方案1】:

这个问题是由于使用了 UNC 路径 (\\something)。我在另一台服务器上的 IIS 和 Symfony 的 Windows 网络环境中遇到了同样的问题。不幸的是,我无法找到解决方案。我最终在同一台机器上拥有源代码并使用本地路径。

编辑:我发现了另一种可能的解决方案 - 符号链接。

mklink /d C:\myroot \\FILESERVER\PAGEPATH

现在您可以在 C:\myroot 下看到共享文件夹的内容。我不知道 Apache 是否会满意,但 IIS 没有问题。还有一件事,要为网络传输引起的一些性能问题做好准备。

【讨论】:

  • Apache 不喜欢这样。
  • Apache 配置中的 FollowSymlinks 选项怎么样?你配置了吗?
【解决方案2】:

我不确定这是否与您的问题有关,但我曾经在解析 XML 文件时遇到无法在解析时加载架构定义文件的问题。解析器尝试通过网络加载 XML 模式文件,如果网络连接失败,解析 XML 文件也会失败。

如果您在生产中,出于性能原因,您可能根本不需要模式验证,因此请检查使用的解析器是否提供关闭自动模式验证的方法。但是,如果在您的开发工作流程中发生错误,请确保架构 URL 可以从解析 XML 文件的 Web 服务器实际解析。

【讨论】:

    【解决方案3】:

    如果 UNC 路径有问题,如果您将网络共享映射到本地驱动器并使用本地驱动器上的路径访问应用程序,它可能会起作用。

    \\FILESERVER\PAGEPATH 映射到本地驱动器,假设W:W 来自web)然后将Apache 的Web 根配置为W:\web 而不是\\FILESERVER\PAGEPATH\web。我猜所有其他路径引用都是相对的,不需要更改任何其他内容。

    (只是一个想法)

    更新:

    作为普通用户,您可以将网络共享映射为本地驱动器,并使用以下命令行在每次登录时自动重新连接:

    C:\> net use W: \\FILESERVER\PAGEPATH /persistent:yes
    

    Apache 不以普通用户身份运行(我手头没有 Windows 系统,但我认为它以SYSTEM USER 身份运行)。当 Windows 启动时,我无法判断特殊用户是否“登录”。

    但是,我认为每次 Windows 启动时都可以使用任务计划程序(在 Windows 7 或更高版本上)运行上述命令(存储在 .cmd 文件中)。

    【讨论】:

    • 如果有可能在 Windows 启动时挂载这个驱动器而不需要用户登录它可以工作。
    • 我手头没有 Windows 系统(3 年前就不能在 Windows 上工作了),但据我所知,net 命令行可用于挂载共享文件夹.查看这篇文章:microsoft.com/resources/documentation/windows/xp/all/proddocs/… 开关。
    • 嗯...连接在登录时恢复。 Apache 不以普通用户身份运行,我猜它不会登录。 :-(
    • Apache 不会处理这个问题,即使运行运行 Apache 的服务的用户拥有映射的驱动器。
    猜你喜欢
    • 2022-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-23
    • 2018-04-25
    • 2015-04-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多