小编tim*_*tim的帖子

LIBXML_NOENT是做什么的(为什么不叫LIBXML_ENT)?

在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

该标志似乎对诸如的预定义实体没有任何影响&lt;

所以我的问题是:

  • LIBXML_NOENT旗帜到底是做什么的?
  • 为什么叫它LIBXML_NOENT?它的缺点是什么?不适合LIBXML_ENTLIBXML_PARSE_EXTERNAL_ENTITIES更适合?
  • 是否有一个标志实际上阻止了所有实体的解析?

php xml libxml2 xml-parsing

7
推荐指数
1
解决办法
2991
查看次数

PHP:打印捕获异常,如 Xdebug

我有一个 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 exception xdebug

6
推荐指数
2
解决办法
1479
查看次数

file_get_contents和readfile是否执行PHP代码?

我始终确信PHP可以在任何文件中执行file_get_contentsreadfile执行任何PHP代码 - 无论文件类型如何 - 都是给它的.我在多个设置上试过这个,它总能奏效.

在这里收到了一个关于此的问题,用户似乎认为情况并非如此.

我查看了PHP文档中的函数,并没有提到代码执行(如果通常情况下这是我期望的,因为它具有严重的安全隐患).

我也搜索过它,发现很多声称函数不执行PHP代码.例如:

readfile不会执行服务器上的代码,因此没有问题.资源

搜索"php file_get_contents代码执行"也会返回尝试执行检索到的PHP代码的各种问题,如果它确实通常会执行任何给定的PHP代码,这似乎很奇怪.

我还发现了一个询问不执行PHP代码的问题,因此执行似乎也会发生在其他人身上.

所以我的问题是:

  • 在检索到的文件中执行函数file_get_contentsreadfile执行PHP代码?
  • 这取决于一些php.ini设置?如果是,那么设置是什么?
  • 它取决于PHP版本,如果是这样,会影响哪些版本?
  • 如果通常情况不是这样,那么他们在我的设置中执行PHP代码的原因是什么?

php security

6
推荐指数
2
解决办法
1778
查看次数

JavaScript:防止无意中创建新属性

错别字发生了,有时候用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)

javascript error-detection

5
推荐指数
1
解决办法
169
查看次数

Lambda:声明通用类型内联

我的目标

我想写一个通用的计时功能(我删除了这个问题的实际时间码,因为它并不重要).

我有一个输入和输出未知的函数.我想在循环中运行这个函数几次并将循环变量传递给它.

为此,我定义了一个接口,可以将循环变量转换为函数所需的类型.

我的守则

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)

java generics lambda java-8

2
推荐指数
1
解决办法
995
查看次数

Heroku 上的节点和 Redis 应用程序错误

我是 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)

heroku redis node.js

2
推荐指数
1
解决办法
3251
查看次数