解決済み

PerlでZipファイルを作りたい

  • 困ってます
  • 質問No.9597164
  • 閲覧数46
  • ありがとう数1
  • 気になる数0
  • 回答数2
  • コメント数0

お礼率 58% (31/53)

PerlでZipファイルを作りたいのですが上手くいきません。
実行すると「Internal Server Error」になります。

Perlのバージョン:5.008009
文字コードは、Shift_JIS
改行コードは、Unix(LF)、です。
サーバーは「さくら」です。(ドリームホストも試しましたがダメでした)

ファイル構成は
zip.cgi
data.txt
同じ階層に置いてます。

こちら
https://www.h-fj.com/blog/archives/2010/07/19-203224.php
のサイトを参考にさせてもらって下のように作ったのですが・・・
(print "Content-type: text/html¥n¥n";)は自分で勝手に
「いるんじゃない?」と思って付け加えました。

私、どこが間違っているのでしょうか?
よろしくお願いします。



————————————————————————————
zip.cgi
————————————————————————————
#!/usr/bin/perl

use strict;
use Archive::Zip qw( :ERROR_CODES :CONSTANTS );
my $zip = Archive::Zip->new(); # Zipのオブジェクト作成
$zip->addFile('data.txt'); # ファイルを圧縮

# Zipファイルに保存する
print "Content-type: text/html¥n¥n";

if ($zip->writeToFileNamed('test.zip') == AZ_OK) {
print "test.zip is successfully saved.¥n";
}
else {
print "test.zip save error.¥n";
}

exit;

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

  • 回答No.1

ベストアンサー率 72% (4229/5861)

ご質問のスクリプトをUTFで保存し、Windowsローカルで実行してみたところ、問題なく実行できました。
それではとサーバー上に持って行ったところ、Internal Server Error表示、あれ、でもtest.zipは作成されている?

サーバー上でスクリプトを開いたところ、円記号が円記号として表示されている…
あれ、そんな馬鹿な、サーバー上だとバックスラッシュになるはず?
と、¥を\に手打ちで打ちかえたところ、ブラウザ上に「test.zip is successfully saved.」が表示されました。

あっれー。

さくらサーバは文字コードUTF-8Nらしいので、それで保存しなおし、実行してみては…。

----

もう一つトラブル原因としては、フォルダのパーミッション。
うちはガバだったのでcgi-binフォルダに書けてしまったようですが、普通はotherの書き込み権限無いんじゃないですかね…。

zipfolder という名前でパーミッション777のフォルダを作って、zipfolder/test.zip に保存してみるとどうでしょう?
お礼コメント
nobu003

お礼率 58% (31/53)

教えていただいた通りにUTF-8に変更して実行したら
あらま、あっさりと成功しました V(⌒O⌒)V
超うれしいてです・・・

わざわざテストまでして頂きありがとうございました、
マジ感謝です。。。m(_ _)m。。。
投稿日時 - 2019-03-16 09:14:37

その他の回答 (全1件)

  • 回答No.2

ベストアンサー率 28% (1336/4689)

コンピューター カテゴリマスター
利用されているサーバでArchive::Zipモジュールは使用可能なのでしょうか。
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,500万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する

特集

ピックアップ

ページ先頭へ