用Usernap实现客户端错误报告
钥匙要点
- >用户NAP是一种工具,允许用户通过标记屏幕截图并在JavaScript控制台中发送所有数据来直接从网站报告错误。它可以集成到客户的网站中以加快错误报告和解决。 开发人员还可以使用Usernap来收集服务器端错误和日志。通过使用简单的类,他们可以记录调试所需的所有错误和日志,然后可以将其传递给UsersNap。这允许更快,更有效的错误修复。
- 用户还提供了其他信息,例如屏幕尺寸,浏览器版本,OS和已安装的浏览器插件。仅在需要时只能打开此功能,并且可以通过IP过滤或打开DEV等方法限制其可用性。
- 想象以下情况:您的客户访问网站(让我们想象一下),除了预期的结果之外,其他任何东西。正常的反应是打电话给您(最不合适的时间),并要求您尽快解决,因为他们正在亏钱。
>
错误

如果您立即访问测试网站,您会注意到存在问题。
的问题是 - 客户如何使用与错误对抗的所有数据更快地报告:
<span>$json_data = '{"value":1,"apples":2,"name":3,"oranges":4,"last one":5}'; </span> <span>//we will simulate the json data, but imagine that this is the normal data exchanged daily between your client’s website and a 3rd party API </span> <span>$ch = curl_init('http://talkweb.eu/labs/fr/json_callback.php'); </span><span>curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); </span><span>curl_setopt($ch, CURLOPT_POSTFIELDS, $json_data); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'Content-Type: application/json', </span> <span>'Content-Length: ' . strlen($json_data))); </span> <span>//the normal CURL request, nothing strange here: </span><span>$result = curl_exec($ch); </span> <span>//receiving the data back </span><span>$f_data = json_decode($result,true); </span> <span>//showing a greeting with the output </span><span>echo “Welcome”. $f_data['username'];</span>
>服务器端JavaScript和XMLHTTPSREQUEST错误,
一些核心PHP错误
- …和元数据。
- >用于收集此信息的有趣解决方案是用户。一个可以让您的用户标记他们所在网站的屏幕截图,并向您发送JavaScript控制台中的所有内容。 php错误并没有结束,但是吗?让我们做。首先,我们将收集服务器端错误。
- > 收集错误
- >让我们在示例中添加更多代码,以了解如何收集所需的数据。介绍一个非常简单的课程来帮助我们:
现在,让我们使用此类记录所有可能需要的错误和日志。
将其传递给UsersNap
>让我们在页面末尾添加Usernap代码段,看看会发生什么。 (您可能需要一个帐户才能使用此窗口小部件。AuserNap为开源项目提供免费许可证,并为商业项目提供免费测试期。
<span><span><? </span></span><span><span>class SendToUsersnap </span></span><span><span>{ </span></span><span> <span>var $m; </span></span><span> <span>//Save all logs in an array. You can use an even more elegant approach but right now I need it to be simple for the sake of this tutorial. </span></span><span> <span>function log ( $data, $type ) { </span></span><span> </span><span> <span>if( is_array( $data ) || is_object( $data ) ) { </span></span><span> <span>$this->m[]= "console.".$type."('PHP: ".json_encode($data)."');"; </span></span><span> <span>} else { </span></span><span> <span>$this->m[] = "console.".$type."('PHP: ".$data."');"; </span></span><span> <span>} </span></span><span> <span>} </span></span><span> <span>// Print all logs that have been set from the previous function. Let’s keep it simple. </span></span><span> <span>function out (){ </span></span><span> <span>for ($i=0;$i<count($this->m);$i++) </span></span><span> <span>{ </span></span><span> <span>echo $this->m[$i]."\n"; </span></span><span> <span>} </span></span><span> </span><span> </span><span> <span>} </span></span><span><span>}</span></span>
注意:您将在真实框架中的视图模板中执行此操作,但是由于我们在这里不使用真实的MVC应用程序,因此我们跳过了那部分。
>用户将在页面上看到一个“报告错误”按钮,并将给您写一条诸如“它不起作用,尽快修复”之类的消息。通常,这将是无用的信息,但是这次,我们也附上了此华丽的错误日志:
>
<span>$json_data = '{"value":1,"apples":2,"name":3,"oranges":4,"last one":5}'; </span> <span>//we will simulate the json data, but imagine that this is the normal data exchanged daily between your client’s website and a 3rd party API </span> <span>$ch = curl_init('http://talkweb.eu/labs/fr/json_callback.php'); </span><span>curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); </span><span>curl_setopt($ch, CURLOPT_POSTFIELDS, $json_data); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'Content-Type: application/json', </span> <span>'Content-Length: ' . strlen($json_data))); </span> <span>//the normal CURL request, nothing strange here: </span><span>$result = curl_exec($ch); </span> <span>//receiving the data back </span><span>$f_data = json_decode($result,true); </span> <span>//showing a greeting with the output </span><span>echo “Welcome”. $f_data['username'];</span>
<span><span><? </span></span><span><span>class SendToUsersnap </span></span><span><span>{ </span></span><span> <span>var $m; </span></span><span> <span>//Save all logs in an array. You can use an even more elegant approach but right now I need it to be simple for the sake of this tutorial. </span></span><span> <span>function log ( $data, $type ) { </span></span><span> </span><span> <span>if( is_array( $data ) || is_object( $data ) ) { </span></span><span> <span>$this->m[]= "console.".$type."('PHP: ".json_encode($data)."');"; </span></span><span> <span>} else { </span></span><span> <span>$this->m[] = "console.".$type."('PHP: ".$data."');"; </span></span><span> <span>} </span></span><span> <span>} </span></span><span> <span>// Print all logs that have been set from the previous function. Let’s keep it simple. </span></span><span> <span>function out (){ </span></span><span> <span>for ($i=0;$i<count($this->m);$i++) </span></span><span> <span>{ </span></span><span> <span>echo $this->m[$i]."\n"; </span></span><span> <span>} </span></span><span> </span><span> </span><span> <span>} </span></span><span><span>}</span></span>
<span>require_once('Usersnap.class.php'); </span> <span>$s = new SendToUsersnap; </span> <span>$json_data = '{"value":1,"apples":2,"name":3,"oranges":4,"last one":5}'; </span> <span>$s->log('Initializing the JSON request',"info"); </span> <span>$s->log($json_data,"log"); </span> <span>$ch = curl_init('http://talkweb.eu/labs/fr/json_callback.php'); </span> <span>curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); </span> <span>curl_setopt($ch, CURLOPT_POSTFIELDS, $json_data); </span> <span>curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); </span> <span>curl_setopt($ch, CURLOPT_HTTPHEADER, array( </span> <span>'Content-Type: application/json', </span> <span>'Content-Length: ' . strlen($json_data))); </span> <span>$result = curl_exec($ch); </span> <span>$f_data = json_decode($result,true); </span> <span>echo 'Welcome'. $f_data['usersname']; </span> <span>$s->log($f_data,"log"); </span> <span>$s->log(error_get_last(),"error");</span>
>
<span><span><span><script</span> type<span>="text/javascript"</span>></span><span> </span></span><span><span> <span>(function() { </span></span></span><span><span> <span>var s = document.createElement("script"); </span></span></span><span><span> s<span>.type = "text/javascript"; </span></span></span><span><span> s<span>.async = true; </span></span></span><span><span> s<span>.src = '//api.usersnap.com/load/'+ </span></span></span><span><span> <span>'your-api-key-here.js'; </span></span></span><span><span> <span>var x = document.getElementsByTagName('script')[0]; </span></span></span><span><span> x<span>.parentNode.insertBefore(s, x); </span></span></span><span><span> <span>})(); </span></span></span><span><span> </span></span><span><span> <span>var _usersnapconfig = { </span></span></span><span><span> <span>loadHandler: function() { </span></span></span><span><span> <span><span><?php </span></span></span></span><span><span><span> <span>//just print all errors collected from the buffer. </span></span></span></span><span><span><span> <span>$s->out(); ?></span> </span></span></span><span><span> <span>} </span></span></span><span><span> <span>}; </span></span></span><span><span></span><span><span></script</span>></span></span>
- >错误和日志(如上所示)
- >注释的屏幕截图 - 如果问题比这个简单的示例
- 更复杂 屏幕尺寸,浏览器版本,OS和浏览器中安装的插件
- 当然,只有在客户需要时,您才能打开此功能。要限制小部件的可用性,请添加IP过滤器或查询参数屏障,打开Dev。*子域等。
这不是脚本监控工具,不会在出现问题时自动提供信息。只有在用户或客户端报告错误的情况下,您作为开发人员或QA需要有关如何对抗错误的更多信息才能起作用。想象它是远程调试器,但对于客户端错误事件和您从PHP发送到JavaScript的数据。
我很想回答您的所有问题!在下面留下您的反馈!
经常询问的问题(常见问题解答)有关用户
的客户端错误报告>用户nap如何用于客户端错误报告?
usernap是一个可视化错误跟踪工具,允许用户直接从其Web应用程序报告错误。它通过捕获问题的屏幕截图以及重要的浏览器信息来起作用,然后将其发送给开发团队。这消除了来回通信的需求,并加快了错误修复过程。 userSNap还与流行的项目管理和通信工具集成在一起,使其成为各个团队的多功能解决方案。> usersNap的关键功能是什么? 用于错误报告的工具。其中包括屏幕截图捕获,浏览器信息收集,控制台日志记录和用户反馈收集。它还提供了与Slack,Jira和Trello等流行工具等流行工具的集成。此外,Usernap还提供了用于与其他系统的进一步自定义和集成的API。>如何将usernap集成到我的Web应用程序中?
>将用户NAP集成到您的Web应用程序中很简单。您需要注册一个用户NAP帐户,创建一个新项目,然后将提供的JavaScript代码添加到您的Web应用程序中。此代码将在您的应用程序上加载usernap窗口小部件,允许用户直接报告错误。
我可以自定义usersnap widtget?
是,是的,用户nusernap为widget提供了一系列自定义选项。您可以更改小部件的颜色,文字和位置,以匹配您的品牌。您还可以自定义反馈表格,以收集用户的特定信息。所有这些都可以通过UsersNap仪表板或通过API完成。
>通过为用户提供一种简单有效的方式,用户如何帮助用户报告报告,用户如何帮助提高我的Web应用程序的质量?错误,用户NAP可帮助您更快地识别和解决问题。视觉反馈和详细的浏览器信息可帮助您的开发团队轻松理解和复制问题。这会导致更快的错误修复和改进,从而提高您的Web应用程序的整体质量。
>什么是UsersNap API,我该如何使用它?
>
> usersNap如何处理用户隐私?用户nap认真对待用户隐私。未经同意,该工具不会跟踪用户活动或收集个人数据。所有收集的数据均已安全存储,仅用于错误报告目的。 usernap还符合GDPR和其他隐私法规。
>我可以将用户nap用于移动错误报告吗?
>是的,usersNap支持移动错误报告。 UsersNap小部件响应迅速,在移动设备上运行良好。这使您的用户可以直接从其移动浏览器报告错误,从而为您提供有价值的反馈,以改善移动Web应用程序。
>>用户nap与其他错误报告工具相比如何?有关其视觉反馈和详细的浏览器信息,这使错误报告和修复更有效。它还提供了一系列自定义选项和与流行工具的集成。虽然其他工具可能会提供类似的功能,但Usernap的简单性和多功能性使其成为许多团队的首选选择。
用户nap提供了什么支持?
usernap为其用户提供全面的支持。这包括详细的文档,API参考和示例,以帮助您开始并充分利用工具。 usersNap还为您可能遇到的任何查询或问题提供电子邮件支持。>以上是用Usernap实现客户端错误报告的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

JWT是一种基于JSON的开放标准,用于在各方之间安全地传输信息,主要用于身份验证和信息交换。1.JWT由Header、Payload和Signature三部分组成。2.JWT的工作原理包括生成JWT、验证JWT和解析Payload三个步骤。3.在PHP中使用JWT进行身份验证时,可以生成和验证JWT,并在高级用法中包含用户角色和权限信息。4.常见错误包括签名验证失败、令牌过期和Payload过大,调试技巧包括使用调试工具和日志记录。5.性能优化和最佳实践包括使用合适的签名算法、合理设置有效期、

会话劫持可以通过以下步骤实现:1.获取会话ID,2.使用会话ID,3.保持会话活跃。在PHP中防范会话劫持的方法包括:1.使用session_regenerate_id()函数重新生成会话ID,2.通过数据库存储会话数据,3.确保所有会话数据通过HTTPS传输。

PHP8.1中的枚举功能通过定义命名常量增强了代码的清晰度和类型安全性。1)枚举可以是整数、字符串或对象,提高了代码可读性和类型安全性。2)枚举基于类,支持面向对象特性,如遍历和反射。3)枚举可用于比较和赋值,确保类型安全。4)枚举支持添加方法,实现复杂逻辑。5)严格类型检查和错误处理可避免常见错误。6)枚举减少魔法值,提升可维护性,但需注意性能优化。

SOLID原则在PHP开发中的应用包括:1.单一职责原则(SRP):每个类只负责一个功能。2.开闭原则(OCP):通过扩展而非修改实现变化。3.里氏替换原则(LSP):子类可替换基类而不影响程序正确性。4.接口隔离原则(ISP):使用细粒度接口避免依赖不使用的方法。5.依赖倒置原则(DIP):高低层次模块都依赖于抽象,通过依赖注入实现。

在PHPStorm中如何进行CLI模式的调试?在使用PHPStorm进行开发时,有时我们需要在命令行界面(CLI)模式下调试PHP�...

使用PHP的cURL库发送JSON数据在PHP开发中,经常需要与外部API进行交互,其中一种常见的方式是使用cURL库发送POST�...

静态绑定(static::)在PHP中实现晚期静态绑定(LSB),允许在静态上下文中引用调用类而非定义类。1)解析过程在运行时进行,2)在继承关系中向上查找调用类,3)可能带来性能开销。
