mirror of
https://github.com/silverstripe/silverstripe-textextraction
synced 2024-10-22 11:06:00 +02:00
8aca06aef2
MySQL has a packet limit of 1MB as a default (http://dev.mysql.com/doc/refman/5.0/en/packet-too-large.html). This interferes with the UPDATE queries required to add file content caches. Since the query can't be terminated correctly, the whole content will be discarded with a query error. This change allows to truncate content prior to the UPDATE operation, and defaults to 500 characters. This leaves some room for multibyte characters as well as other parts of the SQL query.
84 lines
1.7 KiB
PHP
84 lines
1.7 KiB
PHP
<?php
|
|
|
|
interface FileTextCache {
|
|
|
|
/**
|
|
* Save extracted content for a given File entity
|
|
*
|
|
* @param File $file
|
|
* @param string $content
|
|
*/
|
|
public function save(File $file, $content);
|
|
|
|
/**
|
|
* Return any cached extracted content for a given file entity
|
|
*
|
|
* @param File $file
|
|
*/
|
|
public function load(File $file);
|
|
}
|
|
|
|
/**
|
|
* Caches the extracted content on the record for the file.
|
|
* Limits the stored file content by default to avoid hitting query size limits.
|
|
*/
|
|
class FileTextCache_Database implements FileTextCache {
|
|
|
|
public function load(File $file) {
|
|
return $file->FileContentCache;
|
|
}
|
|
|
|
public function save(File $file, $content) {
|
|
$maxLength = Config::inst()->get('FileTextCache_Database', 'max_content_length');
|
|
$file->FileContentCache = ($maxLength) ? substr($content, 0, $maxLength) : $content;
|
|
$file->write();
|
|
}
|
|
|
|
}
|
|
|
|
/**
|
|
* Uses SS_Cache with a lifetime to cache extracted content
|
|
*/
|
|
class FileTextCache_SSCache implements FileTextCache, Flushable {
|
|
|
|
/**
|
|
* Default cache to 1 hour
|
|
*
|
|
* @var int
|
|
* @config
|
|
*/
|
|
private static $lifetime = 3600;
|
|
|
|
/**
|
|
* @return SS_Cache
|
|
*/
|
|
protected static function get_cache() {
|
|
$lifetime = Config::inst()->get(__CLASS__, 'lifetime');
|
|
$cache = SS_Cache::factory(__CLASS__);
|
|
$cache->setLifetime($lifetime);
|
|
return $cache;
|
|
}
|
|
|
|
protected function getKey(File $file) {
|
|
return md5($file->getFullPath);
|
|
}
|
|
|
|
public function load(File $file) {
|
|
$key = $this->getKey($file);
|
|
$cache = self::get_cache();
|
|
return $cache->load($key);
|
|
}
|
|
|
|
public function save(File $file, $content) {
|
|
$key = $this->getKey($file);
|
|
$cache = self::get_cache();
|
|
return $cache->save($content, $key);
|
|
}
|
|
|
|
public static function flush() {
|
|
$cache = self::get_cache();
|
|
$cache->clean();
|
|
}
|
|
|
|
}
|