ページ 11

fileとしてアップロードしたテキストファイルの中身を出力したい

Posted: 2006年1月26日(木) 17:22
by まこゆき
質問です。
fileとして、テキストファイルをアップロードし、その内容を展開して表示することは
可能でしょうか。

やりたいことは、テキストファイルとしてアップロードしたfileの中身を展開し、その
中身を、(もし必要なら整形済みテキストとして、あるいは改行変換を行って)html
の中に呼び出したいと言うものです。

想定しているのは、小説などの長文を、外部ファイルを指定してロードするタイプの
Javaアプレットを使用して縦書きにしているのですが、Javaアプレットなし(使用でき
ない環境等)でも、同じ内容を見れるページを設けたい、ということです。

テキストファイルのアップロードと同時に、文章自体をtextareaにコピペして入力す
れば可能でしょうけれども、ほぼ同一データを重複してアップロードするのは避けたく
思い、何かしらファイルの中身を展開する方法はないかと思い質問させていただきま
した。

いくつか調べて見ておりますが、XML/XLT上では不可能ではなさそうなのですが、な
にぶん素人な為、いまひとつ自分の環境へ適応した方法がつかめないでおります。

蛇足ですが、デザイン定義にてJavaアプレット呼び出しの定義を行い、アプレット経
由でテキストファイルを読み込んで縦書き表示を行うことは出来ております。

以上、よろしくお願いいたします。

一応調べた感じでは、このヘンでやっていることが近いのでしょうか。。。的外れでした
らすいません。
http://www.atmarkit.co.jp/bbs/phpBB/vie ... &topic=827
http://www.atmarkit.co.jp/fxml/tanpatsu ... slt06.html

Re: fileとしてアップロードしたテキストファイルの中身を出力したい

Posted: 2006年1月27日(金) 15:59
by webmaster
 webmasterです。まこゆきさん、ご質問ありがとうございます。
 非常に興味深いお話です。

 結論から書かせて頂きますと、CMS Designerには該当する機能はありません。

 現状の機能の範囲内で同様の事を実現する方法としましては、2つの方法が
あります。特に後者は難易度が高いと思いますが、ご参考までにご説明させて
頂きます。

 1つは、XSLTのdocument関数を使う方法です。
 http://www.asahi-net.or.jp/~ps8a-okzk/x ... ument.html
 document関数を使うと、外部のファイルを動的に読み込む事ができます。
 但し、読み込むことができるのはXML形式のファイルだけなので、
アップロードするファイルをXML形式に整形してからアップロードする必要があります。

コード: 全て選択

あいうえお
 と書かれたファイルを、

コード: 全て選択

<?xml version="1.0" encoding="utf-8"?>
<data>あいうえお</data>
 のように修正してからアップロードしなければなりません。

 もう一つは、ブラウザ側でjavascriptを使って読み込む方法です。
 ファイルのURLはエントリから取得できますので、それをjavascriptに渡します。
 javascriptでは、ネット上からそのファイルを読み込んで、表示します。
 javascriptを使ってファイルを読み込むには、例えば次のようなCGIと組み合わせます。
 http://www.interq.or.jp/japan/satoshi0/sample/getFile/

 ファイルをXML形式でアップロードすれば、Ajaxの手法が使えると思います。
 が、XML形式でアップロードするのであれば、前者のXSLT-document関数を
使った方が手っ取り早いかと思います。

 詳しく試している時間がなく、概念的な説明になってしまいますがご了承下さい。m(_ _)m

 あとはFlashを使うという手もあるかと思います。
 Flashが使えるのであれば、それが一番簡単かと思います。

ありがとうございます。

Posted: 2006年1月29日(日) 21:36
by まこゆき
まこゆきです。
Webmaster様、ありがとうございます。
cmsdesignerのみでは出来ないということですね。

基本的には、縦書きの場合はJavaアプレットを使用するので、文章そのものを呼び出す場合は
出来るだけ他のスクリプト等は使いたくなかったのですが、なかなか難しいようですね。
後者のcgi+javascriptの方法を検討してみます。
(UPするファイルは基本的には単なるテキストファイルなので)

ただ、実は現状アプレット側の都合で、テキストファイルがshift-jisなのです。
jconbertを使用してphpで表示する方法を使用してshift-jis-のテキストをeucにコンバートして
表示することは出来たので、コレを使おうかと思ったのですが、phpに関してもあまり詳しいわけではないので試行錯誤しつつテストしてみます。(セキュリティ的なこととかも考えたほうがよいでしょうし。。)

参考にさせていただきます。またうまくいきましたら結果報告いたします。

方法としてどうなのか少々微妙ですが

Posted: 2006年1月30日(月) 00:01
by まこゆき
このような方法でやってみました。
セキュリティ的にちょっとどうかと思う部分もなくはないので、一応暫定ですが。
ただどの道、もとのテキストファイルへの相対パスを何らかの形で書かなくてはならないので
この方法でやらざるを得ないのかなぁというところです。
まず、以下のようなphpプログラムを書いておいて(名前はtest.php)

コード: 全て選択

<?php
require_once("jcode.php");
$lines=file($_REQUEST['filename'] );
foreach($lines as $l) {
echo JcodeConvert($l, 2, 1) . "<br>\n";
}
?>
コレに対してデザイン定義側で(だいぶ強引ですが)こんな感じにリストを定義して

コード: 全て選択

<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  <xsl:output method="html" encoding="EUC-JP" omit-xml-declaration="yes" />
  <xsl:template match="/entrylist">
    <xsl:for-each select="entry">
      <a href="test.php?filename=../../cmsdesigner/data/entry/sonzai_poem/{poem/@src}"><xsl:value-of select="title" disable-output-escaping="yes" /></a>
     </xsl:for-each>
  </xsl:template>
</xsl:stylesheet>
そして呼び出してあげるという形にして見ました。
一応テストした結果は以下です。
http://www.fnow.org/sonzainohi/test/index.php
だいぶ強引ですね。。。
sonzai_poemがschema名、index.phpが呼び出し元で、test.phpが一覧表示です。
index2.phpのほうでも同じように{poem@src}でファイルを呼び出してます。

cmsdesignerのdataディレクトリ配下のファイルを直接指定しているのであまりいいやり方ではないかもしれません。

「こうしたほうがいい」であるとか、「こうすべき」であるとか、もっとうまいやり方がありましたらご意見いただけますと幸いです。

追記というか一応

Posted: 2006年1月30日(月) 00:05
by まこゆき
あまりphpに詳しくないので、よそから
http://www.spencernetwork.org/

の漢字コード変換スクリプトを持ってきて、test.phpのカレントディれクリに置いています。
(元がShift-JISのファイルをeucで呼び出したいため)

Re: 追記というか一応

Posted: 2006年2月01日(水) 16:56
by webmaster
 まこゆきさん、すいません、この記事に気づくのが遅くなりました。

 今回行っていただいた内容は非常に高度で、もはや弊社からは何もいうことは
ございません。(^^;
 ここまで使い倒して頂けて光栄です。

 PHPに不慣れとのことで、いちおう、mb_convert_encoding 関数をご紹介
しておきます。
 http://www.php.net/manual/ja/function.m ... coding.php

 しかし、現時点でうまく行っているのであれば特に問題ないと思います。

 以上、また何かありましたらいつでもご連絡下さい。m(_ _)m