Symfony:解析web.xml时出现InvalidArgumentException

时间:2015-03-03 16:04:05

标签: php symfony symfony-2.4 invalidargumentexception

最近我将一个Symfony系统移动到另一个服务器并且从那时起就出现了错误。 技术细节是: Windows服务器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)

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

3 个答案:

答案 0 :(得分:2)

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

编辑:我找到了另一个可能的解决方案 - 符号链接。

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

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

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

\\FILESERVER\PAGEPATH映射到本地驱动器,让我们说W:(来自W的{​​{1}})然后将Apache的网络根目录配置为web而不是{{1} }}。我猜所有其他路径引用都是相对的,没有其他东西需要改变。

(只是一个想法)

<强>更新

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

W:\web

Apache不以常规用户身份运行(我手边没有Windows系统,但我认为它以\\FILESERVER\PAGEPATH\web运行)。我不知道Windows启动时特殊用户是否“登录”。

但是,我认为每次Windows启动时都可以使用任务计划程序(在Windows 7或更高版本上)运行上面的命令(存储在C:\> net use W: \\FILESERVER\PAGEPATH /persistent:yes 文件中)。