-2

I am running a script from cron that backs up an MSSQL database to disk.

The script runs successfully when I copy, and paste the code into an interactive php shell - ie "php -a"

The script fails when it is being executed from the command line. It doesn't matter if it's run directly, or as an input file "php -f" or from cron. I can run the script as root, or an unprivileged user. The results are the same. It appears to fail because the PDO driver does not load in that context.

edit: successful interactive, and failed non-interactive tests are using the same php.ini file

Any insight would be much appreciated.

Thanks.

ERROR:

    Fatal error: Uncaught Error: Class 'PDO' not found in /usr/local/username/scripts/backupmssqldb.php:4
    Stack trace:
    #0 {main}
    thrown in /usr/local/username/scripts/backupmssqldb.php on line 4

SCRIPT:

    #!/usr/bin/php
    <?php
    $msdb = new PDO("dblib:host=host;dbname=DATABASE","username",'password');$msdb->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $stmt = $msdb->prepare("
    DECLARE @path VARCHAR(500)
    DECLARE @name VARCHAR(500)
    DECLARE @pathwithname VARCHAR(500)
    DECLARE @time DATETIME
    DECLARE @year VARCHAR(4)
    DECLARE @month VARCHAR(2)
    DECLARE @day VARCHAR(2)
    DECLARE @hour VARCHAR(2)
    DECLARE @minute VARCHAR(2)
    DECLARE @second VARCHAR(2)
    SET @path = 'c:\sqldata\SQLBACKUPS\'
    SELECT @time   = GETDATE()
    SELECT @year   = (SELECT CONVERT(VARCHAR(4), DATEPART(yy, @time)))
    SELECT @month  = (SELECT CONVERT(VARCHAR(2), FORMAT(DATEPART(mm,@time),'00')))
    SELECT @day    = (SELECT CONVERT(VARCHAR(2), FORMAT(DATEPART(dd,@time),'00')))
    SELECT @hour   = (SELECT CONVERT(VARCHAR(2), FORMAT(DATEPART(hh,@time),'00')))
    SELECT @minute = (SELECT CONVERT(VARCHAR(2), FORMAT(DATEPART(mi,@time),'00')))
    SELECT @second = (SELECT CONVERT(VARCHAR(2), FORMAT(DATEPART(ss,@time),'00')))
    SELECT @name ='FILENAE' + '_' + @year + @month + @day + @hour + @minute + @second
    SET @pathwithname = @path + @name + '.bak'
    BACKUP DATABASE [DATABASE] TO DISK = @pathwithname WITH NOFORMAT, NOINIT, SKIP, REWIND, NOUNLOAD, STATS = 10");
    $stmt->execute();

    //$stmt = $msdb->prepare("dbcc shrinkfile (DATABASE_Log,1)");
    //$stmt->execute();
    ?>

Output from phpinfo(); in script:

    phpinfo()
    PHP Version => 7.2.15-0ubuntu0.18.04.2

    System => Linux **MASKED**HH 4.18.0-17-generic #18~18.04.1-Ubuntu SMP Fri Mar 15 15:27:12 UTC 2019 x86_64
    Build Date => Mar 22 2019 17:05:14
    Server API => Command Line Interface
    Virtual Directory Support => disabled
    Configuration File (php.ini) Path => /etc/php/7.2/cli
    Loaded Configuration File => (none)
    Scan this dir for additional .ini files => (none)
    Additional .ini files parsed => (none)
    PHP API => 20170718
    PHP Extension => 20170718
    Zend Extension => 320170718
    Zend Extension Build => API320170718,NTS
    PHP Extension Build => API20170718,NTS
    Debug Build => no
    Thread Safety => disabled
    Zend Signal Handling => enabled
    Zend Memory Manager => enabled
    Zend Multibyte Support => disabled
    IPv6 Support => enabled
    DTrace Support => available, disabled

    Registered PHP Streams => https, ftps, compress.zlib, php, file, glob, data, http, ftp
    Registered Stream Socket Transports => tcp, udp, unix, udg, ssl, tls, tlsv1.0, tlsv1.1, tlsv1.2
    Registered Stream Filters => zlib.*, string.rot13, string.toupper, string.tolower, string.strip_tags, convert.*, consumed, dechunk

    This program makes use of the Zend Scripting Language Engine:
    Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies


     _______________________________________________________________________


    Configuration

    Core

    PHP Version => 7.2.15-0ubuntu0.18.04.2

    Directive => Local Value => Master Value
    allow_url_fopen => On => On
    allow_url_include => Off => Off
    arg_separator.input => & => &
    arg_separator.output => & => &
    auto_append_file => no value => no value
    auto_globals_jit => On => On
    auto_prepend_file => no value => no value
    browscap => no value => no value
    default_charset => UTF-8 => UTF-8
    default_mimetype => text/html => text/html
    disable_classes => no value => no value
    disable_functions => no value => no value
    display_errors => STDOUT => STDOUT
    display_startup_errors => Off => Off
    doc_root => no value => no value
    docref_ext => no value => no value
    docref_root => no value => no value
    enable_dl => On => On
    enable_post_data_reading => On => On
    error_append_string => no value => no value
    error_log => no value => no value
    error_prepend_string => no value => no value
    error_reporting => no value => no value
    expose_php => On => On
    extension_dir => /usr/lib/php/20170718 => /usr/lib/php/20170718
    file_uploads => On => On
    hard_timeout => 2 => 2
    highlight.comment => <font style="color: #FF8000">#FF8000</font> => <font style="color: #FF8000">#FF8000</font>
    highlight.default => <font style="color: #0000BB">#0000BB</font> => <font style="color: #0000BB">#0000BB</font>
    highlight.html => <font style="color: #000000">#000000</font> => <font style="color: #000000">#000000</font>
    highlight.keyword => <font style="color: #007700">#007700</font> => <font style="color: #007700">#007700</font>
    highlight.string => <font style="color: #DD0000">#DD0000</font> => <font style="color: #DD0000">#DD0000</font>
    html_errors => Off => Off
    ignore_repeated_errors => Off => Off
    ignore_repeated_source => Off => Off
    ignore_user_abort => Off => Off
    implicit_flush => On => On
    include_path => .:/usr/share/php => .:/usr/share/php
    input_encoding => no value => no value
    internal_encoding => no value => no value
    log_errors => Off => Off
    log_errors_max_len => 1024 => 1024
    mail.add_x_header => Off => Off
    mail.force_extra_parameters => no value => no value
    mail.log => no value => no value
    max_execution_time => 0 => 0
    max_file_uploads => 20 => 20
    max_input_nesting_level => 64 => 64
    max_input_time => -1 => -1
    max_input_vars => 1000 => 1000
    memory_limit => 128M => 128M
    open_basedir => no value => no value
    output_buffering => 0 => 0
    output_encoding => no value => no value
    output_handler => no value => no value
    post_max_size => 8M => 8M
    precision => 14 => 14
    realpath_cache_size => 4096K => 4096K
    realpath_cache_ttl => 120 => 120
    register_argc_argv => On => On
    report_memleaks => On => On
    report_zend_debug => Off => Off
    request_order => no value => no value
    sendmail_from => no value => no value
    sendmail_path => /usr/sbin/sendmail -t -i  => /usr/sbin/sendmail -t -i 
    serialize_precision => -1 => -1
    short_open_tag => On => On
    SMTP => localhost => localhost
    smtp_port => 25 => 25
    sys_temp_dir => no value => no value
    track_errors => Off => Off
    unserialize_callback_func => no value => no value
    upload_max_filesize => 2M => 2M
    upload_tmp_dir => no value => no value
    user_dir => no value => no value
    user_ini.cache_ttl => 300 => 300
    user_ini.filename => .user.ini => .user.ini
    variables_order => EGPCS => EGPCS
    xmlrpc_error_number => 0 => 0
    xmlrpc_errors => Off => Off
    zend.assertions => 1 => 1
    zend.detect_unicode => On => On
    zend.enable_gc => On => On
    zend.multibyte => Off => Off
    zend.script_encoding => no value => no value
    zend.signal_check => Off => Off

    date

    date/time support => enabled
    timelib version => 2017.09
    "Olson" Timezone Database Version => 0.system
    Timezone Database => internal
    Default timezone => America/New_York

    Directive => Local Value => Master Value
    date.default_latitude => 31.7667 => 31.7667
    date.default_longitude => 35.2333 => 35.2333
    date.sunrise_zenith => 90.583333 => 90.583333
    date.sunset_zenith => 90.583333 => 90.583333
    date.timezone => no value => no value

    filter

    Input Validation and Filtering => enabled
    Revision => $Id: 5a34caaa246b9df197f4b43af8ac66a07464fe4b $

    Directive => Local Value => Master Value
    filter.default => unsafe_raw => unsafe_raw
    filter.default_flags => no value => no value

    hash

    hash support => enabled
    Hashing Engines => md2 md4 md5 sha1 sha224 sha256 sha384 sha512/224 sha512/256 sha512 sha3-224 sha3-256 sha3-384 sha3-512 ripemd128 ripemd160 ripemd256 ripemd320 whirlpool tiger128,3 tiger160,3 tiger192,3 tiger128,4 tiger160,4 tiger192,4 snefru snefru256 gost gost-crypto adler32 crc32 crc32b fnv132 fnv1a32 fnv164 fnv1a64 joaat haval128,3 haval160,3 haval192,3 haval224,3 haval256,3 haval128,4 haval160,4 haval192,4 haval224,4 haval256,4 haval128,5 haval160,5 haval192,5 haval224,5 haval256,5 

    MHASH support => Enabled
    MHASH API Version => Emulated Support

    libxml

    libXML support => active
    libXML Compiled Version => 2.9.4
    libXML Loaded Version => 20904
    libXML streams => enabled

    openssl

    OpenSSL support => enabled
    OpenSSL Library Version => OpenSSL 1.1.0g  2 Nov 2017
    OpenSSL Header Version => OpenSSL 1.1.0g  2 Nov 2017
    Openssl default config => /usr/lib/ssl/openssl.cnf

    Directive => Local Value => Master Value
    openssl.cafile => no value => no value
    openssl.capath => no value => no value

    pcntl

    pcntl support => enabled

    pcre

    PCRE (Perl Compatible Regular Expressions) Support => enabled
    PCRE Library Version => 8.39 2016-06-14
    PCRE JIT Support => enabled

    Directive => Local Value => Master Value
    pcre.backtrack_limit => 1000000 => 1000000
    pcre.jit => 1 => 1
    pcre.recursion_limit => 100000 => 100000

    Reflection

    Reflection => enabled
    Version => $Id: f1096fbe817b0413895286a603375570e78fb553 $

    session

    Session Support => enabled
    Registered save handlers => files user 
    Registered serializer handlers => php_serialize php php_binary 

    Directive => Local Value => Master Value
    session.auto_start => Off => Off
    session.cache_expire => 180 => 180
    session.cache_limiter => nocache => nocache
    session.cookie_domain => no value => no value
    session.cookie_httponly => 0 => 0
    session.cookie_lifetime => 0 => 0
    session.cookie_path => / => /
    session.cookie_secure => 0 => 0
    session.gc_divisor => 100 => 100
    session.gc_maxlifetime => 1440 => 1440
    session.gc_probability => 1 => 1
    session.lazy_write => On => On
    session.name => PHPSESSID => PHPSESSID
    session.referer_check => no value => no value
    session.save_handler => files => files
    session.save_path => /var/lib/php/sessions => /var/lib/php/sessions
    session.serialize_handler => php => php
    session.sid_bits_per_character => 4 => 4
    session.sid_length => 32 => 32
    session.upload_progress.cleanup => On => On
    session.upload_progress.enabled => On => On
    session.upload_progress.freq => 1% => 1%
    session.upload_progress.min_freq => 1 => 1
    session.upload_progress.name => PHP_SESSION_UPLOAD_PROGRESS => PHP_SESSION_UPLOAD_PROGRESS
    session.upload_progress.prefix => upload_progress_ => upload_progress_
    session.use_cookies => 1 => 1
    session.use_only_cookies => 1 => 1
    session.use_strict_mode => 0 => 0
    session.use_trans_sid => 0 => 0

    sodium

    sodium support => enabled
    libsodium headers version => 1.0.16
    libsodium library version => 1.0.16

    SPL

    SPL support => enabled
    Interfaces => OuterIterator, RecursiveIterator, SeekableIterator, SplObserver, SplSubject
    Classes => AppendIterator, ArrayIterator, ArrayObject, BadFunctionCallException, BadMethodCallException, CachingIterator, CallbackFilterIterator, DirectoryIterator, DomainException, EmptyIterator, FilesystemIterator, FilterIterator, GlobIterator, InfiniteIterator, InvalidArgumentException, IteratorIterator, LengthException, LimitIterator, LogicException, MultipleIterator, NoRewindIterator, OutOfBoundsException, OutOfRangeException, OverflowException, ParentIterator, RangeException, RecursiveArrayIterator, RecursiveCachingIterator, RecursiveCallbackFilterIterator, RecursiveDirectoryIterator, RecursiveFilterIterator, RecursiveIteratorIterator, RecursiveRegexIterator, RecursiveTreeIterator, RegexIterator, RuntimeException, SplDoublyLinkedList, SplFileInfo, SplFileObject, SplFixedArray, SplHeap, SplMinHeap, SplMaxHeap, SplObjectStorage, SplPriorityQueue, SplQueue, SplStack, SplTempFileObject, UnderflowException, UnexpectedValueException

    standard

    Dynamic Library Support => enabled
    Path to sendmail => /usr/sbin/sendmail -t -i 

    Directive => Local Value => Master Value
    assert.active => 1 => 1
    assert.bail => 0 => 0
    assert.callback => no value => no value
    assert.exception => 0 => 0
    assert.quiet_eval => 0 => 0
    assert.warning => 1 => 1
    auto_detect_line_endings => 0 => 0
    default_socket_timeout => 60 => 60
    from => no value => no value
    session.trans_sid_hosts => no value => no value
    session.trans_sid_tags => a=href,area=href,frame=src,form= => a=href,area=href,frame=src,form=
    url_rewriter.hosts => no value => no value
    url_rewriter.tags => form= => form=
    user_agent => no value => no value

    zlib

    ZLib Support => enabled
    Stream Wrapper => compress.zlib://
    Stream Filter => zlib.inflate, zlib.deflate
    Compiled Version => 1.2.11
    Linked Version => 1.2.11

    Directive => Local Value => Master Value
    zlib.output_compression => Off => Off
    zlib.output_compression_level => -1 => -1
    zlib.output_handler => no value => no value

    Additional Modules

    Module Name

    Environment

    Variable => Value
    LS_COLORS => rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=01;31:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36:
    LESSCLOSE => /usr/bin/lesspipe %s %s
    LANG => en_CA.UTF-8
    USER => root
    PWD => /tmp
    HOME => /root
    XDG_DATA_DIRS => /usr/local/share:/usr/share:/var/lib/snapd/desktop
    MAIL => /var/mail/root
    SHELL => /bin/bash
    TERM => xterm-256color
    SHLVL => 1
    LANGUAGE => en_CA:en
    LOGNAME => root
    PATH => /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin
    LESSOPEN => | /usr/bin/lesspipe %s
    _ => /usr/bin/php
    OLDPWD => /root

    PHP Variables

    Variable => Value
    $_SERVER['LS_COLORS'] => rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=01;31:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36:
    $_SERVER['LESSCLOSE'] => /usr/bin/lesspipe %s %s
    $_SERVER['LANG'] => en_CA.UTF-8
    $_SERVER['USER'] => root
    $_SERVER['PWD'] => /tmp
    $_SERVER['HOME'] => /root
    $_SERVER['XDG_DATA_DIRS'] => /usr/local/share:/usr/share:/var/lib/snapd/desktop
    $_SERVER['MAIL'] => /var/mail/root
    $_SERVER['SHELL'] => /bin/bash
    $_SERVER['TERM'] => xterm-256color
    $_SERVER['SHLVL'] => 1
    $_SERVER['LANGUAGE'] => en_CA:en
    $_SERVER['LOGNAME'] => root
    $_SERVER['PATH'] => /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin
    $_SERVER['LESSOPEN'] => | /usr/bin/lesspipe %s
    $_SERVER['_'] => /usr/bin/php
    $_SERVER['OLDPWD'] => /root
    $_SERVER['PHP_SELF'] => /usr/local/**MASKED**/scripts/backupmssqldb_**MASKED**.php
    $_SERVER['SCRIPT_NAME'] => /usr/local/**MASKED**/scripts/backupmssqldb_**MASKED**.php
    $_SERVER['SCRIPT_FILENAME'] => /usr/local/**MASKED**/scripts/backupmssqldb_**MASKED**.php
    $_SERVER['PATH_TRANSLATED'] => /usr/local/**MASKED**/scripts/backupmssqldb_**MASKED**.php
    $_SERVER['DOCUMENT_ROOT'] => 
    $_SERVER['REQUEST_TIME_FLOAT'] => 1554665067.0054
    $_SERVER['REQUEST_TIME'] => 1554665067
    $_SERVER['argv'] => Array
    (
        [0] => /usr/local/**MASKED**/scripts/backupmssqldb_**MASKED**.php
    )

    $_SERVER['argc'] => 1
    $_ENV['LS_COLORS'] => rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=01;31:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36:
    $_ENV['LESSCLOSE'] => /usr/bin/lesspipe %s %s
    $_ENV['LANG'] => en_CA.UTF-8
    $_ENV['USER'] => root
    $_ENV['PWD'] => /tmp
    $_ENV['HOME'] => /root
    $_ENV['XDG_DATA_DIRS'] => /usr/local/share:/usr/share:/var/lib/snapd/desktop
    $_ENV['MAIL'] => /var/mail/root
    $_ENV['SHELL'] => /bin/bash
    $_ENV['TERM'] => xterm-256color
    $_ENV['SHLVL'] => 1
    $_ENV['LANGUAGE'] => en_CA:en
    $_ENV['LOGNAME'] => root
    $_ENV['PATH'] => /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin
    $_ENV['LESSOPEN'] => | /usr/bin/lesspipe %s
    $_ENV['_'] => /usr/bin/php
    $_ENV['OLDPWD'] => /root

    PHP License
    This program is free software; you can redistribute it and/or modify
    it under the terms of the PHP License as published by the PHP Group
    and included in the distribution in the file:  LICENSE

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

    If you did not receive a copy of the PHP license, or have any
    questions about PHP licensing, please contact license@php.net.

    Fatal error: Uncaught Error: Class 'PDO' not found in /usr/local/**MASKED**/scripts/backupmssqldb_**MASKED**.php:4
    Stack trace:
    #0 {main}
      thrown in /usr/local/**MASKED**/scripts/backupmssqldb_**MASKED**.php on line 4
Skye Bowen
  • 49
  • 7
  • what unclear is in `Class 'PDO' not found` message? You got wrong include paths or so – Marcin Orlowski Apr 07 '19 at 19:42
  • @MarcinOrlowski If I specify the same php.ini file, the result is the same. Executing non-interactively fails. Executing the script interactively succeeds. I do not feel the configuration is the problem. – Skye Bowen Apr 07 '19 at 23:01
  • One thing to try: include a backslash infront of PDO like so `\PDO`. Aslo see https://stackoverflow.com/questions/14282011/php-use-class-in-global-namespace. – knot22 Apr 08 '19 at 01:18
  • @knot22 Thanks, I tried adding the back-slash, but no success. I think this has something to do with the SQL query itself. I placed the SQL query into a stored procedure, and am able to execute the procedure successfully with the same php code. – Skye Bowen Apr 08 '19 at 20:34
  • Interesting. Are you able to use the approach of calling the sproc from PHP going forward or do you have to figure out how it get it to work using exclusively a PHP script? – knot22 Apr 08 '19 at 22:40
  • @knot22 My particular issue is solved. Going forward I am able to call the stored procedure, and my backups run successfully. Thank you. – Skye Bowen Apr 09 '19 at 13:44

2 Answers2

0

You might try refactoring the T-SQL to see if that helps. Here is a one liner that gives the equivalent result of the original @pathwithname:

declare @pathwithname varchar(500) = 'c:\sqldata\SQLBACKUPS\FILENAME_' + format(getdate(), 'yyyyMMddHHmmss') + '.bak';
--select @pathwithname;
knot22
  • 2,648
  • 5
  • 31
  • 51
0

The script executes successfully as both regular user, and root user in interactive mode. So the original post is now resolved.

Creating a stored procedure that containing the SQL code I wish to execute, and then executing that stored procedure seems to work.

The script now fails to execute from cron as regular user, but succeeds as root user. This is not pertinent to the question, but may be related, so I am including as an FYI.

Skye Bowen
  • 49
  • 7