get_headers が突然機能しなくなった理由を突き止めようと、ここ数日、私は自殺してきました。私は自分の INI ファイルをチェックし、cUrl を試し、できる限りのことを行いましたが、最終的に文字列入力自体に不可解な問題があることに気付きました。
これを入力すると:
if (filter_var($url, FILTER_VALIDATE_URL)!== false)
die(json_encode(array('error' => "Your image link doesn't seem to be valid. Are you sure you copied the whole URL?")));
echo gettype($url).'::::';
$url = 'http://www.manatees.net/manateeb.jpg';
echo $url;
echo gettype($url);
print_r(get_headers($url,1));
出力は次のとおりです。
string::::http://www.manatees.net/manateeb.jpgstringArray
(
[0] => HTTP/1.1 200 OK
[Date] => Tue, 22 Jul 2014 08:40:43 GMT
[Server] => Apache/2.2.22 (Debian)
.... and so on
しかし、ハードコーディングされた URL 行を取り出して、AJAX 経由で関数に渡された値を使用するようにすると (次のように 2 行をコメントアウトします):
if (filter_var($url, FILTER_VALIDATE_URL)!== false)
die(json_encode(array('error' => "Your image link doesn't seem to be valid. Are you sure you copied the whole URL?")));
//echo gettype($url).'::::';
//$url = 'http://www.manatees.net/manateeb.jpg';
echo $url;
echo gettype($url);
print_r(get_headers($url,1));
これは、代わりにコンソールに表示されるものです。
http//www.manatees.net/manateeb.jpgstring<br />
<font size='1'><table class='xdebug-error xe-warning' dir='ltr' border='1' cellspacing='0' cellpadding='1'>
<tr><th align='left' bgcolor='#f57900' colspan="5"><span style='background-color: #cc0000; color: #fce94f; font-size: x-large;'>( ! )</span> Warning: get_headers(): This function may only be used against URLs in E:\Stuff\Working\htdocs\image_upload.php on line <i>180</i></th></tr>
ここに手動で投稿するのと同じ URL を送信していますが、結果は異なります。タイプはまだ正しいですが、文字セットを何らかの方法で変更できますか?
ajax 呼び出しは次のとおりです。
$.ajax({
beforeSend: spinnerOn(),
url: 'image_upload.php',
type: 'POST',
data: data,
cache: false,
dataType: 'json',
processData: false, // Don't process the files
contentType: false, // Set content type to false as jQuery will tell the server its a query string request
そして、これが「データ」を作成するコードです(なぜこのようにしたのか覚えていません):
var data = new FormData(); // create formdata (HTML5 object for uploading) object
data.append('action', 'upload'); // Depending on why the image was uploaded, perform different actions
data.append('url', theURL);
もちろん、URL = http://www.manatees.net/manateeb.jpgです。