• ベストアンサー

ファイル入出力について

postgresqlとphpを使っての課題がでているのですが途中でわからないことがあるので質問します。 ファイルの入出力の方法が分かりません。 sqlでは\copy into,\copy fromでできるのですがphpではどうすればよいか検討がつきません。インターネットでも調べたのですが少し難しく理解ができません。 あまり期限をとられていない課題ですのでしっかり理解する事ができない状態で質問するのは好ましくないと思いますが宜しくお願いします。

  • PHP
  • 回答数5
  • ありがとう数9

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

  • ベストアンサー
  • shimix
  • ベストアンサー率54% (865/1590)
回答No.5

ファイルが「w(書き込み用)」でOpenできない件ですが、パーミッションはどうなっていますか?phpの実行ユーザはApacheなので、606や666でないとダメです。ファイルが存在しない場合にはディレクトリにも707などが必要になります。

kbyshrk
質問者

お礼

なんとかできました。本当にありがとうございます。やはり今の知識だとなかなか難しいですね。でも興味がますます湧きました。

その他の回答 (4)

  • shimix
  • ベストアンサー率54% (865/1590)
回答No.4

ANo.1(&3)です。 マニュアルのサンプルを元にタブ区切りで書き出すようにしてみました。未検証ですのであしからず(汗   $pgcon = pg_connect("host=localhost dbname=publishing user=www password=foo")     or die('Could not connect: ' . pg_last_error());   $query = 'SELECT * FROM authors';   $res = pg_query($query) or die('Query failed: ' . pg_last_error());   $fp = fopen('出力するファイル名', 'w') or die('File cannot open');   while ($line = pg_fetch_array($res, null, PGSQL_ASSOC)) {     $str = '';     foreach ($line as $item) {       $str .= $item . "\t";       }     fwrite($fp, $str . PHP_EOL);     }   fclose($fp);   pg_free_result($res);   pg_close($pgcon); #typoがあったらごめんなさい&整形に日本語の空白を使っているのでコピペ注意

kbyshrk
質問者

お礼

わざわざありがとうございます。 Warning: fopen(test_info.txt) [function.fopen]: failed to open stream: Permission denied in ファイル名 on line 28 File cannot open 上記のようなエラーが出ます。自分でも一度ファイルオープンだけ試したのですがファイルが書き込みできない、開けないと出てしまいます。アクセス権は読み込み、書き込みはできるようになっているのですが…

kbyshrk
質問者

補足

<?php $fp = @fopen("ファイル名", "r"); while( ! feof( $fp ) ){ echo fgets( $fp, 9182 ) . "<br>"; } fclose($fp); ?> このプログラムですと読み込み自体はできたのでファイルはオープンできたようです。

  • shimix
  • ベストアンサー率54% (865/1590)
回答No.3

>phpを使ってデータベースの値を入出力するにはどうしたらよいかといえばよいのでしょうか… DBからの読み込みも・・ですか?マニュアルはご覧になっていますよね?   http://www.php.net/manual/ja/ref.pgsql.php サンプルソースでPostgreSQLに繋いで、データを取得している部分があると思います。サンプルはHTMLに出力していますが、代わりにファイルに書き出せばいいでしょう。方法はANo.2の例でよろしいかと。fwrite()をDBからのデータ取得のLoopに入れればいいです(前処理・後処理は当然必要です)。

  • teala
  • ベストアンサー率42% (6/14)
回答No.2

こういうことでしょうか? ●ファイルの出力 <?php $filename = "読み込むファイルの名前" print(file_get_contents($filename)); ?> ●ファイルの入力 <?php $filename = "書き込むファイルの名前"; $str = "書き込む情報"; $fp = fopen($filename, "w"); fwrite($fp, $str); fclose($fp); ?> 関係ない答えになっていたらすいません><

kbyshrk
質問者

お礼

ありがとうございます。試してみます。一番の回答して頂いた方のお礼に詳しく?捕捉しましたので見て頂けると幸いです。

  • shimix
  • ベストアンサー率54% (865/1590)
回答No.1

ファイル入出力というのは、DBじゃなくて「ファイル」の話ですよね。 #PostgreSQLなどは無関係ですね? >sqlでは\copy into,\copy fromでできるのですが 「SQLでは」ってSQLでファイルを扱うのですか?ちょっと意味がわかりません。普通のファイル入出力はこちら↓の関数を使うのですけど。   http://www.php.net/manual/ja/ref.filesystem.php

kbyshrk
質問者

お礼

早速の回答ありがとうございます。すこし慌てていたので説明が足りなかったです。 課題の内容はweb上から入力されたデータを作成したデータベースに入力し、そのあとそれらのデータをファイルにして出力する。というものなのです。 phpを使ってデータベースの値を入出力するにはどうしたらよいかといえばよいのでしょうか… 自分でも混乱しており説明がうまくいかなくてすみません。

関連するQ&A

  • oracle10gでのOSファイル入出力について

    こんにちは。初めて投稿させていただきます。 oracle database10gについて質問です。 PL/SQLでOSファイルの入出力を行う際、9iまではUTL_FILEパッケージを使用して行っていましたが、10gではそれに代わる機能があると以前になにかで小耳に挟んだことがあります。 ですが、WEBで検索しても、それらしきものを発見することが出来ませんでした・・・。 10gでPL/SQLからファイルを入出力する際にも、やはりUTL_FILEパッケージを使うしかないのでしょうか? OSはwindows32bitを想定しています。 つたない質問で申し訳ありませんが、回答お願いいたします。

  • PHPでInsertを実行したら空白のレコードが追加される

    PostgreSQL 8.0.1 PHP 4 Apache 1.3 で環境を構築しています。 PHPで、 $sql=sprintf("insert into records values('20','test2','cal')"); と入力し実行すると、きれいにDBに登録できるのですが、 $sql=sprintf("insert into records values('%s','%s','%s')",$no,$name,$address); と入力したら、DBには空白で登録されてしまいます。 何がおかしいのか検討が付かなくて困っております 宜しくお願い致します。

  • 大容量のCSVファイルをインポートするには。

    お世話になります。 Windows版のPostgreSQLをインストールしてCSVファイルを読み込ませようとしていますが途中でエラーが発生してしまい困っています。 取り込んでいるCSVファイルの件数は約65万件です。 その際に実行している下記のコマンドは以下の通りです。 SET client_encoding TO 'SJIS'; COPY T_SAMPLE FROM 'C:\test.csv' WITH CSV; また途中で発生したエラーの内容は以下の通りです。 ERROR: メモリ不足です DETAIL: 1073708532バイトを持つ文字列バッファを65534バイト多く、大きくすることができません。 CONTEXT: T_SAMPLEのCOPY。行番号 231916 どのようにしたら大容量のCSVファイルをデータベースにインポートする事ができるのでしょうか。 大変、申し訳ありませんがどうか私を助けて下さい。 些細な事でも何でも構いませんのでアドバイスいただけませんでしょうか。 私の環境のOSは「Windows Vista Ultimate」でPostgreSQLは「PostgreSQL 9.5.4」です。 何卒、宜しくお願いします。では、失礼します。

  • すでにあるsqlファイルを使用して、データベースを作成する方法

    すでにあるsqlファイルを使用して、データベースを作成する方法 もらったシステム(html,php,sqlで構成されるシステム)を自分の環境で動かそうとしているのですが、データベースを作成できないため、先に進むことが出来ず困っています。 もらったシステムには、テーブルのsqlファイルや、そのテーブルに入れるデータのsqlファイルがありました。 わかりにくい文章ですいません。 どなたかご存じの方、ご教授お願いいたします。 OS: CentOS5.3 postgresql8.1.18 apache2.2.3 php5.1.6

  • vb.netからpsqlコマンドを実行するには

    DBサーバー:Linux、Postgresql 8.4.9 クライアント:Windows7 pro、vb.net 2010 にて開発を行っております。 ■経緯 copyコマンドを使用して、クライアントにあるcsvファイルのデータを DBテーブルに一括登録したいと考えております。 まず、「COPY table FROM 'csvファイルパス' 」で試したところ、  ファイル経由のCOPY FROM、COPY TOを行うにはスーパーユーザでなければなりません  標準入出力経由のCOPYは誰でも実行可能です。またpsqlの\\copyも誰でも実行できます 旨のエラーが返ってきた為、下記の方法を考えております。 ■質問内容 psqlからのcopyにより、登録を行おうと考えている。 その際に、vb.netからpsqlコマンドの実行がそもそも可能なのかどうか、 (Linux上のpsqlコマンドなのだから、vb.netから実行できない?) 根本的なところからの質問となってしまいますが よろしくお願いいたします。 また、上記実装を開設してるサイトなどもございましたら、 ご教授願います。よろしくお願いいたします。

  • 検索結果をファイルに出力するコマンド

    SQL Server2000を使用しています。 検索結果をウィザードを使わずにファイルに書き出すにはどうしたらよいでしょうか。 My SQLだと select * from table1 into outfile 'file1.txt' のようになると思いますがSQL Serverだとどうなるでしょうか。 持っている本によるとウィザードを使用する となっていて コマンドの記載がありません。 よろしくお願いします。

  • ファイルアップロードによるPostgreSQLのデータ更新について

    OSはRedhat7.2、webサーバとしてはapache1.3.26を使用しています。 現在PHP4とPostgreSQLを使用してのwebアプリを構築中ですが、データベースへのレコード追加のことで質問があります。 テキストファイルをアップロードしデータベースに流し込むという処理をPHPから行いたいのです。 PostgreSQLに用意されているCOPYコマンドを使おうと思っていたのですがどうやらこれはPHPからは使えないらしいのです。このコマンドはPostgreSQLのスーパーユーザのみ実効可能とのことですが、DB接続時のユーザをスーパーユーザにしてもだめでした。 現在は、 echo \\\copy テーブル名 from '/tmp/$uploadfile_name' | /usr/local/pgsql/bin/psql データベース名 という文をシステム関数を使用して流すことにより処理していますが、これだとwebサーバとデータベースサーバが同じマシンじゃないとだめです。 データベースサーバとwebサーバを別のマシンにして同じような処理をするには、テキストファイルの中身を1行ずつ変数に格納して、1行ずつinsert文を発行していくしかないのでしょうか?また、この方法だと処理時間はかなりかかるのでしょうか?ちなみにテキストデータの中身は大体200行前後で一番多いときで1000行ほどです。フィールド数は70ほどです。どなたかよい方法があれば教えてください。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • 異なるmdbファイルにテーブルをSQLでコピー

    SELECT * into table1 from tabel2 のようにして、同じmdbの中でテーブルをコピーすることはできますが、 異なるmdbファイルにテーブルをSQLを使ってコピーすることはできるものですか。 #できないという回答もお待ちします。 #access2000

  • PHP+PostgreSQLを使ってPDFファイル管理DBを作成したい。

    現在、PostgreSQL+PHPでPDFファイル管理DBを作成したいと思っています。 開発環境は、 Solaris8 Apache1.3.12 PostgreSQL7.1.3 PHP-4.1.0 で行っています。 今、PostgreSQLのラージオブジェクトを使用してPDFファイルをDBに登録したいと考えております。 ここで、質問なのですがPDFファイルをDB登録するときにライブラリ等必要なものがありますでしょうか? また、PHP+PostgreSQLの環境で、PDF管理DBのサンプルがあったら教えていただけないでしょうか? よろしくお願いいたします。

    • 締切済み
    • PHP
  • insert処理でDATE型を追加したい

    環境はxp、apache2、php5、Postgresql8.2です。 1台のPCをサーバ&クライアントにしています。 ただ今PHPとPostgresqlの勉強をしています。 いつも質問に答えてくれてありがとうございます。 以下のようなテーブルに insert処理でデータを追加したいと思っています。 --------------------------- CREATE TABLE m_lecturehistory ( lecturecode text, lecturedate date, ・ ・ ・ --------------------------- $sql = "insert into m_lecturehistory (lecturecode, lecturedate ) values ('{$line[0]}','2008/1/1');"; このようにしてinsert処理をすれば正常に追加できます。 ただ、以下のようにして 変数からDATE型に追加しようとするとエラーになります。 --------------------------- $line[1] = "2008/1/1"; $sql = "insert into m_lecturehistory (lecturecode, lecturedate ) values ('{$line[0]}',"{$line[1]}");"; 対処方法をご存じでしたら、 ご教示して頂けたら幸いです。

専門家に質問してみよう