2014-04-04 46 views
0

我想創建一個腳本,以便用戶可以輸入一個URL和新的文件名,並且該URL將被下載(重命名爲新文件名)到/爲每個下載的進展PHP/Python下載腳本不會完成

無功/網絡/ dl,對於進度文件(progress0001.txt ... progressXXXX.txt)將被更新,我有兩個文件:dl.php和rdl.py

DL .PHP:

<?php 
$name=$_GET["name"]; 
if (file_exists("dl/$name")){ 
die("FILE EXISTS"); 
} 
else { 
$str=("/var/www/rdl.py '$name' '".$_GET["url"]."'"); 
//echo $str; 
exec("$str &"); 
} 
?> 
added 

rdl.py

#!/usr/bin/env python 
import urllib, os, sys 
fname=sys.argv[-2] 
url=sys.argv[-1] 
name="progress" 
end="txt" 
while os.path.isfile("/var/www/p/%s.%s"%(name, end)): 
    try: 
     post=int(name[-4:]) 
     name=name[:-4] 
    except: 
     post=0 
    post+=1 
    name="%s%04i"%(name, post) 
pname="%s.%s"%(name, end) 
def report(count, blockSize, totalSize): 
    global pname 
    percent = float(count)*blockSize*100/totalSize 
    pg=open("/var/www/p/%s"%pname, "w+") 
    pg.write(str(percent)) 
urllib.urlretrieve(url, os.path.join("/var/www/dl", fname), reporthook=report) 

我可以在命令行中運行在php文件中傳遞給exec的確切命令,它工作正常。但是,當PHP腳本執行它時,我最終會得到一個存在的下載文件,但是完全是空的,並且沒有進度文件。 我已經搜索並調整了幾個小時,我完全失去了。這裏發生了什麼?

+0

如果你嘗試:'exec(「$ str」);'(我刪除了'&') – mgilson

+0

同樣的事情,那實際上是我嘗試它的第一種方式 – user3295136

+0

另外,如果你發生了什麼'pg .close()'寫入數據後? – mgilson

回答

0

它最終成爲文件權限問題,Apache沒有執行腳本的權限,因爲它沒有它們。