我一直在试图使用源码的一项旨在包装在PHP与混合的成功。我可以读取的数据库的现,但是没有我更新致力于实时数据库查看网页浏览器。奇怪的是,运行中的脚本我壳并更新该数据库。我可疑的权限文件的罪魁祸首,但是即使有的数据库提供全面的访问(chmod777)的问题仍然存在。我应该尝试改变该文件的所有者?如果是这样,什么?

对了,我的机器是标准Mac OS X豹install PHP激活。

@汤姆*马丁

谢谢你的回复。我只是跑了你的代码,它看起来像PHP运行为户_www.然后我试图乔宁的数据库拥有_www,但没有工作。

我还应该注意到,公设辩护人的errorInfo功能并不表明一个错误发生。这可能是一个设有公设辩护人以某种方式打开的数据库的只读?我已经听到,执行源码写上的锁整个文件。它是可能的,该数据库是被别的事阻止写吗?

我已经决定包括代码问题。这将或多或少的一个端口 授予的脚本 PHP.到目前为止,它只是问题的部分:

<?php

$db = new PDO('sqlite:test.db');

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://stackoverflow.com/users/658/kyle");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_COOKIE, "shhsecret=1293706652");
$page = curl_exec($ch);

preg_match('/summarycount">.*?([,\d]+)<\/div>.*?Reputation/s', $page, $rep);
$rep = preg_replace("/,/", "", $rep[1]);

preg_match('/iv class="summarycount".{10,60} (\d+)<\/d.{10,140}Badges/s', $page, $badge);
$badge = $badge[1];

$qreg = '/question-summary narrow.*?vote-count-post"><strong.*?>(-?\d*).*?\/questions\/(\d*).*?>(.*?)<\/a>/s';
preg_match_all($qreg, $page, $questions, PREG_SET_ORDER);

$areg = '/(answer-summary"><a href="\/questions\/(\d*).*?votes.*?>(-?\d+).*?href.*?>(.*?)<.a)/s';
preg_match_all($areg, $page, $answers, PREG_SET_ORDER);

echo "<h3>Questions:</h3>\n";
echo "<table cellpadding=\"3\">\n";

foreach ($questions as $q)
{
    $query = 'SELECT count(id), votes FROM Questions WHERE id = '.$q[2].' AND type=0;';
    $dbitem = $db->query($query)->fetch(PDO::FETCH_ASSOC);
    if ($dbitem['count(id)'] > 0)
    {
        $lastQ = $q[1] - $dbitem['votes'];
        if ($lastQ == 0)
        {
            $lastQ = "";
        }
        $query = "UPDATE Questions SET votes = '$q[1]' WHERE id = '$q[2]'";
        $db->exec($query);
    }
    else
    {
        $query = "INSERT INTO Questions VALUES('$q[3]', '$q[1]', 0, '$q[2]')";
        echo "$query\n";
        $db->exec($query);
        $lastQ = "(NEW)";
    }
    echo "<tr><td>$lastQ</td><td align=\"right\">$q[1]</td><td>$q[3]</td></tr>\n";
}

echo "</table>";

?>
有帮助吗?

解决方案

凯尔,为了公设辩护人/源码工作,你需要的写入权限的目录数据库的驻留。

此外,我看到你执行多选择中的循环。这可能是确定的,如果你正在建立一些小的不重型装载。否则我建议建立单一的查询,返回多行和处理它们在单独的循环。

其他提示

我找到答案的 PHP手册 "文件夹,里面的数据库文件中必须写的。"

我认为PHP常运作为用户"没人".不知道Mac虽然。如果Mac有whoami你可以试试 echo exec('whoami'); 找出来。

对于那些曾经遇到过只读问题源码上OS X:

1)确定Apache httpd 用户和用户组的用户属于:

查询"^户"/私人/etc/apache2/httpd.conf
组_www

2)创建一个目录中 /Library/WebServer/Documents 你的数据库(s)和改变的组httpd的组:

sudo chgrp_www/Library/WebServer/Documents/db

一个较安全的选择是开放的权限 /Library/WebServer/Documents:

sudo chmod a+w/Library/WebServer/Documents

@汤姆 取决于主管是设置,如果服务器运行PHP as an Apache Module那么它的可能,它是'nobody'(通常无论用户apache是设置的那样)。但如果PHP setup as cgi(例如快cgi)和服务器运行SuExec然后php运行作为同一用户人拥有的文件。

无论哪种方式的文件夹,这将包含在数据库中必须写过剧本,要么通过的是同一个用户,或通过具有写入许可设置的php用户。

@Michal 除此之外,一个人可以使用的服务器();执行所有需要采取的行动,然后谢();实际谢他们。

好,我有同样的问题现在想通了通过一个错误:只要把每一个插件的SQL指令内的一个 try...catch 块说它是。它使你这样做是正确的方式,否则它不会的工作。嗯,它现在的作品。祝你好运用于其他任何人这个问题(因为我使用这种线我自己来尝试解决我的问题)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top