Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 如何打开符号链接_Perl_Logging_Apache2 - Fatal编程技术网

Perl 如何打开符号链接

Perl 如何打开符号链接,perl,logging,apache2,Perl,Logging,Apache2,我需要重新编程一些PHP和ISPConfig CP的shell脚本,以便与其他一些技术一起使用 对于日志旋转,它使用名为vlogger的脚本。我让它运行,但一个打开日志文件的函数给了我错误 没有这样的文件或目录无法在/usr/local/ispconfig/server/scripts/vlogger第447行第2行打开/var/www/website_name/log/20170623-access.log 奇怪的是,它写入文件,但给出了或die()中的错误 $vhost变量通常是网站名称/l

我需要重新编程一些PHP和ISPConfig CP的shell脚本,以便与其他一些技术一起使用

对于日志旋转,它使用名为
vlogger
的脚本。我让它运行,但一个打开日志文件的函数给了我错误

没有这样的文件或目录无法在/usr/local/ispconfig/server/scripts/vlogger第447行第2行打开/var/www/website_name/log/20170623-access.log

奇怪的是,它写入文件,但给出了
或die()中的错误

$vhost
变量通常是
网站名称/log/
。在更改之前,
website\u name
是一个目录,但现在它是一个符号链接,链接到
client/website1/
目录所在的位置


如何重写此函数,使其忽略
$vhost
是一个符号链接,或是其他什么可能导致此问题?

您正在使用
打开
调用的文件句柄覆盖
$vhost
。这意味着您的
打开
将工作一次,您可以写入
$vhost
,但下次尝试打开日志文件时,
$vhost
不再包含目录路径,并且
打开
将失败

您还应该使用三参数形式的
open
,如下所示

my $log_file = $vhost . time2str( $TEMPLATE, time() );

open my $log_fh, '>>', $log_file
    or die qq{Unable to open "$log_file" for appending: $!};

print $log_fh ...;

您正在使用
open
调用中的文件句柄覆盖
$vhost
。这意味着您的
打开
将工作一次,您可以写入
$vhost
,但下次尝试打开日志文件时,
$vhost
不再包含目录路径,并且
打开
将失败

您还应该使用三参数形式的
open
,如下所示

my $log_file = $vhost . time2str( $TEMPLATE, time() );

open my $log_fh, '>>', $log_file
    or die qq{Unable to open "$log_file" for appending: $!};

print $log_fh ...;

您应该添加
$以显示错误消息。这就是系统返回的错误。它将有助于发现问题。或者以信息性的方式检查
open
上的哪个死亡。添加$!给了我同样的错误。“没有这样的文件或目录不能在/usr/local/ispconfig/server/scripts/vlogger第447行第2行打开/var/www/website_name/log/20170623-access.log。”
perl-MData::Dumper-e'print Dumper[-d,-w]for pop'/var/www/website_name/log/
I da,
${vhost}
nije isto-kao I
$LOGDIR
您应该添加
$以显示错误消息。这就是系统返回的错误。它将有助于发现问题。或者以信息性的方式检查
open
上的哪个死亡。添加$!给了我同样的错误。“没有这样的文件或目录不能在/usr/local/ispconfig/server/scripts/vlogger第447行第2行打开/var/www/website_name/log/20170623-access.log。”
perl-MData::Dumper-e'print Dumper[-d,-w]for pop'/var/www/website_name/log/
I da,
${vhost}
nije isto-kao I
$LOGDIR
这会在日志中出现一个新错误:“全局符号“$log\u文件”要求在/usr/local/ispconfig/server/scripts/vlogger第454行显示包名(您是否忘记声明“my$log\u文件”)。哦,我从来没有用perl编程,也不知道它的语法。@Sam_slo好的,我道歉。这是我在发布代码时发现的一个问题,我认为我已经解决了。我现在已经改正了。我自己也能看到。:)您的代码可能会工作,但我不能使用它,因为整个函数中的其他代码需要$vhost才能工作。使用您的代码,我在下一个命令中得到一个错误,即它找不到文件,因为$vhost中只有“website\u name/log/”而不是使用$TEMPLATE创建的文件名的路径。无论如何谢谢你!这会在日志中出现一个新错误:“全局符号“$log_文件”要求在/usr/local/ispconfig/server/scripts/vlogger第454行显示包名(是否忘记声明“my$log_文件”)。哦,我从来没有用perl编程,也不知道它的语法。@Sam_slo好的,我道歉。这是我在发布代码时发现的一个问题,我认为我已经解决了。我现在已经改正了。我自己也能看到。:)您的代码可能会工作,但我不能使用它,因为整个函数中的其他代码需要$vhost才能工作。使用您的代码,我在下一个命令中得到一个错误,即它找不到文件,因为$vhost中只有“website\u name/log/”而不是使用$TEMPLATE创建的文件名的路径。无论如何谢谢你!