重定向丢失的图像文件的最快方法

如何解决重定向丢失的图像文件的最快方法

|| 我有一个即时缩略图系统,正在尝试寻找最好的方法,以确保在提供图像时尽可能快。这是当前的流程: 用户请求缩略图
thumbnails/this-is-the-image-name.gif?w=200&h=100&c=true
htaccess文件使用modrewrite将请求从此文件夹发送到PHP文件 PHP文件根据查询字符串值在请求的图像中检查“ 1” 如果是这样:
header(\'content-type: image/jpeg\'); 
echo file_get_contents($file_check_path); 
die();
如果不是,它将创建缩略图并返回。 我的问题是是否有办法将其优化为更快?理想情况下,我的htaccess文件将执行file_exists,并且仅在不这样做时才将您发送到PHP文件...但是由于我使用的是查询字符串,因此无法构建动态URL进行检查。是否值得从查询字符串切换到实际文件请求,然后在htaccess中进行是否存在检查?会更快吗?我更喜欢查询字符串语法,但是当前所有请求都转到PHP文件,该文件将返回图像(无论是否存在)。 感谢您提前输入!     

解决方法

        从理论上讲,您应该能够做到这一点。
RewriteCond
命令具有标记
-f
,可用于检查文件的存在。您应该能够拥有这样的规则:
# If the file doesn\'t exist
RewriteCond %{REQUEST_FILENAME} !-f

# off to PHP we go
RewriteRule (.*)   your-code.php [L,QSA]
这里的问题是,我想您正在根据传入的参数来命名文件-所以上面的示例可能是
thumbnails/this-is-the-image-name-200-100.gif
。如果是这种情况,您将需要生成一个文件名以进行即时测试,然后检查该文件名而不是“ 7”字样-具体细节确实取决于您的设置。如果可以的话,我建议您使用一些不需要太多努力的系统。例如,您可以将缩略图存储在类似于“ 8”的目录结构中的文件系统中,与“ 9”相比,在重写规则中检查缩略图更容易。 如果您尚未签出,Apache的mod_rewrite指南中有很多不错的示例。 更新:因此,您实际上需要从外观上检查动态文件名。我认为最简单的方法是将生成的文件名粘贴到环境变量中,如下所示(我从另一个问题中借用来充实它):
# generate potential thumbnail filename
RewriteCond %{SCRIPT_FILENAME}%{QUERY_STRING} /([a-zA-Z0-9-]+).(jpg|gif|png)w=([0-9]+)&h=([0-9]+)(&c=(true|false))

# store it in a variable
RewriteRule .* - [E=thumbnail:%1-%2-%3-%4-%6.jpg]

# check to see if it exists
RewriteCond %{DOCUMENT_ROOT}/path/%{ENV:thumbnail} !-f 

# off to PHP we go
RewriteRule (.*)   thumbnail.php?file_name=%1&type=%2&w=%3&h=%4&c=%6 [L,QSA]
这是完全未经测试的,并且肯定无法正常工作。我会建议几件事: 另外,我为您提供的一项重要建议是,如果可能,请打开日志记录并将
RewriteLogLevel
设置为较高的水平。重写规则的日志可能很复杂,但是绝对可以让您了解发生了什么。您需要服务器访问权限才能执行此操作-如果我记得,您不能将日志记录配置放在.htaccess文件中。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?