2011-10-13 96 views
2

我想创建一个php脚本,将文件放到远程服务器上。
下面一行将从CLI工作:使用PHP系统和cURL时的权限问题?

curl -u username:pass -T myfile.jpg sftp://my.domain.com/dir/ 

但是,如果我考虑到这个PHP,并尝试通过像“系统”来运行它:

<? system('curl -u username:pass -T myfile.jpg sftp://my.domain.com/dir/'); ?> 

我得到一个错误:

curl: (7) Failed to connect to xxx.xxx.xx.xx: Permission denied 

此外,使事情复杂化,这是从RHEL到Windows服务器。任何人有建议或修复?

以下是PHP cURL库的结果。

* About to connect() to my.domain.com port 22 (#0) 
* Trying xxx.xxx.xx.xx... * connected 
* Connected to my.domain.com (xxx.xxx.xx.xx) port 22 (#0) 
* SSH authentication methods available: publickey,password 
* Initialized password authentication 
* Authentication complete 
* Upload failed: Permission denied (3/-31) 
* Connection #0 to host my.domain.com left intact 
* Closing connection #0 
+1

它可能是你仍然ssh使用运行php脚本的用户,并且您使用的用户名和密码仅用于身份验证,其中“apache”(假设其运行php)用户未通过身份验证将文件上传到该远程文件夹 – 3emad

+0

我认为这可能是问题,但我不知道如何解决此问题。即使我完全控制Windows服务器上的“每个人”(可怕的解决方案,我知道),它仍然失败。如果我在命令行“php myscript.php”中运行脚本,我的脚本就可以正常工作。但是,从网络浏览器运行它会失败。 – Corey

回答

1

PHP有它自己的cURL库,你应该使用它。 php cURL

+0

我实际上试过使用cURL库,但没有成功。我的猜测是,这是相同的权限问题。 – Corey

+0

根据您的设置,您可能需要自己安装cURL扩展。 http://www.php.net/manual/en/curl.setup.php如果你的服务器有一个软件包管理器,你可以从那里得到它并自动安装和配置它。 –

+0

好想法,但cURL已启用。我用CURLOPT_VERBOSE结果更新了我的问题。 – Corey

0

你的问题是,system()不允许curl要你输入密码。

考虑其他认证方法。