在PHP中,可以将可选参数传递给各种XML解析器,其中之一是LIBXML_NOENT。该文档对此有以下说法:
LIBXML_NOENT(整数)
替代实体
Substitute entities信息不是很丰富(什么实体?何时替换?)。但是我认为可以假设或的NOENT缩写是公平的,因此在我看来,可以合理地假设此标志会禁用(外部)实体的解析。NO_ENTITIESNO_EXTERNAL_ENTITIES
但是事实并非如此:
$xml = '<!DOCTYPE root [<!ENTITY c PUBLIC "bar" "/etc/passwd">]>
<test>&c;</test>';
$dom = new DOMDocument();
$dom->loadXML($xml, LIBXML_NOENT);
echo $dom->textContent;
Run Code Online (Sandbox Code Playgroud)
结果是回显了/ etc / passwd的内容。没有LIBXML_NOENT论点,事实并非如此。
对于非外部实体,该标志似乎没有任何作用。例:
$xml = '<!DOCTYPE root [<!ENTITY c "TEST">]>
<test>&c;</test>';
$dom = new DOMDocument();
$dom->loadXML($xml);
echo $dom->textContent;
Run Code Online (Sandbox Code Playgroud)
该代码的结果为“ TEST”,带有和不带有LIBXML_NOENT。
该标志似乎对诸如的预定义实体没有任何影响<。
所以我的问题是:
LIBXML_NOENT旗帜到底是做什么的?LIBXML_NOENT?它的缺点是什么?不适合LIBXML_ENT或LIBXML_PARSE_EXTERNAL_ENTITIES更适合?我有一个 PHP 函数,当我发现异常时会调用它。它接受该异常作为可选参数,因此可以出于调试目的显示它:
public static function notFound($resource, \Exception $exception = null) {
// [... normal error handling ...]
if (DEBUG && $exception != null) {
echo '<br><br><h2>Stacktrace:</h2>';
print_r($exception);
}
die();
}
Run Code Online (Sandbox Code Playgroud)
我想要的是以与 xdebug 显示未捕获的异常和警告相同的方式显示此异常(使用 CSS 和 HTML 样式,可能使用不同的配色方案)。像这样(由echo $exception->getTrace();):

如果我使用print_r($exception);我得到这个,它似乎至少包含一些 xdebug 所需的输出:

我试过echo $exception->xdebug_message;, var_dump($exception);, 和var_dump($exception->xdebug_message);,但都没有奏效。最后一个似乎是我想要的,但我无法让它正常工作:

有没有办法对捕获的异常使用 xdebug 样式?
我始终确信PHP可以在任何文件中执行file_get_contents并readfile执行任何PHP代码 - 无论文件类型如何 - 都是给它的.我在多个设置上试过这个,它总能奏效.
我在这里收到了一个关于此的问题,用户似乎认为情况并非如此.
我查看了PHP文档中的函数,并没有提到代码执行(如果通常情况下这是我期望的,因为它具有严重的安全隐患).
我也搜索过它,发现很多声称函数不执行PHP代码.例如:
readfile不会执行服务器上的代码,因此没有问题.资源
搜索"php file_get_contents代码执行"也会返回尝试执行检索到的PHP代码的各种问题,如果它确实通常会执行任何给定的PHP代码,这似乎很奇怪.
我还发现了一个询问不执行PHP代码的问题,因此执行似乎也会发生在其他人身上.
所以我的问题是:
file_get_contents并readfile执行PHP代码?错别字发生了,有时候用JavaScript跟踪它们真的很难.以此为例(想象一下在更多代码之间):
// no error. I would like a warning
document.getElementById('out').innerHtml = "foo";
Run Code Online (Sandbox Code Playgroud)
对于未声明的变量,严格模式有助于:
"use strict";
var myHTML = "foo";
myHtml = "bar"; // -> error
Run Code Online (Sandbox Code Playgroud)
但它不适用于上面的例子.是否有可以捕获这些错误的程序或模式?我尝试过JSLint和JavaScript Lint,但他们没有抓住它.
理想情况下,我希望这仍然可以工作(没有警告):
// should work (without warning)
function MyClass(arg) {
this.myField = arg;
}
Run Code Online (Sandbox Code Playgroud) 我的目标
我想写一个通用的计时功能(我删除了这个问题的实际时间码,因为它并不重要).
我有一个输入和输出未知的函数.我想在循环中运行这个函数几次并将循环变量传递给它.
为此,我定义了一个接口,可以将循环变量转换为函数所需的类型.
我的守则
interface Function<R,T> {
R run(T input);
}
interface InputGenerater<T> {
T fromLoop(int i);
}
public static void time(Function func, InputGenerater in) {
for (int i = 0; i < 10; i++) {
func.run(in.fromLoop(i));
}
}
public static void main(String[] args) {
// example: my function expects a string, so we transform the loop variable to a string:
InputGenerater<String> intToString = (int i) -> String.valueOf(i) + "test";
Function<String, String> funcToTest = (String s) -> s + …Run Code Online (Sandbox Code Playgroud) 我是 Heroku 和 Node 的新手,所以请耐心等待。我将我的工作聊天应用程序(在本地主机上)部署到 Heroku,但无法打开 Heroku 应用程序。
谁能帮我解决这个问题?
我在 stackoverflow 上查看了一些类似的问题并且做了heroku config:add REDISCLOUD_URL='redis_cloud_url',heroku config:add NODE_ENV='production'但那些没有用。
这是我的 Heroku 日志。
2015-04-11T19:42:35.568690+00:00 heroku[api]: Deploy 0244dd7 by MYMAIL@gmail.com
2015-04-11T19:42:38.004491+00:00 heroku[web.1]: Starting process with command `node app.js`
2015-04-11T19:42:39.182617+00:00 app[web.1]: Detected 512 MB available memory, 512 MB limit per process (WEB_MEMORY)
2015-04-11T19:42:39.182639+00:00 app[web.1]: Recommending WEB_CONCURRENCY=1
2015-04-11T19:42:39.793252+00:00 app[web.1]: events.js:85
2015-04-11T19:42:39.793258+00:00 app[web.1]: throw er; // Unhandled 'error' event
2015-04-11T19:42:39.793260+00:00 app[web.1]: ^
2015-04-11T19:42:39.793262+00:00 app[web.1]: Error: Redis connection to 127.0.0.1:6379 failed - connect ECONNREFUSED
2015-04-11T19:42:39.793264+00:00 …Run Code Online (Sandbox Code Playgroud)