这个问题更多的是关于方法而不是实际的代码行
我想知道如何pseudo caching
在 php 中为 FILES 实现一个(因为没有更好的名称)。我试图阅读一些文章,但其中大多数是指 PHP 的内部缓存系统,而不是我需要的 FILE 缓存。
我有几种情况需要应用这样的系统:
方案 1:
访问帖子并单击链接时,会收集所有帖子附件并将其添加到 zip 文件中以供下载。
方案 2:
访问帖子时,脚本将扫描所有内容,提取所有链接,为每个链接下载一些匹配的图像(或动态准备一个),然后将这些图像提供给浏览器。(但不是在检查有效期之后??)
(这些示例使用"post"
并且"attachment"
因为我使用 wordpress 并且它是 wordpress 术语,所以目前两者都适用于我,除了它们一遍又一遍地生成文件。)
我对这两种情况(尤其是第 2 种情况)的怀疑 - 如何防止脚本在每次访问页面时都执行操作?(换句话说,如果文件存在,只需提供它,而无需再次循环整个创建操作)
我的第一直觉是用一些独特的(但不是加载唯一的uniqueid()
)名称来调用文件,然后检查它是否已经在服务器上,但这会带来一些问题(比如它已经作为命名存在,但是在另一个帖子中...... ) 并且 - 对于具有 20,000 张图像的服务器来说,这应该是非常耗费资源的。
我想到的第二件事是以某种方式为这些文件关联一个元数据,但话说回来,如何实现它?如何知道哪个链接是什么图像?
另外,在我检查服务器上是否存在文件的情况下,我怎么知道文件是否应该更改(并因此重新创建)?
由于我指的是 wordpress,所以我考虑将这些图像作为 base64 从二进制文件直接存储到数据库中,transien_API
但感觉很笨拙。
总结一下这个问题。如何生成文件,还要知道是否存在,需要时直接调用??我唯一的选择是将文件名存储在数据库中并以某种方式与帖子相关联吗?这似乎效率很低..
编辑我
我决定包含一些示例代码,因为它可以帮助人们理解我的困境。
function o99_wbss_prepare_with_callback($content,$width='250'){
$content = preg_replace_callback( '/(http[s]?:[^\s]*)/i', 'o99_wbss_prepare_cb', $content );
return $content;
}
function o99_wbss_prepare_cb($match){
$url = $match[1];
$url = esc_url_raw( $url );//someone said not need ??
$url_name = parse_url($url);
$url_name = $url_name['host'];// get rid of http://..
$param = '660';
$url = 'http://somescript/' . urlencode($url) . '?w=' . $param ;
$uploads = wp_upload_dir();
//$uniqid = uniqid();
$img = $uploads['basedir'] . '/tmp/' . $url_name .'.jpg' ; // was with $uniqid...
if(! @ file_get_contents($url)){
$url = 'path ' .$url. ' doesn"t exist or unreachable';
return $url;
} else {
$file = file_get_contents( $url );
}
// here I will need to make some chck if the file already was generated , and
// if so - just serve it ..
if ( $file) {
file_put_contents( $img, $file );
// Do some other operations on the file and prepare a new one ...
// this produces a NEW file in the wp-uploads folder with the same name...
unlink($img);
}
return $url;
}