I want the user to upload a file and then a php file checks if it is valid or not. My problem is in running the script_template.py , i used the function exec() to run in command line but it does not return something and i don't understand why. Thanks in advance. I am using xampp.
index.html
<form id="upload" method="post" action="upload.php" enctype="multipart/form-data">
<div id="drop">
Drop Here
<a>Browse</a>
<input type="file" name="upl" multiple />
</div>
<input type="submit" value="Upload Image" name="submit">
</form>
php file
$allowed = array('png', 'jpg', 'gif','txt','xlsx','xls');
if(isset($_FILES['upl']) && $_FILES['upl']['error'] == 0){
$extension = pathinfo($_FILES['upl']['name'], PATHINFO_EXTENSION);
if(!in_array(strtolower($extension), $allowed)){
echo '{"status":"error"}';
echo ' <p>The uploaded file extension is incorrect, please try again with the correct file </p>';
exit;
}
$x=file_validation ( $_FILES['upl']['tmp_name'] ) ;
echo $x;
if(move_uploaded_file($_FILES['upl']['tmp_name'], 'uploads/'.$_FILES['upl']['name'])){
echo '{"status":"success"}';
exit;
}
}
echo '{"status":"error"}';
echo 'erro';
exit;
function file_validation($fich) {
$validation= exec('python script_template.py '.$fich) ;
echo $validation ;
}
python file
#!C:\Python27\python.exe
print "Content-Type: text/html\n"
import sys
fich_input= sys.argv[1]
print fich_input
def header(fich):
"""
Extracts the header and it's values from tab separated file
Requires: fich is tab separated file
Ensures: dic and aux are dictionaries, where aux associates each header to it's order
and dic associates each header value to the order number.
"""
input_fil=open(fich,'r')
contador_linha=0
lines =input_fil.readlines()
dic={}
aux={}
for line in lines:
contador_linha+=1
line_words=line.split('\t')
if contador_linha==1: #header
aux_counter=1
header_len=len(line_words)
for elem in line_words:
if elem != '\n':
aux[aux_counter]=elem
aux_counter+=1
elif contador_linha==2:#create values for keys in header
aux_counter=1
for elem2 in line_words:
if elem2 != '\n':
dic[aux_counter]=[elem2]
aux_counter+=1
return (aux,dic)
def header_value(dic1,dic2):
"""
joins header and it's value
Requires: dic1 is aux from header(fich) and dic2 is dic from header(fich)
Ensures: final_dic is a dictionary which associates eache header to value
"""
final_dic={}
header_len=len(dic1.keys())
for number in range(1,header_len+1):
final_dic[dic1[number]]=dic2[number]
return final_dic
def mol_name(final_dic):
"""
Finds molecule name for just labelling
Requires: final_dic is a dictionary returned by header_value
Ensures: string representing molecule name
"""
return final_dic['Mol_name']
def print_info(final_dic):
"""
prints in the screen all information contained in the file given by researcher
Requires: final_dic from header_value
Ensures: information in the screen
"""
print str(mol_name(final_dic))
for key in final_dic:
print key,':',final_dic[key]
print '\n'
def general_operation(fich):
"""
Gathers information required to start database operations and if not give an error
Requires: fich is a Tab separated file, dic12 is
Ensures: Crucial information to database operations
"""
dics=header(fich)
header_values= header_value(dics[0],dics[1])
type_file=''
if len(header_values) < 21 :
type_file='no_ref'
else:
type_file='ref'
return (type_file,header_values)
print 'yes'
print general_operation(fich_input)
The python script is running just fine, php simply ignores it.