in reply to Database problem

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.

Replies are listed 'Best First'.
Re^2: Database problem
by k0rn (Acolyte) on Apr 20, 2008 at 14:30 UTC
    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.
        I made a Perl script to create the databases. And now their isn't a cant find the file or directory error. But now theirs this error.

        AnyDBM_File doesn't define an EXISTS method at /home/k0rn/public_html/register.pl line 75

        this is line 74

        tie(%DBAPACHE, "AnyDBM_File", $dbapache, 0644, O_RDWR|O_CREAT) or die "Can't open $dbapache : $!\n";

        And this is line 75 were the error is from.

        unless(exists($DBAPACHE{$name})) { # Check if exists in database

        Im pretty new to Perl but i don't think that is incorrect.