Z.com Cloud にオブジェクトアップロードできない

クラウドソーシングの依頼ネタです。

Z.com Cloud(GMOインターネットの法人向けIaaS型クラウドサービス)にファイルをアップロードするPHPプログラムを作成したが、失敗するので原因を調べて欲しいと言う内容です。

debugできれば原因は分かりそうですが、コードレビューから見つけられるか!?

オブジェクトアップロード

やりたい事のプログラミングリファレンスです。

curl -i -X PUT \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "X-Auth-Token: トークンID" \
https://object-storage.jpt1.cloud.z.com/v1/ze_テナントID/コンテナ名/ \
-T オブジェクト名

オブジェクト情報取得

この処理は正常動作しているようで、"トークンID" や “URI" に誤りはないと思うとの事です。

curl -i -X GET \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "X-Auth-Token: トークンID" \
https://object-storage.jpt1.cloud.z.com/v1/ze_テナントID/コンテナ名/オブジェクト名

問題のプログラム

$token_id = 別APIで取得した値

$filePath = 'disc/1/01.jpg';
$cfile = new CURLFile($filePath,'image/jpeg','test_name');
$params = array('image' => $cfile);
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
  'Accept:application/json',
  'Content-Type:application/json',
  'X-Auth-Token:'.$token_id,
]);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT'); // メソッド指定
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 証明書の検証を行わない
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // レスポンスを文字列で受け取る
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $params );
$result = json_decode(curl_exec($ch) , true);
curl_close($ch);

print_r($result); exit;
// ↑白紙で動かず

考察

問題プログラムから推測すると、間違いがありそうな箇所は限定されます。以下の順でチェックして行けば、問題にはたどり着けるのではないでしょうか。

$params

POSTするデータは、正しく設定されているか?

$cfile

この変数には、アップロードするファイルパスが設定されている必要がありますが、正しいか?

CURLOPT_HTTPHEADER

'X-Auth-Token:’.$token_id は、本当に正しく設定されているか?

$url

この変数には、"https://object-storage.jpt1.cloud.z.com/v1/ze_テナントID/コンテナ名/" が設定されている必要がありますが、正しいか?

参考

  • CURLFile
    https://www.php.net/manual/ja/class.curlfile.php
  • Client URL Library
    https://www.php.net/manual/ja/book.curl.php
  • json_decode
    https://www.php.net/manual/ja/function.json-decode.php

プログラム開発

Posted by iwadjp