我刚刚对数组运行了一些简单的调试,并注意到当我执行数组的var_dump()时,输出会标记数组中由另一个变量引用的任何元素.作为一个简单的实验,我运行了以下代码:
$array = range(1,4);
var_dump($array);
echo '<br />';
foreach($array as &$value) {
}
var_dump($array);
echo '<br />';
$value2 = &$array[1];
var_dump($array);
echo '<br />';
Run Code Online (Sandbox Code Playgroud)
它给出了以下输出:
array(4) { [0]=> int(1) [1]=> int(2) [2]=> int(3) [3]=> int(4) }
array(4) { [0]=> int(1) [1]=> int(2) [2]=> int(3) [3]=> ?(4) }
array(4) { [0]=> int(1) [1]=> ?(2) [2]=> int(3) [3]=> ?(4) }
Run Code Online (Sandbox Code Playgroud)
注意?元素3旁边的符号和随后的元素1.还请注意,这些条目不显示条目的数据类型.
经过一些实验,如果我使用var_dump标量类型,或者使用对象或资源,我都不会看到这个.如果数组包含字符串数据,则符号为&(并且它仍然显示数据类型),同样具有float,boolean和object条目.
这是针对PHP 5.2.8运行的
第一个问题:这种行为是什么时候开始的,或者是我之前没有注意到的事情?
第二个问题:如果引用元素可以通过var_dump()以这种方式标记,那么核心PHP中是否有任何函数可以识别数组元素是否被另一个变量引用; 或者将从_zval_struct返回refcount或ref标志?
我目前正在运行 WAMP 服务器,并且在过去的 30 分钟内一直在尝试弄清楚我的项目如何以及为什么不会输出任何指定的 PHP 数据。
起初,我以为这是因为我有一个.htaccess文件禁用了output_buffering,所以我删除了它。仍然没有骰子。然后,我检查了我的httpd.conf,四处寻找诸如display_errors,output_buffering等关键字,所有内容似乎都检查得很好。
error_reporting( E_ALL )然后,我尝试通过放入脚本来打开所有错误报告。再说一遍,没有骰子。
当然,在我进行了大部分更改之后,我重新启动了 WAMP 服务器,但仍然没有真正在屏幕上显示任何内容。请注意,虽然我的 print 和 var_dump 语句似乎不起作用,但我的错误肯定会毫无问题地显示出来。
我的 PHP 版本是 PHP 5.3.10。
因此,我在这里有点不知所措;我应该怎么办?
编辑
还有一些值得注意的事情:phpinfo()工作正常,并且 WAMPServer GUI 就在那里。我可以从那里查看我的配置设置、项目、PHPInfo 等。
另外,当我尝试从 Firefox 中检查该元素时,我什么也没得到。与查看源代码相同。
编辑2
有消息告诉我,可能是 Aptana Studio 导致了问题:例如,当我运行 PHP 文件时,它会将我带到127.0.0.1:8020,我的 localhost 实际上是localhost:8080。当然,在8020版本上,我得到的只是所编写代码的输出。
有没有人有过类似的经历?
文档、代码等
测试.php
<?php
include_once( 'includes/database.php' );
use includes\Database;
$database = new Database( 'evolve_admin' );
$res = $database->fetchRow(
'evol_users',
array( 'user.id', 'user.email', 'user.firstname' …Run Code Online (Sandbox Code Playgroud) <?php
$x = array("<b>","<i>","b","i","<h1>hello</h1>");
print_r ($x);
echo "<hr>";
var_dump ($x);
Run Code Online (Sandbox Code Playgroud)
在html源代码中输出这个!
Array
(
[0] => <b>
[1] => <i>
[2] => b
[3] => i
[4] => <h1>hello</h1>
)
<hr>array(5) {
[0]=>
string(3) "<b>"
[1]=>
string(3) "<i>"
[2]=>
string(1) "b"
[3]=>
string(1) "i"
[4]=>
string(14) "<h1>hello</h1>"
}
Run Code Online (Sandbox Code Playgroud)
显然,我本可以通过XSS进行操作!
如何确保数组值是htmlencoded?
我在调试时经常使用以下代码段:
echo "<pre>" . var_dump($var) . "</pre>";
Run Code Online (Sandbox Code Playgroud)
我发现我通常会得到一个很好的可读输出.但有时我却不这样做.这个例子我现在特别烦恼:
<?php
$username='xxxxxx';
$password='xxxxxx';
$data_url='http://docs.tms.tribune.com/tech/tmsdatadirect/schedulesdirect/tvDataDelivery.wsdl';
$start=gmdate("Y-m-d\TH:i:s\Z",time());
$stop =gmdate("Y-m-d\TH:i:s\Z",time()+3600*24);
$client = new SoapClient($data_url, array('exceptions' => 0,
'user_agent' => "php/".$_SERVER[SCRIPT_NAME],
'login' => strtolower($username),
'password' => $password));
$data = $client->download($start,$stop);
print_r($data);
?>
Run Code Online (Sandbox Code Playgroud)
我当然不想透露我的凭据,但是我被告知在这种情况下print_r将与我通常的代码片段相同,实际上print_r和我的代码片段都不会产生除了没有格式化的runon数据之外的任何内容.我该怎么做才漂亮?!
就在最近,PHP中的var_dump()(目前使用的是5.6.23)在实际转储变量之前就开始打印出文件名和行号.我不知道服务器上有任何重大变化,所以我想知道为什么会这样,也就是在网上或PHP文档中找不到任何东西(var_dump())
使用命令行时也会发生奇怪的行为:
> php -r 'var_dump("lol");'
Command line code:1:
string(3) "lol"
Run Code Online (Sandbox Code Playgroud)
虽然我习惯于"字符串(3)"lol""被打印.
这不是一个showstopper,但打破了我的几个单元测试,我需要比较一些使用var_dump()打印的API的输出.我首先想到它可能与xdebug有关,但找不到任何似乎与此问题相关的指令.
任何提示导致这一点的提示都表示赞赏.
我需要在我的代码中打印多个数组的内容.例如
function performOp($n, $inputArr, $workArr)
{
printf("Entered function, value of n is %d", $n);
print_r($inputArr);
print_r($workArr);
$width =0;
}
现在,有没有什么方法可以编写单个语句并打印两个数组,而不是写两次print_r?另外,如果我想在显示数组{}之前打印"输入数组值是",有没有办法使用printf或任何其他功能?
我试着写作
printf("Value of inputArray is %s ", print_r($inputArr),但这不起作用.
任何帮助都非常感谢.
谢谢
我不知道为什么,但xdebug没有突出显示var_dump().但配置似乎没问题.不知道为什么......有什么建议吗?
这是我的phpinfo(); http://pastebin.com/A45dqnWN
加上甚至xdebug_var_dump()都不会突出显示任何内容.它可以工作,但看起来像普通的var_dump().
我已经挣扎了好几个小时,但我无法让它发挥作用.当我重定向到另一个PHP页面时,我的所有会话变量都为null.我在xampp服务器上.
session.php文件
<?php
session_start();
if(isset($_POST['submitted']))
{
$_SESSION['first_name'] = "MAX";
var_dump($_SESSION);
header("Location: http://localhost:8080/secure login/session2.php");
die();
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859- 1" />
<title>You Logged In</title>
</head>
<body>
<form action="session.php" method="post">
<div align="center"><input type="submit" name="submit" value="Login" /></div>
<input type="hidden" name="submitted" value="TRUE" />
</form>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
session2.php
<?php
session_start();
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<title>You …Run Code Online (Sandbox Code Playgroud) 如何将样式设置为var_dump()函数和PHP错误样式,如下图所示?
目前我有下一个视图var_dump()(有<pre>var_dump(...)</pre>,没有它将全部在一行)和只是纯文本的错误.
我搜索了一些PHP色彩错误,var_dump样式,但找不到任何东西.
我使用OpenServer作为localhost,在以前的版本中,我有相同的错误样式,但现在只是纯文本.自定义是真的吗?
我想我在这里遗漏了一些非常明显的东西,但有人可以向我解释为什么我得到输出而不是我期望在以下var转储上的输出:
这是原始的xml:
<result>
<category>
<id>3</id>
<name>Category 1</name>
<subcategory>
<id>9</id>
<name>SubCat 1</name>
</subcategory>
<subcategory>
<id>10</id>
<name>SubCat 2</name>
</subcategory>
<subcategory>
<id>11</id>
<name>SubCat 3</name>
</subcategory>
</category>
</result>
Run Code Online (Sandbox Code Playgroud)
我在做什么:
$xml = new SimpleXMLElement($file);
foreach($xml->category as $node)
{
echo "dump 1:
";
var_dump($node);
echo "**********************************************
dump 2:
";
var_dump($node->subcategory);
die();
}
Run Code Online (Sandbox Code Playgroud)
这输出:
dump 1:
object(SimpleXMLElement)#130 (3) {
["id"]=>
string(1) "3"
["name"]=>
string(10) "Category 1"
["subcategory"]=>
array(3) {
[0]=>
object(SimpleXMLElement)#133 (2) {
["id"]=>
string(1) "9"
["name"]=>
string(8) "SubCat 1"
}
[1]=>
object(SimpleXMLElement)#135 (2) {
["id"]=>
string(2) …Run Code Online (Sandbox Code Playgroud)