私は特定のハッシュタグをつけたつぶやきから画像を取り込むスクリプトを作成しています。通常、このスクリプトはopen_basedirとsafe_modeがシャットダウンに問題のない専用のサーバーでのみ実装されているため、うまく動作しています。open_basedirを持つ共有サーバーのCURLOPT_FOLLOWLOCATIONの代わりにON
しかし、今、私はこのスクリプトをopen_basedirがONの共有サーバー上で自分のWebサイトをホストしているクライアントで動作させようとしています。結果:リダイレクトされたURLをTwitterの画像URL(Twitpic、Yfrogのような複数のクライアント)から取得しようとするとエラーが表示されます。
これは私が取得エラーです:
警告:ますcurl_setopt()function.curl-SETOPT]:open_basedirのが設定されているセーフモードまたは場合CURLOPT_FOLLOWLOCATIONが活性化することができない.....
基本的に、スクリプトはデータベースにツイートを生成し、URLも保存されます。しかし、サーバー上でイメージを作成しようとすると、直接URLからMIMEタイプを見つけることができないため、以下のスクリプトに記載されているように「隠された」という結果が表示されます。そのため、データベースに保存されているURLは、イメージパスをたどってイメージを取得して作成する必要があります。
私の質問は、FOLLOWLOCATION部分を書き換える方法はありますか?私はうまくいけば、誰もが
にスクリプトを私を助けることができる...
を解決するために、約3時間で検索しましたが、右のそれを実装するのに見えることはできません。
<?php
# Database gegevens inladen
include('config.php');
$query = mysql_query("select * from tweets where loaded=0 and hidden=0 order by id asc limit ".$maximgload);
if(mysql_num_rows($query) > 0){
while($db = mysql_fetch_object($query)){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $db->url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
$buffer = curl_exec($ch);
curl_close($ch);
if(!empty($buffer)){
# Afbeelding opslaan
$fp = fopen($imgdir.'/'.$db->id.'.temp', 'x');
fwrite($fp, $buffer);
fclose($fp);
if(!function_exists('mime_content_type')) {
function mime_content_type($filename) {
$mime_types = array(
// images
'png' => 'image/png',
'jpe' => 'image/jpeg',
'jpeg' => 'image/jpeg',
'jpg' => 'image/jpeg',
);
$ext = strtolower(array_pop(explode('.',$filename)));
if (array_key_exists($ext, $mime_types)) {
return $mime_types[$ext];
}
elseif (function_exists('finfo_open')) {
$finfo = finfo_open(FILEINFO_MIME);
$mimetype = finfo_file($finfo, $filename);
finfo_close($finfo);
return $mimetype;
}
else {
return 'application/octet-stream';
}
}
}
# Bestand omzetten naar juiste formaat
$mimetype = mime_content_type($imgdir.'/'.$db->id.'.temp');
# Jpg
if($mimetype == 'image/jpeg'){
rename($imgdir.'/'.$db->id.'.temp',$imgdir.'/'.$db->id.'.jpg');
}
# Png
elseif($mimetype == 'image/png'){
rename($imgdir.'/'.$db->id.'.temp',$imgdir.'/'.$db->id.'.png');
}
# Ander (onbekend) formaat? weg er mee!
else{
@unlink($imgdir.'/'.$db->id.'.temp');
@mysql_query("update tweets set hidden='1' where id='".$db->id."'");
$result = 'file '.$db->id.' onbekend';
break;
}
# Thumbnail maken
$source_image = imagecreatefromstring($buffer);
$source_width = imagesx($source_image);
$source_height = imagesy($source_image);
$source_ratio = $source_width/$source_height;
$destination_ratio = $thumbwidth/$thumbheight;
// landscape
if($source_ratio > $destination_ratio){
$temp_width = (int)($source_height * $destination_ratio);
$temp_height = $source_height;
$source_x = (int)(($source_width - $temp_width)/2);
$source_y = 0;
}
// portrait
else {
$temp_width = $source_width;
$temp_height = (int)($source_width * $destination_ratio);
$source_x = 0;
$source_y = (int)(($source_height - $temp_height)/2);
}
$destination_x = 0;
$destination_y = 0;
$source_width = $temp_width;
$source_height = $temp_height;
$new_destination_width = $thumbwidth;
$new_destination_height = $thumbheight;
$thumb = imagecreatetruecolor($thumbwidth,$thumbheight);
imagecopyresampled($thumb,$source_image,$destination_x,$destination_y,$source_x,$source_y,$new_destination_width,$new_destination_height,$source_width,$source_height);
# Thumbnail opslaan
if($mimetype == 'image/jpeg'){
imagejpeg($thumb,$imgdir.'/'.$db->id.'_thumb.jpg');
}
else{
imagepng($thumb,$imgdir.'/'.$db->id.'_thumb.png');
}
# Bijwerken in database
mysql_query("update tweets set loaded='1', mime='".$mimetype."' where id='".$db->id."'");
$result = 'afb '.$db->id.' gemaakt';
}
# Kan url niet openen? Dan uit database gooien
else{
mysql_query("update tweets set hidden='1' where id='".$db->id."'");
$result = 'afb '.$db->id.' hidden';
}
}
}
else{
$result = 'done';
}
echo '<html>
<head>
<meta http-equiv="refresh" content="2">
<title>'.$result.'</title>
</head>
</html>';
?>