Solved

Issue running php script from task scheduler

Posted on 2013-12-26
4
580 Views
Last Modified: 2013-12-27
I am trying to setup a daily import script I created in php but the script keeps spitting out errors. If works fine when run within a webpage but I am running it like this:

E:\wamp\bin\php\php5.4.3\php.exe -f "E:\wamp\www\timeoff\import_data.php"

Errors are below.

PHP Warning:  feof() expects parameter 1 to be resource, boolean given in E:\wam
p\www\timeoff\import_data.php on line 15
PHP Stack trace:
PHP   1. {main}() E:\wamp\www\timeoff\import_data.php:0
PHP   2. feof() E:\wamp\www\timeoff\import_data.php:15

Warning: feof() expects parameter 1 to be resource, boolean given in E:\wamp\www
\timeoff\import_data.php on line 15

Call Stack:
    0.0011     128712   1. {main}() E:\wamp\www\timeoff\import_data.php:0
   19.1646     135816   2. feof() E:\wamp\www\timeoff\import_data.php:15

PHP Warning:  fgetcsv() expects parameter 1 to be resource, boolean given in E:\
wamp\www\timeoff\import_data.php on line 16
PHP Stack trace:
PHP   1. {main}() E:\wamp\www\timeoff\import_data.php:0
PHP   2. fgetcsv() E:\wamp\www\timeoff\import_data.php:16

Warning: fgetcsv() expects parameter 1 to be resource, boolean given in E:\wamp\
www\timeoff\import_data.php on line 16

Call Stack:
    0.0011     128712   1. {main}() E:\wamp\www\timeoff\import_data.php:0
   19.1664     135944   2. fgetcsv() E:\wamp\www\timeoff\import_data.php:16

Open in new window


Here is the script

<?php
$con = mysql_connect('host','root','pass');
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }

mysql_select_db("ats", $con);

mysql_query('TRUNCATE TABLE timeoff_user_data') or die(mysql_error());


    $fp = fopen('timeoff_data\file.csv',"r"); 

while( !feof($fp) ) {
  if( !$line = fgetcsv($fp,10000,",", '"')) {
     continue;
  }
	$email = str_replace("'", "", $line[0]);
	$last_name = str_replace("'", "", $line[1]);
	$first_name = str_replace("'", "", $line[2]);
	$middle_in = str_replace("'", "", $line[3]);
	$plan_id = str_replace("'", "", $line[4]);
	$hours_avail = str_replace("'", "", $line[5]);
	
    $importSQL = "INSERT INTO timeoff_user_data VALUES('".$email."','".$last_name."','".$first_name."','".$middle_in."','".$plan_id."','".$hours_avail."')";
    mysql_query($importSQL) or die(mysql_error());  

}
fclose($fp);
mysql_close($con);

?>

Open in new window

0
Comment
Question by:ats2012
  • 2
4 Comments
 
LVL 18

Accepted Solution

by:
Gary Davis earned 500 total points
ID: 39740818
I suspect that when run from the scheduler, it is unable to find the .csv file so the feof() call referencing the file fails.

$fp = fopen('timeoff_data\file.csv',"r");

Make sure the startup folder is correct or fully specify the location of the file.

Gary Davis
0
 
LVL 109

Expert Comment

by:Ray Paseur
ID: 39740897
Line 8: Did MySQL_Select_DB() work?  Since the script does not test for this, it may have failed and you would not know.

Line 13: $fp = fopen('timeoff_data\file.csv',"r");  Did fopen() work?   The script does not test for this either.  I am almost 100% certain that it failed, since the symptomatic messages are a signature of a failed call to fopen() followed by using the return value without testing for success.

Testing PHP function returns for success or failure is sine qua non.  Failure to test is Antipractice # 23.

You almost certainly want to examine the contents of getcwd() when the script is running as a scheduled task.  It will not be the same as when the script is running as a web page.  You may want to use a fully-qualified URL in fopen() or you may find a different relative path that will work for you.
0
 
LVL 109

Expert Comment

by:Ray Paseur
ID: 39740898
Kind of a sidebar note, but you probably want to get off the MySQL extension as soon as practical.  PHP is doing away with MySQL support.  This article explains why and what you must do to keep your scripts running in the future.
http://www.experts-exchange.com/Web_Development/Web_Languages-Standards/PHP/PHP_Databases/A_11177-PHP-MySQL-Deprecated-as-of-PHP-5-5-0.html
0
 

Author Closing Comment

by:ats2012
ID: 39741719
The path was the issue. I changed it to the E:\folder\folder path and it started working. Thanks for your help.
0

Featured Post

Free Tool: Path Explorer

An intuitive utility to help find the CSS path to UI elements on a webpage. These paths are used frequently in a variety of front-end development and QA automation tasks.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Introduction HTML checkboxes provide the perfect way for a web developer to receive client input when the client's options might be none, one or many.  But the PHP code for processing the checkboxes can be confusing at first.  What if a checkbox is…
Generating table dynamically is the most common issue faced by php developers.... So it seems there is a need of an article that explains the basic concept of generating tables dynamically. It just requires a basic knowledge of html and little maths…
The viewer will learn how to dynamically set the form action using jQuery.
This tutorial will teach you the core code needed to finalize the addition of a watermark to your image. The viewer will use a small PHP class to learn and create a watermark.

808 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question