czaks
11 years ago
3 changed files with 257 additions and 0 deletions
@ -0,0 +1,52 @@ |
|||
#!/usr/bin/php |
|||
<?php |
|||
/* |
|||
* benchmark.php - benchmarks thumbnailing methods |
|||
* |
|||
*/ |
|||
|
|||
require dirname(__FILE__) . '/inc/cli.php'; |
|||
require 'inc/image.php'; |
|||
|
|||
// move back to this directory |
|||
chdir(dirname(__FILE__)); |
|||
|
|||
if(count($argv) != 2) |
|||
die("Usage: {$argv[0]} [file]\n"); |
|||
|
|||
$file = $argv[1]; |
|||
$extension = strtolower(substr($file, strrpos($file, '.') + 1)); |
|||
$out = tempnam($config['tmp'], 'thumb'); |
|||
$count = 300; |
|||
|
|||
function benchmark($method) { |
|||
global $config, $file, $extension, $out, $count; |
|||
|
|||
$config['thumb_method'] = $method; |
|||
|
|||
printf("Method: %s\nThumbnailing %d times... ", $method, $count); |
|||
|
|||
$start = microtime(true); |
|||
for($i = 0; $i < $count; $i++) { |
|||
$image = new Image($file, $extension); |
|||
$thumb = $image->resize( |
|||
$config['thumb_ext'] ? $config['thumb_ext'] : $extension, |
|||
$config['thumb_width'], |
|||
$config['thumb_height'] |
|||
); |
|||
|
|||
$thumb->to($out); |
|||
$thumb->_destroy(); |
|||
$image->destroy(); |
|||
} |
|||
$end = microtime(true); |
|||
|
|||
printf("Took %.2f seconds (%.2f/second; %.2f ms)\n", $end - $start, $rate = ($count / ($end - $start)), 1000 / $rate); |
|||
|
|||
unlink($out); |
|||
} |
|||
|
|||
benchmark('gd'); |
|||
benchmark('imagick'); |
|||
benchmark('convert'); |
|||
|
@ -0,0 +1,100 @@ |
|||
<?php |
|||
|
|||
/* |
|||
* This script will look for Tinyboard in the following places (in order): |
|||
* - $TINYBOARD_PATH environment varaible |
|||
* - ./ |
|||
* - ./Tinyboard/ |
|||
* - ../ |
|||
*/ |
|||
|
|||
set_time_limit(0); |
|||
$shell_path = getcwd(); |
|||
|
|||
if(getenv('TINYBOARD_PATH') !== false) |
|||
$dir = getenv('TINYBOARD_PATH'); |
|||
elseif(file_exists('inc/functions.php')) |
|||
$dir = false; |
|||
elseif(file_exists('Tinyboard') && is_dir('Tinyboard') && file_exists('Tinyboard/inc/functions.php')) |
|||
$dir = 'Tinyboard'; |
|||
elseif(file_exists('../inc/functions.php')) |
|||
$dir = '..'; |
|||
else |
|||
die("Could not locate Tinyboard directory!\n"); |
|||
|
|||
if($dir && !chdir($dir)) |
|||
die("Could not change directory to {$dir}\n"); |
|||
|
|||
if(!getenv('TINYBOARD_PATH')) { |
|||
// follow symlink |
|||
chdir(realpath('inc') . '/..'); |
|||
} |
|||
|
|||
putenv('TINYBOARD_PATH=' . getcwd()); |
|||
|
|||
require 'inc/functions.php'; |
|||
require 'inc/mod.php'; |
|||
|
|||
$mod = Array( |
|||
'id' => -1, |
|||
'type' => ADMIN, |
|||
'username' => '?', |
|||
'boards' => Array('*') |
|||
); |
|||
|
|||
function get_httpd_privileges() { |
|||
global $config, $shell_path, $argv; |
|||
|
|||
if(php_sapi_name() != 'cli') |
|||
die("get_httpd_privileges(): invoked from HTTP client.\n"); |
|||
|
|||
echo "Dropping priviledges...\n"; |
|||
|
|||
if(!is_writable('.')) |
|||
die("get_httpd_privileges(): web directory is not writable\n"); |
|||
|
|||
$filename = '.' . md5(rand()) . '.php'; |
|||
$inc_filename = '.' . md5(rand()) . '.php'; |
|||
|
|||
echo "Copying rebuilder to web directory...\n"; |
|||
|
|||
// replace "/inc/cli.php" with its new filename |
|||
passthru("cat " . escapeshellarg($shell_path . '/' . $_SERVER['PHP_SELF']) . " | sed \"s/'\/inc\/cli\.php'/'\/{$inc_filename}'/\" > {$filename}"); |
|||
|
|||
$inc_header = "<?php\n";
|
|||
|
|||
// copy environment |
|||
$env = explode("\n", shell_exec('printenv | grep ^TINYBOARD')); |
|||
foreach($env as $line) { |
|||
if(!empty($line)) |
|||
$inc_header .= "putenv('" . addslashes($line) . "');\n"; |
|||
} |
|||
|
|||
// copy command line arguments |
|||
$inc_header .= "\$argv = " . var_export($argv, true) . ";\n"; |
|||
|
|||
// copy this file |
|||
file_put_contents($inc_filename, $inc_header . substr($inc = file_get_contents(__FILE__), strpos($inc, "\n"))); |
|||
|
|||
chmod($filename, 0666); |
|||
chmod($inc_filename, 0666); |
|||
|
|||
if(preg_match('/^https?:\/\//', $config['root'])) { |
|||
$url = $config['root'] . $filename; |
|||
} elseif($host = getenv('TINYBOARD_HOST')) { |
|||
$url = 'http://' . $host . $config['root'] . $filename; |
|||
} else { |
|||
// assume localhost |
|||
$url = 'http://localhost' . $config['root'] . $filename; |
|||
} |
|||
|
|||
echo "Downloading $url\n"; |
|||
|
|||
passthru('curl -s -N ' . escapeshellarg($url)); |
|||
|
|||
unlink($filename); |
|||
unlink($inc_filename); |
|||
|
|||
exit(0); |
|||
} |
|||
|
@ -0,0 +1,105 @@ |
|||
#!/usr/bin/php |
|||
<?php |
|||
|
|||
/* |
|||
* rebuild.php - rebuilds all static files |
|||
* |
|||
* Command line arguments: |
|||
* -q, --quiet |
|||
* Suppress output. |
|||
* |
|||
* --quick |
|||
* Do not rebuild posts. |
|||
* |
|||
* -b, --board <string> |
|||
* Rebuild only the specified board. |
|||
* |
|||
* -f, --full |
|||
* Rebuild replies as well as threads (re-markup). |
|||
* |
|||
*/ |
|||
|
|||
require dirname(__FILE__) . '/inc/cli.php'; |
|||
|
|||
if(!is_writable($config['file_script'])) { |
|||
get_httpd_privileges(); |
|||
} |
|||
|
|||
$start = microtime(true); |
|||
|
|||
// parse command line |
|||
$opts = getopt('qfb:', Array('board:', 'quick', 'full', 'quiet')); |
|||
$options = Array(); |
|||
|
|||
$options['board'] = isset($opts['board']) ? $opts['board'] : (isset($opts['b']) ? $opts['b'] : false); |
|||
$options['quiet'] = isset($opts['q']) || isset($opts['quiet']); |
|||
$options['quick'] = isset($opts['quick']); |
|||
$options['full'] = isset($opts['full']) || isset($opts['f']); |
|||
|
|||
if(!$options['quiet']) |
|||
echo "== Tinyboard {$config['version']} ==\n"; |
|||
|
|||
if(!$options['quiet']) |
|||
echo "Clearing template cache...\n"; |
|||
|
|||
load_twig(); |
|||
$twig->clearCacheFiles(); |
|||
|
|||
if(!$options['quiet']) |
|||
echo "Regenerating theme files...\n"; |
|||
rebuildThemes('all'); |
|||
|
|||
if(!$options['quiet']) |
|||
echo "Generating Javascript file...\n"; |
|||
buildJavascript(); |
|||
|
|||
$main_js = $config['file_script']; |
|||
|
|||
$boards = listBoards(); |
|||
|
|||
foreach($boards as &$board) { |
|||
if($options['board'] && $board['uri'] != $options['board']) |
|||
continue; |
|||
|
|||
if(!$options['quiet']) |
|||
echo "Opening board /{$board['uri']}/...\n"; |
|||
openBoard($board['uri']); |
|||
|
|||
if($config['file_script'] != $main_js) { |
|||
// different javascript file |
|||
if(!$options['quiet']) |
|||
echo "Generating Javascript file...\n"; |
|||
buildJavascript(); |
|||
} |
|||
|
|||
|
|||
if(!$options['quiet']) |
|||
echo "Creating index pages...\n"; |
|||
buildIndex(); |
|||
|
|||
if($options['quick']) |
|||
continue; // do no more |
|||
|
|||
if($options['full']) { |
|||
$query = query(sprintf("SELECT `id` FROM `posts_%s`", $board['uri'])) or error(db_error()); |
|||
while($post = $query->fetch()) { |
|||
if(!$options['quiet']) |
|||
echo "Rebuilding #{$post['id']}...\n"; |
|||
rebuildPost($post['id']); |
|||
} |
|||
} |
|||
|
|||
$query = query(sprintf("SELECT `id` FROM `posts_%s` WHERE `thread` IS NULL", $board['uri'])) or error(db_error()); |
|||
while($post = $query->fetch()) { |
|||
if(!$options['quiet']) |
|||
echo "Rebuilding #{$post['id']}...\n"; |
|||
buildThread($post['id']); |
|||
} |
|||
} |
|||
|
|||
if(!$options['quiet']) |
|||
printf("Complete! Took %g seconds\n", microtime(true) - $start); |
|||
|
|||
unset($board); |
|||
modLog('Rebuilt everything using tools/rebuild.php'); |
|||
|
Loading…
Reference in new issue