我一直在寻找如何在Chrome或Firefox中调试PHP代码,但我可以找到解决方案。这是我的PHP:
<?php
if(isset($_POST["data"]))
{
$var = $_POST["data"];
print "your message: " . $_POST["data"];
if(!empty($_POST['ip.data'])){
$data = $_POST['ip.data'];
$fname = mktime() . ".txt";//generates random name
$file = fopen("upload/" .$fname, 'w');//creates new file
fwrite($file, $data);
fclose($file);
}
}
?>
我希望能够看到print "your message: " . $_POST["data"];
的输出或Chrome或Firefox中的任何错误。我试过Firefox Quantum应该可以调试php吗?无论如何,我如何控制日志?
答案 0 :(得分:4)
第一步是认识到PHP(通常是服务器)语言是一个完全不同的上下文,而不是浏览器的控制台,它基本上是Javascript。因此,要从服务器向浏览器控制台显示消息,您需要找到一些方法将这些消息(例如,错误)传达给浏览器。
此时,您可能会考虑使用PHP嵌入脚本标记这么简单:
function debugToBrowserConsole ( $msg ) {
$msg = str_replace('"', "''", $msg); # weak attempt to make sure there's not JS breakage
echo "<script>console.debug( \"PHP DEBUG: $msg\" );</script>";
}
function errorToBrowserConsole ( $msg ) {
$msg = str_replace('"', "''", $msg); # weak attempt to make sure there's not JS breakage
echo "<script>console.error( \"PHP ERROR: $msg\" );</script>";
}
function warnToBrowserConsole ( $msg ) {
$msg = str_replace('"', "''", $msg); # weak attempt to make sure there's not JS breakage
echo "<script>console.warn( \"PHP WARNING: $msg\" );</script>";
}
function logToBrowserConsole ( $msg ) {
$msg = str_replace('"', "''", $msg); # weak attempt to make sure there's not JS breakage
echo "<script>console.log( \"PHP LOG: $msg\" );</script>";
}
# Convenience functions
function d2c ( $msg ) { debugToBrowserConsole( $msg ); }
function e2c ( $msg ) { errorToBrowserConsole( $msg ); }
function w2c ( $msg ) { warnToBrowserConsole( $msg ); }
function l2c ( $msg ) { logToBrowserConsole( $msg ); }
if ( 'POST' === $_SERVER['REQUEST_METHOD'] ) {
if ( isset( $_POST['data'] ) ) {
d2c( "Your message: {$_POST['data']}"
e2c( "This is an error from PHP" );
w2c( "This is a warning from PHP" );
l2c( "This is a log message from PHP" );
...
}
}
但这将是一种从根本上薄弱而脆弱的方法。我建议直接在服务器上拖尾日志文件。如果您使用某种颜色,请考虑使用clog
,lwatch
或grc
:
$ grc tail -f /var/log/syslog
答案 1 :(得分:1)
echo&#34; console.log(&#39;调试对象:&#34;。$ output。&#34;&#39;);&#34;;
答案 2 :(得分:1)
我最近遇到了同样的问题,只是没有安装一些大型外部软件包就找不到足够简单的方法。
我首先尝试了明显的方法:
<?php echo "<script>console.log(".$myVar.")<script>" ?>
,但仅适用于标量类型。例如:
<?php
$arr = [ 'x' => 42 ];
echo "<script>console.log(".$arr.")</script>";
?>
将输出到html
<script>console.log(Array)</script>
对此的一种解决方案是在php端的变量上使用json_encode
,然后在javascript中使用JSON.parse
,最后使用console.log
。
但是,这种方法无法捕获对象的非公共属性:
<?php
class Test {
private $x = 42;
public $y = 13;
}
$obj = json_encode(new Test());
echo "<script>console.log(JSON.parse('".$obj."'))</script>";
?>
将输出到浏览器控制台:
{y: 13}
因为json_encode
无法访问私有/受保护的字段。
这里的解决方案是向您的类中添加一个__toString
方法,在其中您可以将这些字段正确地公开为字符串,或者使用某些技巧,例如调用var_export
然后处理输出字符串以使其成为{{ 1}}。
我最终使用后一种方法编写了一个小助手,并在javascript端编写了输出前缀
如果有人想使用链接here,请留下它。
答案 3 :(得分:0)
我希望能提供帮助:
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
答案 4 :(得分:0)
如果您想查看Ubuntu计算机上的错误并运行Apache服务器,可以使用以下命令持续监视并输出对apache文件夹中error.log
文件的更改:
tail -f /var/log/apache2/error.log
如果您在apache上运行服务器,那么这将输出发生的任何错误。
tail
命令只输出文件的最后10行,并在将新数据传送到文件时进行更新。
答案 5 :(得分:0)
试试这个
<?php
function temp()
{
if(isset($_POST["data"]))
{
$var = $_POST["data"];
print "your message: " . $_POST["data"];
if(!empty($_POST['ip.data'])){
$data = $_POST['ip.data'];
$fname = mktime() . ".txt";//generates random name
$file = fopen("upload/" .$fname, 'w');//creates new file
fwrite($file, $data);
fclose($file);
}
}
}//function
?>
<script>
console.log(".<?php temp(); ?>.");
</script>
答案 6 :(得分:0)
在Chrome上,您可以使用效果很好的phpconsole。 如果有人知道Firefox Quantum类似的东西请发表评论。