質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

607閲覧

【PHP】Zoho CRM APIで写真アップロードするためのファイル指定方法について

yoshi_10_11

総合スコア241

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2017/12/03 07:38

編集2017/12/03 09:17

PHPでアップロードするファイルを指定する方法、コードを教えて下さい。

わたしは今Zoho CRM APIを利用して、新規顧客データの登録Webフォームを実装しようとしています。
写真のアップロードについてはuploadPhotoというメソッドを利用して実装します。
メソッドの詳細は https://www.zoho.com/crm/help/api/uploadphoto.html

※Zoho CRM内にあるフォーム作成機能やZoho Formsを利用してでもWebフォームは作成可能なのですが、一部細かい点で希望する仕様に仕上げることができなかったため、APIを使用して開発しようと考えています。

リファレンスを参考に仮に以下の最低限のWebフォームを作成しました。

html

1<!DOCTYPE html> 2<html lang="ja"> 3<head> 4 <meta charset="UTF-8"> 5 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 6 <meta http-equiv="X-UA-Compatible" content="ie=edge"> 7 <title>Document</title> 8</head> 9<body> 10 11 <form action="function.php"> 12 <input type="file" name="fname"> 13 <button>送信する</button> 14 </form> 15 16</body> 17</html>

php

1<?php 2$recordId="<record Id>"; 3$ch=curl_init(); 4curl_setopt($ch,CURLOPT_HEADER,0); 5curl_setopt($ch,CURLOPT_VERBOSE,0); 6curl_setopt($ch,CURLOPT_RETURNTRANSFER,true); 7curl_setopt($ch,CURLOPT_URL,"https://crm.zoho.com/crm/private/xml/Leads/uploadPhoto?authtoken=<my authtoken>scope=crmapi"); 8curl_setopt($ch,CURLOPT_POST,true); 9$post=array("id"=>$recordId,"content"=>$_FILE['fname']); 10curl_setopt($ch,CURLOPT_POSTFIELDS,$post); 11$response=curl_exec($ch); 12echo $response; 13?>

しかし、ファイルをアップロードしてもZohoのエラーメッセージである

4424Unable to process your request. Please verify whether you have provided proper file.

という文が出てしまいます。
おそらく、PHPコード文の9行目の"content"=>●●の●●の書き方が違っていることによるエラーであると思いますので、わたしの書いた指定方法以外の適切なファイル指定の記述を教えていただきたいです。

画像のデータをパスで取得、もしくはテキスト化して取得するべきなのでしょうが、いろいろ試してみても同じエラーが出てしまいます。

リファレンスにはJavaのサンプルもありますが、Javaをまったく利用したことがないことなどからできればPHPで実装したいと考えています。

なにとぞよろしくお願いいたします。

【追記】
その他のinsertRecordsなどのZoho APIメソッドは問題なく利用できたため、IDやトークンコード、サービスなどのエラーではなく、画像指定方法次第でうまく動作するのではないかと考えております。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

最低限の所を修正してみましたが、これで動きませんか?

HTML

1<!DOCTYPE html> 2<html lang="ja"> 3<head> 4 <meta charset="UTF-8"> 5 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 6 <meta http-equiv="X-UA-Compatible" content="ie=edge"> 7 <title>Document</title> 8</head> 9<body> 10 11 <form action="function.php" method="POST" enctype="multipart/form-data"> 12 <input type="file" name="fname"> 13 <input type="submit" value="送信する"> 14 </form> 15 16</body> 17</html>

PHP

1<?php 2$recordId = time(); 3$ch=curl_init(); 4curl_setopt($ch,CURLOPT_HEADER,0); 5curl_setopt($ch,CURLOPT_VERBOSE,0); 6curl_setopt($ch,CURLOPT_RETURNTRANSFER,true); 7curl_setopt($ch,CURLOPT_URL,"https://crm.zoho.com/crm/private/xml/Leads/uploadPhoto?authtoken=XXXXXXXXXXXXX&scope=crmapi"); 8curl_setopt($ch,CURLOPT_POST,true); 9$post=array("id" => $recordId, "content" => "@" . $_FILES['fname']['tmp_name']); 10curl_setopt($ch,CURLOPT_POSTFIELDS,$post); 11$response=curl_exec($ch); 12echo $response; 13?>

投稿2017/12/03 08:58

Noll_programmer

総合スコア19

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yoshi_10_11

2017/12/03 09:06

回答ありがとうございます。 試してみたのですが、同じ4424エラーが発生しました。。。
Noll_programmer

2017/12/03 10:24

一旦tmpのファイルをサーバーに保存して、CURLFileを使って下さい。 最後にunlinkで画像は消してもらって大丈夫です。
yoshi_10_11

2017/12/03 12:10

ありがとうございます!
guest

0

最終的にNoll様に解決していただき、完成したコードを掲載します。

<?php var_dump( $_FILES['fname']['tmp_name'] ); move_uploaded_file( $_FILES['fname']['tmp_name'], $_FILES['fname']['name'] ); $recordId = <record id>; $ch=curl_init(); curl_setopt($ch,CURLOPT_HEADER,0); curl_setopt($ch,CURLOPT_VERBOSE,0); curl_setopt($ch,CURLOPT_RETURNTRANSFER,true); curl_setopt($ch,CURLOPT_SAFE_UPLOAD,true); curl_setopt($ch,CURLOPT_URL,"https://crm.zoho.com/crm/private/xml/Leads/uploadFile?authtoken=<token>&scope=crmapi"); curl_setopt($ch,CURLOPT_POST,true); $post=array("id" => $recordId, "content" => new CURLFile($_FILES['fname']['name'])); curl_setopt($ch,CURLOPT_POSTFIELDS,$post); $response=curl_exec($ch); echo $response; unlink($_FILES['fname']['name']) ?>

投稿2017/12/03 12:11

yoshi_10_11

総合スコア241

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問