remote_stream_wrapper.image.inc in Remote Stream Wrapper 7
File
remote_stream_wrapper.image.inc
View source
<?php
function remote_stream_wrapper_image_style_deliver($style, $scheme) {
$args = func_get_args();
array_shift($args);
array_shift($args);
$target = implode('/', $args);
$valid = !empty($style) && file_stream_wrapper_valid_scheme($scheme);
if (!variable_get('image_allow_insecure_derivatives', FALSE) || strpos(ltrim($target, '\\/'), 'styles/') === 0) {
$valid = $valid && isset($_GET[IMAGE_DERIVATIVE_TOKEN]) && $_GET[IMAGE_DERIVATIVE_TOKEN] === image_style_path_token($style['name'], $scheme . '://' . $target);
}
if (!$valid) {
return MENU_ACCESS_DENIED;
}
$image_uri = $scheme . '://' . $target;
$derivative_uri = remote_stream_wrapper_image_style_path($style['name'], $image_uri);
if (!remote_stream_wrapper_file_load_by_uri($image_uri)) {
return MENU_ACCESS_DENIED;
}
$lock_name = 'image_style_deliver:' . $style['name'] . ':' . drupal_hash_base64($image_uri);
if (!file_exists($derivative_uri)) {
$lock_acquired = lock_acquire($lock_name);
if (!$lock_acquired) {
drupal_add_http_header('Status', '503 Service Unavailable');
drupal_add_http_header('Retry-After', 3);
print t('Image generation in progress. Try again shortly.');
drupal_exit();
}
}
$success = file_exists($derivative_uri) || image_style_create_derivative($style, $image_uri, $derivative_uri);
if (!empty($lock_acquired)) {
lock_release($lock_name);
}
if ($success) {
$image = image_load($derivative_uri);
file_transfer($image->source, array(
'Content-Type' => $image->info['mime_type'],
'Content-Length' => $image->info['file_size'],
));
}
else {
watchdog('image', 'Unable to generate the derived image located at %path.', array(
'%path' => $derivative_uri,
));
drupal_add_http_header('Status', '500 Internal Server Error');
print t('Error generating image.');
drupal_exit();
}
}