Symfony:解析web.xml时出现无效参数异常。

7

最近,我将一个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)

看起来问题在于第一个错误中路径中混合了正斜杠和反斜杠,但我不知道如何解决这个问题。


看起来很蠢,但是......你可以尝试这个解决方案吗?这里 - Matteo
重启电脑?是的,我已经尝试过了。 - Friedrich
我已经更新了我的答案。希望有所帮助。 - kba
3个回答

2
这个问题是由于使用UNC路径(\\something)引起的。我在Windows网络环境中使用IIS和Symfony时遇到了同样的问题,但很遗憾我没有找到解决方案。最终我将源代码放在同一台机器上,并使用本地路径。 编辑:我发现另一个可能的解决方案 - 符号链接。
mklink /d C:\myroot \\FILESERVER\PAGEPATH

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

Apache 不喜欢这个。 - Friedrich
1
你的 Apache 配置中 FollowSymlinks 选项怎么样了?你配置好了吗? - kba

1

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

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


0

如果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 7或更新版本中)每次Windows启动时运行上述命令(存储在.cmd文件中)。


如果有可能在Windows启动时挂载此驱动器而无需用户登录,则可以运行。 - kba
我手头上没有Windows系统(自三年前以来就不再使用Windows),但据我所记得,net命令行可以用于挂载共享文件夹。请参考此文章:http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/net_use.mspx?mfr=true 获取开关信息。 - axiac
哎呀...连接在登录时恢复了。Apache不作为普通用户运行,我猜它不会登录。 :-( - axiac
Apache无法处理此问题,即使运行Apache的服务的用户已经映射了驱动器。 - Friedrich

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接