Php 上传文件在公共网站上不再有效,但在本地有效?

Php 上传文件在公共网站上不再有效,但在本地有效?,php,laravel,iis,Php,Laravel,Iis,我主要在C#中工作,但继承了一个运行良好的php/laravel应用程序。它已经工作了相当长的一段时间,我从来没有经历过这个问题。今天上午11点左右,我们的网站不再上传图像/标准文档 我们在安装了IIS和PHP的windows环境中运行。我们有代码,可以让你上传,比如说图片,并存储一些额外的信息。PHP/Laravel(甚至检查了IIS日志、事件查看器和Laravel日志),没有发生错误。我们的应用程序只是坐在那里试图上传一个文件。最终我们的屏幕会刷新,文档或文件不会上传。如果我在我的机器上本地

我主要在C#中工作,但继承了一个运行良好的php/laravel应用程序。它已经工作了相当长的一段时间,我从来没有经历过这个问题。今天上午11点左右,我们的网站不再上传图像/标准文档

我们在安装了IIS和PHP的windows环境中运行。我们有代码,可以让你上传,比如说图片,并存储一些额外的信息。PHP/Laravel(甚至检查了IIS日志、事件查看器和Laravel日志),没有发生错误。我们的应用程序只是坐在那里试图上传一个文件。最终我们的屏幕会刷新,文档或文件不会上传。如果我在我的机器上本地尝试同样的测试(因为我们开发了它),它工作得很好,上传也会发生

我知道需要确保对文件位置的权限,但正如我所说,在过去一年半的时间里,这一切都很好。由于该站点无法访问,因此我们使用IUSR帐户,并向该用户授予有关目录(存储图像文档或文件的目录)的正确权限。我还确保没有windows更新导致此问题,但上一次windows更新是在1/24,我们的网站在当天正常工作,直到本月28日

例如,代码如下所示:

   // Audit Documents: Label Image
    if ($request->hasFile('audit_label_image')) {
        $document = new Document();
        $document->title = 'Document for Audit with id ' . $audit->audit_id;
        $document->filetype = $request->audit_label_image->extension();
        $document->save();

        $audit_document = new AuditDocument();
        $audit_document->audit_id = $audit->audit_id;
        $audit_document->document_id = $document->document_id;
        $audit_document->type_id = 63; // "Label Image" document type
        $audit_document->save();

        $request->audit_label_image->storeAs('audit', $document->document_id . '.' . $request->audit_label_image->extension() );
    }
我们的应用程序有一个保存的主记录(审计),然后它将保存与审计相关的其他对象。这是一个文档,然后我们将该审核的引用存储到该文档(因此上面的对象是
AuditDocument
)。当我们单击UI上的“保存”按钮时,它会坐在那里旋转轮子,就像它试图保存图像/文档一样。没有控制台错误或网络错误…它最终刷新屏幕,只是在我们的审核表(sql server)中保存了实际的“审核”对象,但是没有保存文档、审核文档和图像(物理文件)。我甚至试着写一个小测试,只是为了上传一个文件,结果一无所获

我不知道它是否收到HTTP 500错误(因为没有给我们错误)。如前所述,这一切都停止工作最近,但我们没有作出代码更改,导致这一点。不知道我还能在哪里查找,或者在php/laravel方面有什么可以帮助我的指针

更新
任何包含
enctype=“multipart/form data”
的表单都会导致此问题。我们删除这一行的那一刻,一切都正常,但文件当然不会发布。在IIS上运行PHP/Laravel的其他人过去是否遇到过此问题?我们已授予IUSR、IIS_用户、IIS_WPG、网络、系统、经过身份验证的用户权限,因此权限方面我们应该可以…

启用日志并正确查看调试,这可能是因为文件名不唯一或mime类型,主机上的存储空间不足,只需使用日志调试它

我建议您使用Xdebug并在幕后查看到底发生了什么。 这里有一个laracast链接,它将帮助您了解如何使用它以及如何配置laravel。相信我,这会提高你的工作效率


问题已解决-奇怪的是,我必须进入
C:\Windows\Temp
并清除该目录,该目录中有价值80 Gig的临时文件,这些文件是PHP生成的,从未删除过。我一清除它,一切就开始工作了。奇怪的是,这个文件夹所在的服务器仍然有足够的空间(超过20 Gig),所以我不知道这个文件夹是否有一些限制


无论如何,我现在很好

您是否在windows update之后检查了php版本,是否调试了网络(浏览器控制台)中ajax上传过程中发生的情况windows更新并没有导致这种情况,因为我提到更新是在1/24时进行的。到今天28日为止,站点一直在进行更新。@droiddev我打开了“网络”选项卡并打开了控制台,但什么也没有出现。是的,我知道您的windows在两天前更新过,但有时它可能会从服务器缓存中运行,缓存更新后,代码往往会导致错误。我认为应该调用用于上传的ajax文件。如果没有,则表示调用ajax时java脚本中存在问题。根据您的描述,我们仍然无法找到文件未保存在服务器上的原因。我建议您可以尝试启用失败请求跟踪以捕获一些跟踪日志。然后,您可以分析日志以找到详细的错误消息。关于如何使用它的更多细节,你可以参考这个。这没有帮助我可以在本地调试它在本地工作。朋友,那么你必须远程调试。同样的事情。