• 締切済み

PHPで画像のアップについて

初歩的な問題で申し訳ありません。各店舗のホームページの掲示板にセールの書き込みをしたいのですが、テキスト部分はアップできるのですが、画像がどうしうてもできません。アドバイスをお願いします。 <?php require'HTTP/Client.php'; // コンストラクタに渡すパラメータの設定 $option = array( "timeout" => "10", // タイムアウト "allowRedirects" => true, // リダイレクトを許容するか?true/false "maxRedirects" => 3, // リダイレクトする場合の最大回数 ); // HTTPクライアントの作成 $client = new HTTP_Client($option); $posturl = "http://hogehoge.com/bbs.php"; //$imgUrl = $_POST['data']; // 送信パラメータの設定 $params = array( "title" => $_POST['title'], "file" => $_FILES['data'], "mes" => $_POST['mes'], "mode" => "write", ); // POSTリクエストの送信 $code = $client->post($posturl, $params); // レスポンスのチェック if ($code != "200") { echo "リクエスト失敗"; } // POSTリクエストに対して返って来たHTMLを出力 $response = $client->currentResponse(); echo $response["body"]; ?>

  • PHP
  • 回答数1
  • ありがとう数0

みんなの回答

  • memphis
  • ベストアンサー率40% (975/2395)
回答No.1

画像ファイをサーバに送っていないのが原因だと思います。 $_FILES['data'] で送ろうとしているようですが、 それはファイルの情報でファイルを送信していないからでしょう。

go-goo-goo
質問者

補足

memphisさんありがとうございます。 FTP権限が無いためサーバーに直接画像は送れません。 各店長が各店の掲示板にセールを書くのですが、その掲示板に一斉に書き込みたいのです。

関連するQ&A

  • PHPを用いてPOSTし、リダイレクトする方法

    お世話になります。 PHPを用いてリダイレクトさせたいのですが、リダイレクト先にはHTTPリクエストのPOSTを用いて情報を送信させる方法を教えてください。 いろいろ調べたのですが、 curl関数やfsockopen関数では、POSTでリクエストして、レスポンスが返ってくるので、望むような方法が実現できません。 なぜ、リダイレクトさせたいかというと、リダイレクト先は違うhostなので、画像やcss、formなどがうまく表示・動作できないようになってしまうためです。 送信方法として、フォームによる送信を行いますと、クライアント側に情報を埋め込んで送信するため、セキュリティ的に問題がありますので、PHPから情報を飛ばしたいと考えております。 よろしくお願いします。

    • 締切済み
    • PHP
  • PHPのHTTP/Requesをローカルでテストする方法は?

    PHP初心者なのですが、 初めてPHPのPEARパッケージにあるHTTP/Requestクラスを使って、別サーバーのAPIに対し、XMLのリクエストをし、XMLのレスポンスを受け取るやり取りをする関数を作りたいと思い、下記のような関数を作ってみたのですが、ローカル環境でどのようにテストすれば、HTTP/Requestの挙動をうまく確認できるかが思い浮かばずに、止まってしまいました。 どのようにテストすれば挙動がローカルで確認できるか、どなたか、ご教授お願いします!!! ----------- 制作した関数 引数1:リクエスト先URL、引数2: function testHttp($requestUrl,$requestXml){ $option = array( "timeout" => "3", // タイムアウトの秒数指定 "allowRedirects" => true // リダイレクトの許可 ); // HTTP_Requestの初期化 $http = new HTTP_Request($requestUrl, $option); // HTTPのヘッダー設定 $http->addHeader("User-Agent", "My PEAR PROGRAM"); $http->addHeader("Referer", $obj->protMember('LOGIN_URL')); $http->setMethod(HTTP_REQUEST_METHOD_POST); // HTTPリクエスト実行 $response = $http->sendRequest(); if (!PEAR::isError($response)) { $responseVal['resCode'] = $http->getResponseCode(); // ResponseCode $responseVal['resBody'] = $http->getResponseBody(); // ResponseBody return $responseVal; }else{ exit(); } }

    • 締切済み
    • PHP
  • phpの処理を中断する方法を教えてください。

    PEARのHTTP_Requestを用いて,指定したURLのHTMLを読み込むというプログラムをPHPで組んでいます。 一部のサイト(以下のソース内の$urlに格納したURLなど)は,サイト自体が重いせいなのか,表示にとても時間がかかってしまいます。 『表示にある一定の時間以上かかる場合は読み込みを中止したい(別処理をしたい)』のですが,どのように書けばよろしいでしょうか。 $optionでHTTP_Requestのタイムアウトを指定しても,その時間でタイムアウトしませんでした。 set_time_limit()を使って実行可能な秒数を指定しようかとも考えたのですが,読み込み中止後に別処理をしたいので,何か良い方法はないかと悩んでいます。 初歩的な問題なのかもしれませんが,開発経験が少ないため解決策がわかりません。是非宜しくお願い致します。 ------------------ソース------------------ <?php require_once "HTTP/Request.php"; $url = "http://bmw.jugem.cc/?search=%C3%E6%B9%F1&mySearch="; $option = array("timeout" => "20"); // HTTP_Requestの初期化 $http = new HTTP_Request($url, $option); // HTTPのヘッダー設定 $http->addHeader("User-Agent", "My PEAR PROGRAM"); $http->addHeader("Referer", "http://www.yahoo.co.jp/"); // HTTPリクエスト実行 $response = $http->sendRequest(); if (!PEAR::isError($response)) { $ret1 = $http->getResponseCode();// ResponseCode(200等)を取得 $ret2 = $http->getResponseHeader();// ResponseHeader(レスポンスヘッダ)を取得 $ret3 = $http->getResponseBody();// ResponseBody(レスポンステキスト)を取得 $ret4 = $http->getResponseCookies();// クッキーを取得 } echo $ret3; ?> ------------------ソース------------------

    • 締切済み
    • PHP
  • PHP PEAR OAuthのdebug

    PEARを利用してOAuthを実装しようとしています。 いくつか成功したアプリケーションもあるのですがうまくいかないこともあり、 その場合のデバッグ方法に悩んでいます。 PEAR個別の相談になってしまうとは思うのですが、ライブラリ内のメソッドでエラーが出ていないか 原因特定のためのデバッグする方法はないでしょうか? 具体的にはHTTP_OAuth_Consumer_Response::sendRequestを使った次の行で echo("test")の出力が得られず、何らかの問題がsendRequest内で起こっているのだと思います。 できるだけライブラリ自体に手を加えずにやる方法はないでしょうか? このメソッドの参考URL http://pear.php.net/package/HTTP_OAuth/docs/latest/HTTP_OAuth/HTTP_OAuth_Consumer.html#methodsendRequest メソッドの内容 public function sendRequest($url, array $additional = array(), $method = 'POST') 239 { 240 $params = array( 241 'oauth_consumer_key' => $this->key, 242 'oauth_signature_method' => $this->getSignatureMethod() 243 ); 244 245 if ($this->getToken()) { 246 $params['oauth_token'] = $this->getToken(); 247 } 248 249 $params = array_merge($additional, $params); 250 251 $req = clone $this->getOAuthConsumerRequest(); 252 253 $req->setUrl($url); 254 $req->setMethod($method); 255 $req->setSecrets($this->getSecrets()); 256 $req->setParameters($params); 257 $this->lastResponse = $req->send(); 258 $this->lastRequest = $req; 259 260 return $this->lastResponse; 261 }

    • 締切済み
    • PHP
  • PHP stream_context_creat

    今日は、 境内のメソッドについて質問があります。 以下のスクリプトについてですが、 <?php //POSTする送信データ $postData = array ( "key_01" => "POST送信データ01&", "key_02" => "POST送信データ02&", ); //送信するデータをURLエンコードする $postData = http_build_query($postData); $header = array( "http" => array( //(1) "method" => "POST", //(2) "header" => "Content-type: application/x-www-form-urlencoded\r\nuser_name: testuser_name", //(3) "content" => $postData //(4) ) ); //上記headerという変数からHTTPリクエストのストリームを作成する $request = stream_context_create($header); $res = file_get_contents("http://localhost/stream02.php",false,$request); print $res; 上記のようなスクリプにおける、ストリームというのはいわゆるクライアント側から サーバー側へ送信するHTTPリクエストと同義のものでしょうか? であればHTTPレスポンスのようにそのヘッダーの中身を取得する getallheaders()というような感じで、実際に、送信されるHTTPリクエストの 中身を視認したいのですが可能でしょうか? 以下サイトの http://www.tohoho-web.com/ex/http.htm HTTPサンプルのように取得したいのですが・・・。 また、冒頭に記述したスクリプトですが php.iniのallow_url_fopenの箇所がonになっていないと実行できないことは 確認したのですが、もし仮にallow_url_fopenがOffになっていた場合、 上記のようにストリームと呼ばれるものを使ってHTMLフォーム以外でPOSTリクエスト したい場合は何か方法があるのでしょうか? 通常であればPEARのHTTP_Requestとかで処理するかと存じますが、 PHPの組み込み関数のみでやる場合、他に方法ってありますか? 識者の方ご教授ください。

    • ベストアンサー
    • PHP
  • PHP初心者です。どうしてもエラーが出てしまいます。プログラマさんお願いします!!

    初めまして。閲覧ありがとうございます。 PHPを勉強中の素人です。 「Twitter」のBOTを何とか作りたいと思い、PHPを勉強しつつPHPのソースを公開している方を参考にさせて頂きながら何とか組んでみたのですが、どうしてもエラーが出てしまい動かせません。 構文エラーということは分かるのですが、何処がおかしいのか、分かる方は教えて頂けないでしょうか?初心者丸出しの質問で申し訳ありません。 長いのですがソースを書きます。 <?php require_once 'HTTP/Client.php'; //自分のタイムラインを所得 $username = "ユーザー名"; $password = "パス"; $page = "statuses/friends_timeline.xml"; $basic = array('Authorization'=>'Basic '.base64_encode($username.':'.$password)); $client = new HTTP_Client(null, $basic); $client->get("http://twitter.com/".$page ); $response = $client->currentResponse(); $body = mb_convert_encoding($response['body'], "EUC-JP","auto"); $xml = new SimpleXMLElement($body); //ランダム発言を定義 $msg_pattern = array( "[someone]発言0", "[someone]発言1", "[someone]発言2", "[someone]発言3", "[someone]発言4", ); if($xml) { //var_dump ($xml); //該当する最新5件の発言を取得 for($i=0;$i<5;$i++){ $post_member = (string)$xml->entry[$i]->title; $post_date = $xml->entry[$i]->updated; //発言時刻を取得し、タイムスタンプに // 32400はGMTと日本時間とのズレ(9時間) $date_array = array(); $rcd = mbereg("^([0-9]{4}).([0-9]{2}).([0-9]{2})T([0-9]{2}).([0-9]{2}).([0-9]{2})Z$",$post_date,$date_array); $post_time = 32400 + mktime($date_array[4],$date_array[5],$date_array[6],$date_array[2],$date_array[3],$date_array[1]); //発言の経過時間 $pasttime = $now_time - $post_time; //発動は15分以内の発言に対して if($pasttime > 0 && $pasttime < 900 && !array_search($post_member,$followed)){ $tofollow = "@".$post_member." "; //発言をランダムで選択、相手の名前を置換 $msg = preg_replace("[\[someone\",$tofollow,$msg_pattern[mt_rand(0,count($msg_pattern)-1)]); //twitterへの書き込み $params = "status=". rawurlencode($msg); $result = file_get_contents($url.$params , false, stream_context_create(array( "http" => array( "method" => "POST", "header" => "Authorization: Basic ". base64_encode($username. ":". $password) ) ))); // array_push($followed,$post_member); } } }else{ return; } ?>

    • 締切済み
    • PHP
  • tmhOAuthでtwitterに画像投稿

    tmhOAuthとTwitterAPIを使ってサーバーに保存してある画像をtwitterに投稿したいと考えています。 tmhOAuthを使ってつぶやき(文字列)の投稿は成功しています。 画像の投稿になるとうまく行きません。ウェブ上で情報を探せるだけ探して数日間トライしてみましたが、どれも成功には至りませんでした。 「開発環境」 PHP:5.5 Cakephp:2.5 function test(){ $twConf = array( 'consumer_key' => 'xxxxxxxxxxxxxxxxxxxxxxx', 'consumer_secret' => 'xxxxxxxxxxxxxxxxxxxxxxx', 'user_token' => 'xxxxxxxxxxxxxxxxxxxxxxx', 'user_secret' => 'xxxxxxxxxxxxxxxxxxxxxxx', 'curl_ssl_verifypeer' => false, ); $tmhOAuth = new tmhOAuth($twConf); $image ='http://www.example.com/img/test.jpg'; $message='hoge hoge'; $params = array( 'media[]' => "@{$image}", 'status' => "{$message}" ); $code = $tmhOAuth->request('POST', $endpoint, $params, true, true); if ($tmhOAuth->response["code"] == 200){ var_dump($tmhOAuth->response["response"]); } else { var_dump($tmhOAuth->response["error"]); } } このソースを実行するとエラーレスポンスが返らずに$codeの中身は403となります。 (何かのエラーが返ってきているようです) 上記のやり方以外にも ---------------------------------------------------------------- $file = 'http://www.example.com/img/test.jpg'; $image = file_get_contents( $file ); $imagesize = getimagesize( $file ); $content_base64 = base64_encode($image); $api_url = 'https://api.twitter.com/1.1/statuses/update_with_media.json'; $params = array( 'status' => $message, 'media[]' => $content_base64 . ";type=" . $imagesize['mime'] . ";filename=" . basename( $file ), ); ---------------------------------------------------------------- という方法を行ってみましたが、エラーが「0」という形で返ってきてしまいます。 twitter developersのwebsite・Callback URLは自分のドメイン名を設定しています。アクセスレベルは「Read and write」です。 文字の投稿はできているので、$params 周辺の記載に問題があると考えています。 TwitterAPI関係に詳しい方がおられましたら、よい方法を教えていただければと思います。 宜しくお願い致します。

    • 締切済み
    • PHP
  • PHP

    PHPで下のPHPが読み込まれません。なぜでしょうか? <?php: $result = array(); $path = '/etc/cron.d/autopbxrestart'; $handle = fopen($path, 'r'); while(false !== ($line = fgets($handle))){ list($fun, $jikan, $hi, $tuki,$youbi) = explode(' ', $line); $result{0} = $fun; $result{1} = $jikan; $result{2} = $hi; $result{3} = $tuki; $result[4] = $youbi; echo $result{0}; echo $result{1}; echo $result{2}; echo $result[3]; echo $result[4]; fclose($handle); } ?> <php if ($_SERVER['REQUEST_METHOD'] === 'POST') { $erandayoubi = $_POST['youbi']; foreach($erandayoubi as $youbi){ echo ' '. $youbi. '曜日 '; } echo $_POST['jikan']. "jikan".POST['fun']. "分 実行有無:[".$_POST['opt']. "]を設定しました。"; ?>

    • ベストアンサー
    • PHP
  • PHP タイムスタンプ

    タイムスタンプで値を取得して、比較するプログラムなのですが、なぜか $time = mktime(0, 0, $_POST['hh'], $_POST['dd'], $_POST['mm'], $_POST['yyyy']); の値が”-1”で返ってきてしまいます。 何故でしょうか? <?php echo "<select name=\"yyyy\">"; for ($i = 2010; $i < 2012; $i++) { $selected=$i==$_REQUEST["yyyy"]?" selected":""; echo "<option value=\"{$i}\"{$selected}>{$i}</option>\n"; } echo "</select> 年 "; echo "<select name=\"mm\">"; for ($i = 1; $i < 13; $i++) { $selected=$i==$_REQUEST["mm"]?" selected":""; echo "<option value=\"{$i}\"{$selected}>{$i}</option>\n"; } echo "</select> 月 "; echo "<select name=\"dd\">"; for ($i = 1; $i < 32; $i++) { $selected=$i==$_REQUEST["dd"]?" selected":""; echo "<option value=\"{$i}\"{$selected}>{$i}</option>\n"; } echo "</select> 日 "; echo "<select name=\"hh\">"; for ($i = 0; $i < 24; $i++) { $selected=$i==$_REQUEST["hh"]?" selected":""; echo "<option value=\"{$i}\"{$selected}>{$i}</option>\n"; } echo "</select> 時 <br />"; $time = mktime(0, 0, $_POST['hh'], $_POST['dd'], $_POST['mm'], $_POST['yyyy']);

    • ベストアンサー
    • PHP
  • PHPでバックグランド処理について

    PHPでバックグランドで処理させたいと考えています。 300通前後のメールを一括送信するために、この送信処理をバックグランドで処理させたいと考えています。 色々調べて、 system()関数とexec関数を知りました。 しかし、動きが上手くいきません。解決策や糸口をご教授頂けないでしょうか? メールを送るファイル: back.php フロントで実行するファイル:mai.php で下記の様に書きました。 back.php <?php require_once('Mail.php'); $params = array( "host" => "smtp.gmail.com", "port" => 587, "auth" => true, "username" => "****@gmail.com", "password" => "****" ); $mailObj = Mail::factory("smtp",$params); mb_language('ja'); mb_internal_encoding('utf-8'); $rec ='**_com2@yahoo.co.jp'; $header = array( "To"=>$rec, "From"=>"admin@**-terakoya.jp", "Subject"=>mb_encode_mimeheader('これは件名') ); $com = 'メール本文'; $com = mb_convert_encoding($com,"UTF-8","auto"); $mes =$mailObj -> send($rec,$header,$com); if(PEAR::isError($mes)){ echo '<pre>'; var_dump($mes->getMessage()); echo '</pre>'; } ?> 実行するファイル mail.php var_dump(system("php www/htdocs/ac/back.php > /dev/null &")); です。 パスの指定方法が問題なのかもしれないと思い色々試してみましたが最終的には無理でした。 ちなみに、本番サーバーの環境とXampp環境では何か違う方法が必要なのでしょうか? 上記例は、本番サーバーで記述した物です。 どうぞご教授お願いします。

    • ベストアンサー
    • PHP

専門家に質問してみよう