我在AppEngine上使用Quercus / PHP。当我用file_get_contents($url);
运行一个简单的脚本时,我收到一个错误:
java.lang.NoClassDefFoundError:java.net.Socket是一个受限制的类。 有关详细信息,请参阅Google App Engine开发人员指南。
我用谷歌搜索了,虽然我发现其他人遇到了同样的错误,但原因似乎有所不同。你觉得这个错误对我有什么影响?
我正在使用最新的AppEngine Java SDK和最新的Quercus。
答案 0 :(得分:2)
使用Google AppEngine / Java时,您无法真正访问完整的JVM:您的应用程序在受限制的沙箱中运行。请参阅此处的文档:
https://developers.google.com/appengine/docs/java/runtime?hl=en#The_Sandbox
根据此文档,您无法在此沙箱中打开套接字。这就是为什么它写的" java.net.Socket是一个受限制的类"。
答案 1 :(得分:2)
olivierlemasle是对的,但这是我经过一些搜索后发现的解决方案;在评论部分user "Phil" recommend:
import java.net.URL;
define('URLFetchServiceFactory', new Java('com.google.appengine.api.urlfetch.URLFetchServiceFactory'));
$data = URLFetchServiceFactory->getURLFetchService()->fetch(new URL($url))->getContent();
经过测试,确实有效!
答案 2 :(得分:1)
对java.net.Socket的App Engine支持已开始在1.7.2上推出,现在正在接受可信的测试人员提交。
会有一些限制但它应该支持大多数用途。
它很受欢迎,因此只会启用一小部分。
答案 3 :(得分:0)
根据api的主页(http://quercus.caucho.com/),它可以使用休眠。快速谷歌搜索给了我这个:GWT and Hibernate - NoClassDefFoundError when using Hibernate
它说hibernate不适用于谷歌应用引擎。也许这就是答案。