• 締切済み

ローカルでは動くがサーバーでは動かない・・・

メールを配信するCGIがあります。 フォームで登録するようになっているのですが、フォームで登録した際に、御礼のメールを配信したいと思って下記のようなphpを作っています。 フォームから送信されたデータを受け取り、送信者にメールを送った後、別のCGI(perl)にPOST送信するphpを作っています。 ローカルに作ったphp環境では動いたのですが、サーバーにアップロードすると下記のエラーが出て動きませんでした。 エラーメッセージ Warning: main(HTTP/Request.php): failed to open stream: No such file or directory in /home/*****/public_html/cgi/********/mail.php on line 34 メールを送信する部分は特に問題なく動いているみたいで問題はほかのcgiにPOST送信する部分にあるみたいです。初心者なのであるHPに掲載されていたコードをまる写しして必要な部分だけ変更しただけで、あまり意味は分からないままです。 /*POST送信*/ require_once "HTTP/Request.php"; $req =& new HTTP_Request("http://www.***.jp/******/cgi/**********/cgi-bin/*****.cgi"); $req->setMethod(HTTP_REQUEST_METHOD_POST); $req->addPostData("mail", "$mail"); $req->addPostData("md", "*****"); $req->addPostData("id", "**************"); if (!PEAR::isError($req->sendRequest())) { $response1 = $req->getResponseBody(); } else { $response1 = ""; } エラーメッセージにある34行目というのは require_once "HTTP/Request.php"; なのですが、どこに問題があるのでしょうか?

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

みんなの回答

  • moon_night
  • ベストアンサー率32% (598/1831)
回答No.2

単純にエラーメッセージを見て考えると、指定されたファイルが見つからないということだと思います。 http://www.***.jp/******/cgi/**********/cgi-bin/*****.cgi というURLは正しいですか? ブラウザでアドレスをたたくと表示されますか?

  • ytse
  • ベストアンサー率50% (1/2)
回答No.1

ローカルで動いていたということから、サーバ側でPEAR が使えないのかもしれませんね。 こういう場合は、手動インストールです。 HTTP_Request と Net_URL を下記のサイトで入手し、 http://pear.php.net/package/HTTP_Request http://pear.php.net/package/Net_URL / 任意の場所(ここでは絶対パス /var/www/hogehoge/ とします)に適当なディレクトリ(ここではincludeとします)を作成し、下のようなファイル構成になるようにファイルを置く。 include/HTTP/Request.php include/HTTP/Request/Listener.php include/Net/URL.php require_once "HTTP/Request.php"; より前に下記を追加 ini_set("include_path", '/var/www/hogehoge/include/' . PATH_SEPARATOR . ini_get("include_path")); でいけるかもしれません。

参考URL:
http://peardoc.xole.net/installation.manually.html

関連するQ&A

  • PEAR HTTP_Requestでのヘッダ送信

    PEARのHTTP_Requestを使用し、 下記処理にてTEST_URL向けにPOSTとヘッダを同時に送信する処理を行いたいのですが 411 Length Requiredで返ってきてしまします。 サーバのログには Invalid URI in request Connection: Keep-Alive というログがerrorログに出ています。 そこでRFCを読んで見ると、 転送コーディングが施されていない場合は Content-Length ヘッダは送られなければならないが、 メッセージボディ中のオクテット数と 正確に一致しなければならないとの記載がありました。 ここに引っかかっているのかもと思い対策しようと思いましたが メッセージボディのlength(下記の☆部分)をどのように拾うかがわかりません。 require_once "HTTP/Request.php"; $req = &new HTTP_Request(TEST_URL,array()); $req->setURL(TEST_URL); $req->setMethod(HTTP_REQUEST_METHOD_POST); $req->addHeader('Host',"test.hogehoge.jp\r\n"); $req->addHeader('Content-Length',"-☆-\r\n"); $req->addHeader('Connection', "Keep-Alive\r\n"); $req->addHeader('User-Agent',"TEST ABCDEFG\r\n"); $req->addPostData('TEST_POST', 'testnano'); $result = $req->sendRequest(); if(PEAR::isError($result)) { echo $result->getMessage(); echo "<br />"; } else { echo $req->getResponseCode(); echo "<br />"; echo $req->getResponseBody(); echo "<br />"; } もしかして違う原因でしょうか? よろしくおねがいします。

    • 締切済み
    • PHP
  • 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
  • LWPでPOST送信した後に送信先に移動したい

    LWPで別サーバーのtest.cgiに以下のようなコードで POST送信しています。 use HTTP::Request::Common; use LWP::UserAgent; $query="param1=dummy"; $ua = LWP::UserAgent->new(); $req = HTTP::Request->new(POST => "http://xxx.xxx.xxx/test.cgi"); $req -> content_type('application/x-www-form-urlencoded'); $req -> content($query); $res = $ua->request($req); $success = $res -> is_success; if(!$success){ die("error"); } $con = $res -> content; この場合、$conにtest.cgiの出力が入るだけで、 URLのhttp://xxx.xxx.xxx/test.cgiに遷移することはできません。 HTMLのformタグでPOST送信したときのように、 POSTでデータを送信してかつ、その送信先に移動するということはできるのでしょうか。 LWPでなくてもいいです。 要するにHTMLのformタグでのPOST送信を手動ではなく、自動で行いたいわけですが、 <form action="http://xxx.xxx.xxx/test.cgi" method="post"> <input type="hidden" name="param1" value="dummy"> </form> このようなタグのあるHTMLを表示して、 JavaScriptでonLoadでsubmitすればできるのですが、 JavaScriptを使っているとSSLの場合にセキュリティのアラートがでる場合があるので、 できればPerlだけでできないかと思ったのです。

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

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

    • 締切済み
    • PHP
  • mysqlのデータを変数に代入する方法

    php/mysql初心者です。かなりつたない内容になっているかもしれませんが、ご容赦ください。 過去ログで何のワードで検索したらいいかもわからなかったので質問投稿させていただきます。 データベースに入っている情報を変数に代入して POSTメソッドで送信したいと考えています。 DBからSELECTで特定の情報を取り出す ↓ 変数に代入する ↓ POSTで送信 このような流れで処理したいです。 [環境] PHP 5.2.17 MySQL 5.1.59 今書いているソースを一部抜粋します。 ------------ <?php if ($_SERVER['REQUEST_METHOD']=="POST") { require_once "Request.php"; $req =& new HTTP_Request("【送信先URL】"); $req->setMethod(HTTP_REQUEST_METHOD_POST); $connect = mysql_connect('localhost', '【DB名】', '【パスワード】'); if (!$con) { exit('データベースに接続できませんでした。'); } $result = mysql_select_db('【データベース名】', $connect); if (!$result) { exit('データベースを選択できませんでした。'); } $db = mysql_query('SELECT username FROM userinfo where id=6', $connect); $u="$db"; $req->addPostData("username", $u); $con = mysql_close($con); if (!$con) { exit('データベースとの接続を閉じられませんでした。'); } ?> ------------ ※idが6のusernameは「テスト太郎」になっています。 上記のPHPを実行すれば"userinfo"テーブル内の"id"が6の"username"が 送信されると思いましたが、実際は異なる内容が送信されます。 送信されるデータはusernameの内容ではなく "Resource data"となっています。 なぜ$uに代入した値がResource dataという内容になるのでしょうか。 初歩的な質問かもしれませんが、 ご教示の程よろしくお願いいたします。

    • ベストアンサー
    • MySQL
  • PHPのHttpRequestモジュールについて

    HttpRequestモジュールを使って以下のようなコードを書いたのですが エラーの「unexpected T_DOUBLE_ARROW 」が出てうまくいきません。 どうやら$request->setHeadersのところの連想配列でエラーが出てるようなんですが どうやれば解決するのか分からず困っています。 ---------------------------------------------------------------------------- require_once 'HTTP/Request.php'; $request = new HTTP_Request(); $request->setURL("http://example.com"); $request->setMethod(HTTP_REQUEST_METHOD_POST); $request->setHeaders("Content-Type"=>"application/x-www-form-urlencoded"); $request->setHeaders("User-Agen"=>"Opera/9.80 (Windows NT 5.1; U; ja) "); print $request->getResponseBody(); ---------------------------------------------------------------------------- http://www.php.net/manual/ja/function.httprequest-setheaders.php のマニュアルを見ても問題が無いように思えます。 どなたかお詳しいかた教えてください

    • ベストアンサー
    • PHP
  • HTTP POST によるレスポンスCGIについて

    HTTP POST によるレスポンスCGIについて いつも大変お世話になっております。 タイトルのシステムの組み方についてご質問がございます。 「内容」 決済システム会社からのリクエストに対するレスポンスを返すCGIを作成します。 「仕様」 通信方法:HTTP POST キャラクタセット:Shift-JIS text/csv(←ここの意味もわかりません) 仕様書には 「Httpリクエストに対するレスポンスとしてHTTPボディ部に記述してください」 例) 処理OKの場合:OK,    処理NGの場合:NG,既に完売済み CSV形式(カンマ区切り) とあります。 私のスキルとしては、「html」「PHP」が書ける程度です。 javaやPerlは全然分かりません。 仕様は単純かと思いますが、リクエストに対して自動でレスポンス(OKかNG)を返す仕組みが分かりません。 ご教授願いますでしょうか。

    • 締切済み
    • CGI
  • PEAR::MailでPEAR.php?

    Mailを使ってメールを送信したいのですが、エラーがでます。 Warning: require_once(PEAR.php) [function.require-once]: failed to open stream: この PEAR.php はどこで入手できるのでしょうか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • 特定の値をPOST送信で他のサーバーに渡したい

    あるPHPページを自動転送ページとし、転送先に特定の値をPOST送信したいと考えています。 同じような質問があり、fsockopenを使ってすると良いようなのですが、どうしても上手くいきません。 現状、POST送信は成功しているのですが、URLが自動転送ページのままで、転送先ページのテキストのみが表示されている状態です。 どうすれば転送先ページに完全に移ってしまえるでしょうか。 ご助力下さい。 <ソース> $url = "http://hoge.co.jp/test.php";  //転送先URL $method = "POST"; $headers = "POST http://hoge.co.jp/test.php HTTP/1.1\r\n";  //転送先URL $postdata = "parm=ok"; $URL = parse_url($url); if(!isset($URL['port'])){$URL['port'] = 80;} //リクエストヘッダ $request = $method." ".$URL['path']." HTTP/1.0\r\n"; $request .= $headers; $request .= "Host: ".$URL['host']."\r\n"; $request .= "User-Agent: PHP/".phpversion()."\r\n"; $request .= "Content-Type: application/x-www-form-urlencoded\r\n"; $request .= "Content-Length: ".strlen($postdata)."\r\n"; $request .= "\r\n"; $request .= $postdata; //相手サーバへ接続 @$fp = fsockopen($URL['host'], $URL['port']); // 接続失敗 if (!$fp) {die("ただいまメンテナンス中です。\n");} //POSTで送信 fputs($fp, $request); $response = ""; while (!feof($fp)) { $response .= fgets($fp, 4096); } fclose($fp); //ヘッダ部分とボディ部分を分離 $DATA = split("\r\n\r\n", $response, 2); //出力 echo "<!--\n".$request."\n-->\n"; echo "<!--\n".$DATA[0]."\n-->\n"; echo $DATA[1];

    • ベストアンサー
    • PHP
  • define定義について

    ■kconf.php <?php $script_neme = "sendmail.php"; ?> ■mail.php <?php require_once("conf.php"); $form = <<<EOM {$setcomments} <form action="{$script_name}" method="post"> ・ ・ ・ ・ EOM; ?> ↓↓↓↓ 以下のように定義すると フォームのソースが <form action="{SENDMAIL}" method="post">のままで送信できません。 $による定数定義ではうまくいくのですがどうしてでしょか? アドバイス下さい。 ■kconf.php <?php define("SENDMAIL", "sendmail.php"); ?> ■mail.php <?php require_once("conf.php"); $form = <<<EOM {$setcomments} <form action="{SENDMAIL}" method="post"> ・ ・ ・ ・ EOM; ?>

    • 締切済み
    • PHP

専門家に質問してみよう