Php Moodle:通过文件API上传的文件在查看时会损坏

Php Moodle:通过文件API上传的文件在查看时会损坏,php,file,moodle,moodle-api,totara,Php,File,Moodle,Moodle Api,Totara,因此,我正在开发一种新的课程格式,其中一幅图片与课程中的每项活动相关联,并以视觉方式呈现。我创建了课程格式,覆盖了渲染器等,一切正常。然而,图像应该是定制生成的,因为它必须适用于所有现有的和未来的课程,我在通用课程模块表单中添加了一些额外的代码,以实现图像上传 无可否认,在我努力使文件API正常工作之后,现在一切都正常了。只有在我的课程格式中,还有一个附加标题,您可以在该标题下上载单个图像。这会被保存到数据库中。很好,它不是草稿,如果我在数据库中遵循contenthash,它可以在我的datar

因此,我正在开发一种新的课程格式,其中一幅图片与课程中的每项活动相关联,并以视觉方式呈现。我创建了课程格式,覆盖了渲染器等,一切正常。然而,图像应该是定制生成的,因为它必须适用于所有现有的和未来的课程,我在通用课程模块表单中添加了一些额外的代码,以实现图像上传

无可否认,在我努力使文件API正常工作之后,现在一切都正常了。只有在我的课程格式中,还有一个附加标题,您可以在该标题下上载单个图像。这会被保存到数据库中。很好,它不是草稿,如果我在数据库中遵循contenthash,它可以在我的dataroots filedir中完美地查看。它甚至作为默认罚款加载到表单中。但是,如果我尝试使用该图像,所有测试都可以正常运行(.is\u valid\u img()等),我甚至可以下载一个文件。然而,当我这样做时,它被破坏了,我的文件查看器说:“严重错误:不是png文件”。不用说,它并没有显示在我的实际课程网站上


当我在filedir中查看文件时,它显然是一个png。请,我非常感谢您的帮助,因为我已经尝试了很多,现在已经束手无策了。

在发送PNG文件之前,您似乎在页面上获得了某种输出-这将添加到文件的开头,并导致它无法作为PNG文件工作

我建议您在十六进制编辑器中打开该文件,并检查文件的开头-它应该是这样的,所以在这之前寻找额外的字符


至于额外字符的来源——它们可能是一条明显的警告/错误消息(应该很容易跟踪和修复)。或者,您可能会有一些零散的“echo”语句(同样,很容易找到)。最糟糕的问题是在安装的某个地方打开文件的“php”标记之前,或者在文件末尾的结束标记之后(这就是为什么不应该使用结束php标记)。找到这些文件将归结为搜索所有自定义代码文件以找到它们。

我觉得在发送PNG文件之前,页面上会有某种输出,这将添加到文件的开头,并导致它不能作为PNG文件工作

我建议您在十六进制编辑器中打开该文件,并检查文件的开头-它应该是这样的,所以在这之前寻找额外的字符


至于额外字符的来源——它们可能是一条明显的警告/错误消息(应该很容易跟踪和修复)。或者,您可能会有一些零散的“echo”语句(同样,很容易找到)。最糟糕的问题是在安装的某个地方打开文件的“php”标记之前,或者在文件末尾的结束标记之后(这就是为什么不应该使用结束php标记)。找到这些代码需要搜索所有定制的代码文件才能找到它们。

伙计,非常感谢。是的,这只是一个随机变量转储,它被打印到图片url,我没有考虑,因为我不认为图片内容会在这里生成。图片内容不是在那里生成的,而是从服务器存储中加载的,并从那里推送到用户的浏览器中,这意味着在实际文件内容之前必须没有任何输出。啊,很高兴知道,我认为他们应该可以在文档中更清楚地说明这一点。无论如何,谢谢你的帮助!:)老兄,非常感谢你。是的,这只是一个随机变量转储,它被打印到图片url,我没有考虑,因为我不认为图片内容会在这里生成。图片内容不是在那里生成的,而是从服务器存储中加载的,并从那里推送到用户的浏览器中,这意味着在实际文件内容之前必须没有任何输出。啊,很高兴知道,我认为他们应该可以在文档中更清楚地说明这一点。无论如何,谢谢你的帮助!:)