3

我在 AppEngine 上使用 Quercus/PHP。当我运行一个简单的脚本时,file_get_contents($url);我得到一个错误:

java.lang.NoClassDefFoundError: java.net.Socket 是一个受限类。有关详细信息,请参阅 Google App Engine 开发人员指南。

我用谷歌搜索过,虽然我发现其他人也遇到了同样的错误,但原因似乎有所不同。你认为是什么让我犯了这个错误?

我正在使用最新的 AppEngine Java SDK 和最新的 Quercus。

4

4 回答 4

2

使用 Google AppEngine/Java 时,您实际上无法访问完整的 JVM:您的应用程序在受限沙箱中运行。请参阅此处的文档:

https://developers.google.com/appengine/docs/java/runtime?hl=en#The_Sandbox

根据此文档,您无法在此沙箱中打开套接字。这就是为什么写“java.net.Socket 是一个受限类”的原因。

于 2011-12-17T17:52:02.390 回答
2

olivierlemasle 是对的,但这是我经过更多搜索后找到的解决方案;在评论部分,用户“Phil”推荐

import java.net.URL;
define('URLFetchServiceFactory', new Java('com.google.appengine.api.urlfetch.URLFetchServiceFactory'));
$data = URLFetchServiceFactory->getURLFetchService()->fetch(new URL($url))->getContent();

经测试,有效!

于 2011-12-17T22:49:14.007 回答
1

App Engine 对 java.net.Socket 的支持从 1.7.2 开始推出,现在正在接受受信任的测试人员提交。

会有一些限制,但它应该支持大多数用途。

注册在这里: https ://docs.google.com/a/google.com/spreadsheet/viewform?formkey=dF9QR3pnQ2pNa0dqalViSTZoenVkcHc6MQ#gid=0

它很受欢迎,因此只会启用一小部分。

于 2012-10-04T03:35:57.977 回答
0

根据您的 api ( http://quercus.caucho.com/ ) 的主页,它可以使用休眠。快速谷歌搜索给了我这个:GWT and Hibernate - NoClassDefFoundError when using Hibernate

它说休眠不能与谷歌应用引擎一起使用。也许这就是答案。

于 2011-12-17T14:24:32.387 回答