PHPでcURLを使用してリモートサーバーから大量の画像を保存およびサイズ変更していますが、以前の開発者は、ユーザーがアップロードした写真を「安全」にするためのシステムを実装していなかったため、ユーザーはあらゆる種類の画像をアップロードできました。任意の種類の名前のファイル形式の場合、アップロードされたファイル名はそのままデータベースに保存されるため、多くのファイルにはURLセーフではなくiso-8859-8文字が含まれています。例えば:
gaght101125659_5 Gn-eŐs mtó gÁrlós.jpg
この答えによると、私は写真を取得するためのコードを作成しました。
private function getRemoteUrl($file)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $file);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);
$data = curl_exec($ch);
curl_close($ch);
return $data;
}
$img = imagecreatefromstring($this->getRemoteUrl($url));//$url contains the plain url of the image.
このコードは、次のような名前の画像に対して完全に機能しますが、gaht123115516_2.jpg
上記の例では、次のようなエラーが発生します。
Warning: imagecreatefromstring() [function.imagecreatefromstring]: Data is not in a recognized format in /home/test/public_html/resizing.php on line 64
もちろん、派手なキャラクターのため。getRemoteUrl($file)
では、変数を機能させるには、変数をどのように処理すればよい$file
でしょうか。これはPHPで実行できますか?そうでない場合は、他にどのような方法/プログラミング言語を試す必要がありますか?