Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/243.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP/Python下载脚本赢得';完不成_Php_Python_Cgi - Fatal编程技术网

PHP/Python下载脚本赢得';完不成

PHP/Python下载脚本赢得';完不成,php,python,cgi,Php,Python,Cgi,我正在尝试创建一个脚本,以便用户可以输入URL和新文件名,该URL将被下载(重命名为新文件名)到/var/www/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

我正在尝试创建一个脚本,以便用户可以输入URL和新文件名,该URL将被下载(重命名为新文件名)到/var/www/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
我可以在一个命令行中运行php文件中传递给
exec
的确切命令,它工作正常。但是当PHP脚本执行它时,我得到的下载文件是存在的,但完全是空的,没有进度文件。
我已经在谷歌上搜索和调整了几个小时,我完全不知所措。这里发生了什么?

这是一个文件权限问题,apache没有执行脚本的权限,因为它不拥有这些脚本。

如果尝试,会发生什么:
exec($str”)
(我删除了
&
)同样的东西,这实际上是我第一次尝试它。因此,如果在写入数据后
pg.close()
,会发生什么?仍然是相同的问题。正如我所说,python脚本在命令行中运行得非常完美,所以我认为它与PHP有关,我只是不知道是什么。
#!/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)