今天使用curl来进行模拟登陆,在进行关于cookie的操作时,设置好了cookie
1 2 |
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt'); //保存返回的Cookie curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt'); //读取现有Cookie |
却发现无论如何都无法保存服务器返回的cookie
可能性1:是不是因为设置为同一个文件,由于读取时未释放cookie.txt的锁所以无法写入?
修改保存cookie到cookie1.txt,发现仍然无法写入。因此排除了因为锁定无法写入的问题
可能性2:是不是因为curl写入文件时必须要求文件路径全名?
为文件名加上realpath函数,还是没有解决。
到底是因为什么呢?我搜索了官方文档,发现官方文档是这么写的:
1 |
curl_setopt($ch, CURLOPT_COOKIEFILE, "/tmp/cookieFileName"); |
唯一的不同出在文件路径不一样。
忽然联想到前几天我用winscp使用非root账户连接到ubuntu server服务器时,无法操作除了home下自己文件夹中文件的事情。又想到重启apache2必须在root权限下。
会不会是因为php运行在root下,而我的php文件所在的www目录是在非root账户下,没有权限写入的原因呢?
马上把cookie.txt的属性从0664改成0666,再次访问php文件,问题解决。
以后遇到文件操作问题时要多注意linux下的权限,以免走弯路浪费时间。