我的应用程序有问题 它在后端使用 symfony 6.3.2 部署,我认为它是在带有 docker 的 nginx 服务器上 api使用的库是api-platform
每当我调用 BASE_URL/api/currencies 等 API 时 十次中有 1-2 次我有错误 这是痕迹的一部分
{
{
"@context": "\/api\/contexts\/Error",
"@type": "hydra:Error",
"hydra:title": "An error occurred",
"hydra:description": "unlink(): Argument #1 ($filename) must not contain any null bytes",
"trace": [
{
"namespace": "",
"short_class": "",
"class": "",
"type": "",
"function": "",
"file": "\/app\/vendor\/symfony\/http-kernel\/Profiler\/FileProfilerStorage.php",
"line": 332,
"args": []
},
{
"namespace": "",
"short_class": "",
"class": "",
"type": "",
"function": "unlink",
"file": "\/app\/vendor\/symfony\/http-kernel\/Profiler\/FileProfilerStorage.php",
"line": 332,
"args": []
},
{
"namespace": "Symfony\\Component\\HttpKernel\\Profiler",
"short_class": "FileProfilerStorage",
"class": "Symfony\\Component\\HttpKernel\\Profiler\\FileProfilerStorage",
"type": "->",
"function": "removeExpiredProfiles",
"file": "\/app\/vendor\/symfony\/http-kernel\/Profiler\/FileProfilerStorage.php",
"line": 182,
"args": []
}
所以错误来自于用于删除文件的 unlink() 函数 从我从symfony 6.3(改进)中读到的内容来看,他们引入了一项功能,可以在一段时间后自动删除配置文件。实际上,对于每个请求,Symfony 有 10% 的随机机会激活删除功能。激活后,两天前或更早创建的任何配置文件都将被删除。 这肯定解释了为什么有时我的请求失败,有时它们工作,这肯定是尝试使用removeExpiredProfiles()函数删除过期的配置文件 奇怪的是,即使请求失败我还是一开始就拿到了数据
这是一个何时起作用的示例
{
"@context": "\/api\/contexts\/Currency",
"@id": "\/api\/currencies\/1",
"@type": "Currency",
"id": 1,
"uuid": "018ec2aa-3105-71a3-bc59-bd5e81b146ef",
"code": "EUR",
"name": "Euros"
}
这是失败的例子
{
"@context": "\/api\/contexts\/Currency",
"@id": "\/api\/currencies\/1",
"@type": "Currency",
"id": 1,
"uuid": "018ec2aa-3105-71a3-bc59-bd5e81b146ef",
"code": "EUR",
"name": "Euros"
}{
"@context": "\/api\/contexts\/Error",
"@type": "hydra:Error",
"hydra:title": "An error occurred",
"hydra:description": "unlink(): Argument #1 ($filename) must not contain any null bytes",
"trace": [
{
"namespace": "",
"short_class": "",
"class": "",
"type": "",
"function": "",
"file": "\/app\/vendor\/symfony\/http-kernel\/Profiler\/FileProfilerStorage.php",
"line": 332,
"args": []
},
{
"namespace": "",
"short_class": "",
"class": "",
"type": "",
"function": "unlink",
"file": "\/app\/vendor\/symfony\/http-kernel\/Profiler\/FileProfilerStorage.php",
"line": 332,
"args": []
},
{
"namespace": "Symfony\\Component\\HttpKernel\\Profiler",
"short_class": "FileProfilerStorage",
"class": "Symfony\\Component\\HttpKernel\\Profiler\\FileProfilerStorage",
"type": "->",
"function": "removeExpiredProfiles",
"file": "\/app\/vendor\/symfony\/http-kernel\/Profiler\/FileProfilerStorage.php",
"line": 182,
"args": []
},
...
任何帮助将不胜感激 谢谢
我试图做的是在开发模式下在本地克隆后端,并使用与 prod 中相同的 php、symfony 以及 Composer 安装的所有软件包的确切版本 我预计在开发中也会出现同样的错误,并得出结论认为某些库不是最新的 但在开发中我从来没有遇到过这个错误 我不明白为什么
该错误表明问题出在探查器上。在生产中,通常应该禁用它。
您在生产中使用哪个 Composer 命令来安装软件包?
.env 文件中 APP_ENV 的值是多少?