[2 days left] What’s wrong with your cloud strategy? Learn why multicloud solutions matter with Nimble Storage.Register Now

x
?
Solved

Issue running php script from task scheduler

Posted on 2013-12-26
4
Medium Priority
?
602 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
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 2
4 Comments
 
LVL 18

Accepted Solution

by:
Gary Davis earned 2000 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 111

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 111

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

Concerto Cloud for Software Providers & ISVs

Can Concerto Cloud Services help you focus on evolving your application offerings, while delivering the best cloud experience to your customers? From DevOps to revenue models and customer support, the answer is yes!

Learn how Concerto can help you.

Question has a verified solution.

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

These days socially coordinated efforts have turned into a critical requirement for enterprises.
This article discusses four methods for overlaying images in a container on a web page
Explain concepts important to validation of email addresses with regular expressions. Applies to most languages/tools that uses regular expressions. Consider email address RFCs: Look at HTML5 form input element (with type=email) regex pattern: T…
The viewer will learn how to count occurrences of each item in an array.
Suggested Courses

656 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