他サーバーにあるファイルに書き込みを行いたい。allow url fopen関連?

このQ&Aのポイント
  • PHP5, SQLite3環境で、サーバAのPHPスクリプトからサーバBのファイルに書き込み処理をする方法について教えてください。
  • サーバAとサーバBのphp.iniの設定やファイルの書き込み権限の設定も教えてください。
  • allow url fopenなどの設定が必要で、ファイルの書き込み権限も確認が必要です。どなたか教えてください。
回答を見る
  • ベストアンサー

他サーバーにあるファイルに書き込みを行いたい。allow url fopen関連?

いつもお世話になっております。 環境:PHP5,SQLite3 サーバA…サーバBへの書き込み処理をするPHPファイルを置く サーバB…書き込みが行われるファイルを置く(ファイルが無ければ作成される) サーバAに置いたPHPスクリプトファイルで、 サーバBに置いてあるファイル(例えばPHPファイル)に書き込み処理をする場合、 PHPやサーバソフト(Apache)の設定を、 どのようにすれば良いでしょうか。 allow url fopenなどをちょこっと調べてみたのですが、 よく分かりませんでした。 サーバA、B両方のphp.iniに対し、 何らかの設定をする必要があるのでしょうか。 それとも、片方だけで良い?! また、ファイルの書き込み権限の設定も関係してくる話だと思います。 書き込み側と、書き込まれる側の権限設定(chmod)についても、 併せて教えて頂けると助かります。 どなたか、よろしくお願いします。

  • march4
  • お礼率83% (628/754)
  • PHP
  • 回答数2
  • ありがとう数3

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

WEBAPI フロントプログラムを作成して、そのプログラムにてデータの更新処理を行ってやろう、ということですね。 両方ともPHPで行うことを想定します。 AサーバのPHPスクリプトで、「fsockopen」関数などにて、BサーバのPHPスクリプトに対して、POSTを行ってやります。 BサーバはそのPOSTしてきたデータを受け取り、各ファイルやDBなどにデータを登録する、というだけですね。 fsockopen関数は、HTTP通信を行う関数で、HTMLのフォームでPOSTするように、指定したプログラムにPOSTすることが出来ます。(POSTだけでなく、GET、HEADなどのリクエストメソッドを記述できます。) fsockopen関数の便利な使い方などは別途検索して探してみてください。 色々な実装があります。

march4
質問者

お礼

>両方ともPHPで行うことを想定します。 安心致しました。笑 >AサーバのPHPスクリプトで、「fsockopen」関数などにて、 >BサーバのPHPスクリプトに対して、POSTを行ってやります。 >fsockopen関数の便利な使い方などは別途検索して探してみてください。 わかりました! 調べてみます、ありがとうございました!^^

その他の回答 (1)

回答No.1

人力検索はてなにて、同様な内容の質問がありました。 http://q.hatena.ne.jp/1234887784 allow_url_fopenがOnになっている場合に、 <?php $fp = fopen('http://example.com/hogehoge.php'); ?> などとして、ファイルを取得できますが、 これはあくまで、HTTP(ハイパーテキストトランスファープロトコル)でのアクセスなので、phpのファイル内容を取得するのではなく、PHPの実行結果を取得することになり、 fputs/fwrite関数にて、書き込みが出来るのは、HTTPヘッダのみとなります。 その為、上記URLでの回答者が言っているように、FTP関数で接続して、ファイルをFTP経由でUPするのをPHPで行うとか、SSH2関数を使って・・・とする必要があります。 そうなると、SSHでアクセスしてLinuxコマンドを、FTPコマンドをゴリゴリ記述する必要があり、手間ばかりかかってしまいますので、 2番目の方の回答の、「・リモートサーバ側にデータをやりとりするWEBAPI等を作成してそれ経由でデータのやりとりをする」 が最も良いかなと思います。

march4
質問者

お礼

hogehoge78さん、こんばんは。 早速、はてなの質問を見てきましたが、 私が思っていたよりも、大変な作業であることが分かりました。 リモートサーバのhtmlソースの取得(file_get_contents()等)のように手軽に、 ファイル自体の読み書きも出来るのかと思っていましたが、考えが甘かったようです。 で、先ほどの質問ページの中の話に戻りますが、 1番目の回答者の方法は力業、 2番目の回答者の方法は実際的、 そんな印象でした。 ただ、残念なことに、2番目の方が挙げられている方法はどれも、 私にはよく分かりませんでした。笑 >「・リモートサーバ側にデータをやりとりするWEBAPI等を作成してそれ経由でデータのやりとりをする」 「WEBAPI等を作成」 これは具体的には、どういうことでしょうか。 APIという言葉もモヤモヤ(これについてはネットで調べました)、 作成方法もモヤモヤ(こちらについては謎のままで、作成言語はJAVAやC言語とかなのでしょうか?)、 という感じです。 場合によっては、既成のWEBAPIを利用したり?! ※ちなみに、私はPHPくらいしか扱えません。苦笑 どのくらい敷居が高いことをしようとしているのか、 それすらよく分からない状況にあります。 やっぱり、まだ私には難しいのかな~。笑

関連するQ&A

  • fopenがURL指定で開けない

    別サーバーにあるwmvファイルをDLさせようとしているのですが、以下のWarningが出てURL指定でfopenで開けません。 Warning: php_network_getaddresses: getaddrinfo failed: name or service is not known in [URL] php.iniで、allow_url_fopen はONになっており、ファイルを同サーバー内に置いてパス指定した場合は成功するのですが。。。 3日かけて調べましたが全く手詰まりです。。 何か他に考えられる原因はありますでしょうか? すみませんがどなたか感所のある方、宜しくお願いします。<(_ _)> 環境: RedHat Linux Apache1.3.3 PHP4.3.x

    • 締切済み
    • PHP
  • allow_url_fopen=offの設定でRSSやXMLファイルを読み込みたい。

    allow_url_fopen=offの設定でRSSやXMLファイルを 読み込みたいんですがどうやったらいいかわかりません。 ご存知の方教えてください。

    • ベストアンサー
    • PHP
  • 他サーバのテキストへの書き込みができません。

    サーバから別のサーバへ書き込みがしたいのですが、 ファイルを読み込むことができません。ソースは以下になります。アクセス権限なども設定しているのですが、他にどういった問題が考えられるでしょうか? $accesstxt = "http://www.ecstee.jp/rss/login_log.txt"; $fp = fopen($accesstxt,'a'); fwrite($fp,$url.",".$time.","); fclose($fp); どうぞよろしくお願いします。

    • ベストアンサー
    • PHP
  • 他のサーバにあるphpをrequireしたい

    他のサーバにある変数を引っ張ってくる方法が分からず困っております。 (php.iniのallow_url_includeをonにすれば実行出来たのですが、  offのままで同じ結果になる方法をお教え頂きたく思います。) allow_url_includeをonにした場合には出来た方法↓ 【Aサーバ】にある「a.txt」(a.phpにすると実行出来ませんでした……) <?php $hogeA = 'テキストA'; ?> 【Bサーバ】にある「b.html」 <?php require_once ('http://www.A/a.txt'); echo $hogeA ; ?> b.htmlに「テキストA」を表させたいと考えています。 allow_url_includeを変更せずに出来る代替方法をお教え下さい。 a.phpだと実行出来なかった理由も分からないため、 よろしければこちらもお教え下さい。 よろしくお願い致します。

    • ベストアンサー
    • PHP
  • 書き込みファイルの読み込み

    PHPにて他PHPスクリプトが書き込みを行っているファイルに 対し、fopenでそのファイルを読み込みで開いても問題ありませんでしょうか? 読み込み処理中に、書き込む挙動がエラーになってしまわないか懸念してます。 Linuxサーバ PHP 4.3.10 Apache 1.3.31

    • 締切済み
    • PHP
  • allow_url_fopen=offのまま、

    allow_url_fopen=offのまま、URLの存在チェックは出来ますか? つまり、@fopen()などの代表的なものは使えなくなると思うのですが。 環境: http://www.hoge.com/(日本語版) http://www.en.hoge.com/(英語版) ※フォルダ構成は同じ。 ※ファイル名は、ほぼ同じ(たまにイレギュラーが存在する。) 日本語版ページに、英語版へのリンクを、 常に<a href="hogehoge">English</a>と表示するのではなく、 英語版のURLが存在していたら、表示する様にしたいのです。 存在しない場合には、ふつうに、English とグレーアウトさせます。

    • ベストアンサー
    • PHP
  • ファイルへの書き込みについて

    test.phpというスクリプトを作成しています。 ファイルを指定して指定文字列"ABCD"を書き込むという処理です。 =========================== $MOJIRETU="ABCD" $fp=fopen("./TEST/TEST.html", "w"); fputs($fp,$MOJIRETU); fclose($fp); =========================== という処理です。 ですが、どうしてもファイルが作成されません。 実際に書き込むファイルは存在しませんが、 マニュアルを見るとfopenはファイルが未存在の 時は作成すると書いてありました。 権限(?)の問題かと思い、test.phpを'777'に変更しましたが 作成されませんでした。 どのような問題が推測されるでしょうか? 宜しくお願いいたします。

    • ベストアンサー
    • PHP
  • file_get_contentsで外部URLファイルの読み込みの設定

    外部URLのXMLが取得したく、file_get_contentsで取得しようと思っております。 ただ、サーバマシンからですと、falseが返ってきてしまいます。 環境は、 php 4.3.9(RedhatEL4のup2dateでインストール出来るバージョン) になります。 php.iniの allow_url_fopenはOn default_socket_timeoutも60 と十分取っております。 $content = file_get_contents('http://アドレス'); でテストしますと、 私のローカル(OSX php5.2.1) で確認しますと、正常に取得出来るのですが、 RedhatEL4 php4.3.9で行いますと、 falseが返ってきてしまい、取得出来ません。 なお、サーバマシンからwgetでは取得可能です。 allow_url_fopen以外に、何か設定が必要になりますでしょうか。 アドバイスを頂けませんでしょうか。 よろしくお願いいたします。

    • 締切済み
    • PHP
  • fopenでファイルが開かない場合・・

    現在あるサーバ上で問題なく利用できるファイル関数のfopenが、別のサーバに変えたらエラーになってしまいました。 if( ( $fp = fopen( $dir.$datefile ,"w" ) ) != FALSE ){ print "OK"; exit; // fwrite( $fp , $new_data ); // @chmod( $dir.$datefile , 0755 ); } else { print "no"; exit; } 上記で else に入ってしまいます。 なにか原因があるのでしょうか、まったくわからず困っています。 どなたかご教授下さい。

    • ベストアンサー
    • PHP
  • fopenでファイルを読み込み、その取り込んだファイルを置換や修正したい。

    こんばんわ。 AというファイルにBというファイルを読みこもうと思うのですがうまくいきません。 ■a.php <?php // ファイルを読み込み専用でオープンする $fp = fopen('b.php', 'r'); // 終端に達するまでループ while (!feof($fp)) { // ファイルから一行読み込む $line = fgets($fp); // 読み込んだ行を出力する print $line; // <br>の出力 print "<br>"; } // ファイルをクローズする fclose($fp); ?> ■b.php <div class="title">コンテンツ</div> <?php $amin = 1; //最小値 $amax = 4; //最大値 $randevent = rand($amin,$amax); //値を表示 if ( $randevent == 1) echo "たちつてと"; // else if ( $randevent == 2) echo "さしすせそ"; // else if ( $randevent == 3) echo "かきくけこ"; // else if ( $randevent == 4) echo "あいうえお"; ?> と、二つのファイルはこのような内容です。 もちろんincludeやリクワイヤーで取り込めばすむのでしょうが、fopenで取り込んで表示させたいのです。 このままの文章だとPHPの構文ごとHPに表記されてしまいます。 Printにしているからでしょうか? fopenでPHPの機能ごと取り込むには方法はありませんでしょうか? includeだと取り込んだ際にPHP構文の置換や修正がきかなくて困るんです。 fopenで取り込むとPHP構文を「あいうえお」の部分を「なにぬねの」にstr_replaceで置換できると思ったのです。 a.phpの中にfopenを使いb.phpの中のPHP構文を機能させる方法はありませんか?

    • ベストアンサー
    • PHP

専門家に質問してみよう