k0rn has asked for the wisdom of the Perl Monks concerning the following question:

The DB's were made with dbmmanage. The error i get in the logs is Can't open /home/k0rn/data/dbapache : Invalid argument, From this line of code. tie(%DBAPACHE, "AnyDBM_File", $dbapache, 1, 0) or die "Can't open $dbapache : $!\n"; and i dont see whats wrong with that. If anyone could help that would be great.

Replies are listed 'Best First'.
Re: Database problem
by tachyon-II (Chaplain) on Apr 20, 2008 at 04:41 UTC

    Like the error says you have an invalid argument (either the flags or the mode (args 4 and 5). If you look in the source of dbmmanage.pl (in your apache/bin dir) you will see

    my ($mode, $flags) = $command =~ /^(?:view|check)$/ ? (0644, O_RDONLY) : (0644, O_RDWR|O_CREAT); tie(%DB, "AnyDBMFile", $file, $flags, $mode); # so you want something like: use Fcntl; # this is where the O_RDWR O_CREAT O_RDONLY etc flags live tie(%DBAPACHE, "AnyDBM_File", $dbapache, 0644, O_RDWR|O_CREAT);

    I appreciate your use of the flags and mode args 1,0 follows the Perl documentation but sometimes it pays to RTFS. If you are from *nix you will recognise 0644 as a standard octal format read/write, read, read permissions statement. You may like to need use 0666 in certain circumstances (like if you get write permission denied). The modes O_R(ea)DONLY, O_R(ea)DWR(ite), O_CREAT(e) are bitmasks so you binary OR them together to get whatever combination you want.

      Thank you that took care of the invalid argument error. But now i have this error

      Can't open /home/k0rn/data/dbapache : No such file or directory

      Also get this error but have had this for awhile

      Premature end of script headers: register.pl,

      That problem is from header sub routine im asumeing. Witch is this

      # Header subroutine

      sub HEADER {
      my($title) = @_;
      print <<EOT;
      <HTML>
      <HEAD>
      <TITLE>$title</TITLE>
      </HEAD>
      <body bgcolor="#263C6D" text="white" link="#ffffff"
      vlink="#C0C0C0" alink="#C0C0C0">


      EOT
      }


      When the file and directory is their. I don't get that. But thank you on your help. I noticed those modes in my Perl books and so fourth but didn't think it was nessicary. Apparently i was wrong heh.
        Can't open /home/k0rn/data/dbapache : No such file or directory
        This error message is clear enough. Does the file actually exist?
        Premature end of script headers: register.pl
        This usually means that the CGI died before completing its task, as in the case of the other message above. Please, note the tie ... or die ... construct will abort the execution of the CGI if anything goes wrong with the tie.