あるAPIから画像のURLを取得し、それをサーバ上に保存し、その画像をphpを使ってWordPressにアイキャッチ画像として投稿するプログラムをphpで作成しました。
その作ったphpファイルに、自分でブラウザからアクセスすると、正しくWordPressにアイキャッチ画像が付いた状態で投稿されるのですが、cronを用いて同じphpファイルにアクセスし、一定時間ごとに自動投稿をしようとしたところ、なぜかアイキャッチ画像だけつかないようになってしまいました。
ちょっと調べたところ、自分でブラウザからアクセスしたときに画像用にmkdirで作成するディレクトリのパーミッションは755なのに、cronで同じプログラムを実行した場合は744になっているようです。これが原因なのでしょうか。(ディレクトリ内のjpgファイル自体は644で、どちらも同じです。)
もっといえば、本来はmkdirで777のパーミッションで作っているはずなのですが、出来上がるのは755もしくは744になってしまっています。
この自動投稿プログラムを完成させたいので、この状況の原因と解決法がおわかりになりましたら、お教えいただけませんでしょうか。
php
1// 投稿用BASIC認証用id/pass 2$username = 'hogehoge'; 3$password = 'fugafugafugafuga'; 4 5$file = $item['image-url']; 6 7$img = file_get_contents($file); 8$imginfo = pathinfo($file); 9$img_name = $item['product_id']; 10$img_directory = './images/' . $img_name . '/'; 11mkdir($img_directory, 0777); // 自分でブラウザにアクセスして実行すると755、cronでアクセスさせると744になってしまいます。 12file_put_contents($img_directory . $img_name . '.jpg', $img); 13 14$base_url = 'https://hogehoge.net/'; 15$file_name = $img_directory . $img_name . '.jpg'; 16 17$postdata = file_get_contents($file_name); 18$file_info = new finfo(FILEINFO_MIME_TYPE); 19$file_mime = $file_info->file($file_name); 20 21$request_header = [ 22 'Authorization: Basic ' . base64_encode( $username.':'.$password ), 23 'Content-Disposition: attachment; filename="%s"'. $file_name, 24 'Content-Type: ' . $file_mime, 25]; 26 27$curl = curl_init(); 28 29curl_setopt($curl, CURLOPT_URL, $base_url.'/wp-json/wp/v2/media'); 30curl_setopt($curl, CURLOPT_POST, true); 31curl_setopt($curl, CURLOPT_POSTFIELDS, $postdata); 32curl_setopt($curl, CURLOPT_HTTPHEADER, $request_header); 33curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 34 35$result = curl_exec($curl); 36 37curl_close($curl); 38$media_id = ''; 39if (!empty($result)) { 40 $media_id = json_decode($result, true)['id']; 41}
試しにmkdirをおこなった次の行でchmodコマンドを追加し、777に変更する記述を書いたのですが、無反応のようです。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/11/16 05:14
2020/11/16 05:22