サーバーは、エックスサーバーです。
Warning: copy(img/http://www.hoge.com/03.png) [function.copy]: failed to open stream: No such file or directory in /home/xxxxxxx/xxx.com/public_html/qr/google.php on line 41
これはどういうエラーなのでしょうか?
下記コードのcopy($qr, $imgfile);部分で出ています。
define('QR_URI', 'http://chart.apis.google.com/chart');
set_time_limit(0);
$data = array("http://www.hoge.com/01", "http://www.hoge.com/02", "http://www.hoge.com/03");
foreach($data as $var) {
$imgfile = 'img/' . $var . '.png';
if (!file_exists($imgfile)) {
$qr = QR_URI . '?chs=200x200&cht=qr&chld=m|1&chl=' . urlencode($var);
copy($qr, $imgfile);
}
}
よろしくお願いします。
$imgfile = 'img/' . $var . '.png';
において、コピー先が "img/http://www.hoge.com/01.png", "img/http://www.hoge.com/02.png", "img/http://www.hoge.com/03.png" になってしまっているのがエラーの原因です。
下記のように書き直してみて下さい。
define('QR_URI', 'http://chart.apis.google.com/chart'); set_time_limit(0); $data = array( "http://www.hoge.com/01", "http://www.hoge.com/02", "http://www.hoge.com/03" ); foreach($data as $var) { preg_match("/\/([0-9]+)$/", $var, $items); $imgfile = 'img/' . $items[1] . '.png'; if (!file_exists($imgfile)) { $qr = QR_URI . '?chs=200x200&cht=qr&chld=m|1&chl=' . urlencode($var); copy($qr, $imgfile); } }
【原因】
Linuxではファイル名に / は使えないので書き込みに失敗します
( / はディレクトリの区切りに使われる文字のためです)
【解説】
file_existsはファイルまたはディレクトリの存在を探すだけなので / が区切り文字と認識されてもエラーの原因とはならず、単にFalseという結果になります
copyでは / をディレクトリの区切り文字としてしまうためNo such file or directory(ファイルかディレクトリが見当たらない)というエラーになります
【対応例】
(例1) / を _ などに置き換えてしまう
(例2)ファイル名はarray("www.hoge.com/01", "www.hoge.com/02", "www.hoge.com/03");といった具合にしておき、
copyの前に www.hoge.com というディレクトリの存在確認(無ければ作る)をしてから copyを行うようにする
あっさり動きました。
そんなルールがあるなんて今知りました。
ありがとうございます。
$imgfile = 'img/' . $var . '.png';
において、コピー先が "img/http://www.hoge.com/01.png", "img/http://www.hoge.com/02.png", "img/http://www.hoge.com/03.png" になってしまっているのがエラーの原因です。
下記のように書き直してみて下さい。
define('QR_URI', 'http://chart.apis.google.com/chart'); set_time_limit(0); $data = array( "http://www.hoge.com/01", "http://www.hoge.com/02", "http://www.hoge.com/03" ); foreach($data as $var) { preg_match("/\/([0-9]+)$/", $var, $items); $imgfile = 'img/' . $items[1] . '.png'; if (!file_exists($imgfile)) { $qr = QR_URI . '?chs=200x200&cht=qr&chld=m|1&chl=' . urlencode($var); copy($qr, $imgfile); } }
ファイル名変更のご指導までいただきありがとうございます。
無事ファイルは出力されました。
少し考えれば、ファイル名に同じURLまで含める必要は無いですね。
ありがとうございます。
ファイル名変更のご指導までいただきありがとうございます。
無事ファイルは出力されました。
少し考えれば、ファイル名に同じURLまで含める必要は無いですね。
ありがとうございます。