我上传并保存了图片到/webroot/uploads/xxx/xxx.jpg。
然后我删除了图像文件,但它显示在error.log
中'错误:[Cake \ Routing \ Exception \ MissingControllerException]控制器 找不到类上传。'
我想我需要修复路由,.htacess或其他。
但我不知道如何解决它。
我的Cakephp版本是3.x.x。
任何人,你能解释一下如何修理它们。
答案 0 :(得分:2)
@ Manohar的建议很好,而且解释确实是CakePHP将缺少的/uploads
请求映射到一个不存在的控制器。但我总是发现理解问题的真正原因有助于解决问题,并避免将来出现类似的问题,所以这里有一些关于为什么这样做的事情。
看看webroot/.htaccess
。它应该是这样的:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>
这意味着不存在的资源的任何URL(在您的情况下,已删除的图像)将被重写(内部)到index.php
,后者又通过控制器和操作处理请求从原始网址确定。由于您的网址以/uploads
开头,因此会将其发送给UploadsController
。
总而言之,处理问题的另一种方法是告诉Cake 而不是尝试处理/uploads
网址。只需在RewriteCond %{REQUEST_URI} !^/uploads/
之后添加RewriteCond
之类的内容即可告诉它不要以/uploads/
开头的任何内容运行规则。 (谷歌的mod_rewrite文档了解更多。)
也可以(未经测试)简单地放
<IfModule mod_rewrite.c>
RewriteEngine Off
</IfModule>
webroot/uploads/.htaccess
中的(可能目前还没有)会照顾它,虽然这可能会影响性能(它是一个需要加载和解析的额外文件)涉及/uploads
)的每个请求。
请注意,这些选项会导致为您的网页可能引用的任何已删除图片发回404状态代码,这意味着它们会显示为&#34;缺少图像&#34;图标。 @ Manohar&#34; file_exists&#34; (或任何其他避免在HTML中生成图像标记的程序化解决方案)都不会这样做。哪种结果更可取决于您的情况。
答案 1 :(得分:1)
你已经从那条路径中删除了xxx.jpg图片,但我猜你还是从某处调用那张图片。
每当您重新加载任何包含已删除文件的页面时,error.log文件中都会出现此类错误。
因此,在将src(source)提供给任何图像/文件之前,请确保存在:
if (file_exists(/webroot/uploads/xxx/xxx.jpg)):
endif;
或者你可以使用CakePHP file library来处理这种情况。