アプリ版:「スタンプのみでお礼する」機能のリリースについて

このコードを使うとエラーが出ます。PHP4の環境では問題なかったのですが、PHP5にしたとたんエラーが出てコードが動きません。このコードは指定のファイルをブラウザでダウンンロードできるスクリプトです。

プログラミング素人なのでどう直したらま動くようになりますか???

#!/usr/bin/perl -wT

use CGI ':standard';
use CGI::Carp qw(fatalsToBrowser);

my $files_location;
my $ID;
my @fileholder;

$files_location = "/home/user/public_html/static/file";

$ID = param('ID');

if ($ID eq '') {
print "Content-type: text/html\n\n";
print "You must specify a file to download.";
} else {

open(DLFILE, "<$files_location/$ID") || Error('open', 'file');
@fileholder = <DLFILE>;
close (DLFILE) || Error ('close', 'file');

open (LOG, ">>//home/user/public_html/dl.log") || Error('open', 'file');
print LOG "$ID\n";
close (LOG);

print "Content-Type:application/x-download\n";
print "Content-Disposition:attachment;filename=$ID\n\n";
print @fileholder
}

sub Error {
print "Content-type: text/html\n\n";
print "The server can't $_[0] the $_[1]: $! \n";
exit;
}

A 回答 (5件)

これぐらいなら、自動でなく人力でコンバートできるでしょ。


変換表は
http://www.cs.wcupa.edu/~rkline/perl2php/
でみつけました。
ちゃちゃと書き換えると
<?php
/*
#!/usr/bin/perl -wT
use CGI ':standard';
use CGI::Carp qw(fatalsToBrowser);
my $files_location;
my $ID;
my @fileholder;
*/
$files_location = "/home/user/public_html/static/file";
if ($ID == '') {
header("Content-type:text/html");
print "You must specify a file to download.";
}else {
$DLFILE = fopen("$files_location" . "/" . $ID, "r");
if($DLFILE){
$i=0;
while (!feof($DLFILE)) {
$fileholder[$i] = fgets($DLFILE);
i++;
}
fclose($DLFILE);
}else {
Error('open', 'file')
}
$LOG = fopen("//home/user/public_html/dl.log", "a+");
if($LOG){
fwrite($LOG,"$ID" . "\n");
fclose ($LOG);
}else{
Error('open', 'file');
}
header("Content-Type:application/x-download");
header("Content-Disposition:attachment;filename=" . $ID);
for($i=0;$i<count($fileholder);i++){
print $fileholder[$i];
}
}
function Error($_[0],$_[1]){
header("Content-type:text/html");
print "The server can't" . $_[0] . " the " . $_[1] . " !\n";
die;
}
?>
こんな感じになるので、デバッグしてね。

この回答への補足

変換までして頂いて、ありがとうございます!初心者なのでとてもたすかりあます!

補足日時:2009/06/28 14:11
    • good
    • 0

ANo.2です。



補足説明ありがとうございました。
起こった現象について、私の知識・経験からでは回答を差し上げることはできそうにないです。
とりあえず、動かなくなったPerlスクリプトをどうにかするために、Perlのカテゴリで質問してみてはいかがでしょうか(その際はエラーの内容も貼り付けた方がよいでしょう)。
その中でこの現象についての原因が明らかになるかもしれません。

この回答への補足

ありがとうございます。やってみます!

補足日時:2009/06/28 14:10
    • good
    • 0

No3補足


大事なのが抜けてました。
$ID = param('ID');てのは、おそらく
$ID = $_REQUEST["ID"];
ですね。
    • good
    • 0

PHPをバージョンアップしたらPerlのコードが動かなくなったということですか?


それとも別のサーバに移行したとかそういうことでしょうか。

この回答への補足

はいその通りです!PHP5にしたら何故か動かなくなりました

補足日時:2009/06/25 19:31
    • good
    • 0

「perlからphpへの自動変換」で検索してみればいかがでしょう

この回答への補足

検索してみました。自動変換してくれそうなページは見当たりません。私のミスかもしれませんが。。。

補足日時:2009/06/24 13:15
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!