Google Calendar API Webhook POST场景下var_dump()无输出问题咨询
var_dump 写入文件失败的根本原因
var_dump() 函数的设计逻辑是直接向标准输出打印变量的结构化信息,它的返回值为void(无任何返回内容)。因此你将var_dump()的执行结果拼接进字符串、或赋值给变量时,实际拼接的是空值,自然不会有对应内容写入日志文件。
正确实现变量内容落盘的方案
- 方案1:使用
var_export()函数
该函数支持将变量的结构化表示作为字符串返回,只需将第二个参数设置为true即可,示例如下:if(isset($_SERVER["HTTP_X_GOOG_RESOURCE_URI"], $_SERVER["HTTP_X_GOOG_CHANNEL_ID"])) { $calendarId = urldecode(substr($_SERVER["HTTP_X_GOOG_RESOURCE_URI"], 49, 54)); $logFile = fopen("test.txt", "a") or die("Unable to open file!"); $txt = " something \n " . var_export($calendarId, true); fwrite($logFile, $txt); fclose($logFile); } - 方案2:捕获输出缓冲区内容
如果你需要保留var_dump()自带的类型、长度等输出格式,可以通过PHP输出控制函数捕获打印内容:ob_start(); var_dump($calendarId); $dumpResult = ob_get_clean(); $txt = " something \n " . $dumpResult;
其他注意事项
你提供的示例代码存在变量名笔误:打开文件返回的句柄赋值给了$logFile,但调用fwrite时使用了未定义的$myfile变量,也会导致写入逻辑异常,需要修正。
关于getallheaders()不可用的问题,可通过自定义函数遍历$_SERVER变量获取所有请求头,无需依赖Apache模块:
function get_all_headers_custom() { $headers = []; foreach ($_SERVER as $key => $value) { if (str_starts_with($key, 'HTTP_')) { $headerKey = ucwords(str_replace('_', '-', strtolower(substr($key, 5))), '-'); $headers[$headerKey] = $value; } } return $headers; }
内容的提问来源于stack exchange,提问作者Viktor
相关产品推荐
相关产品推荐

