【问题标题】:Calling a PHP script to get image urls调用 PHP 脚本来获取图像 url
【发布时间】:2011-08-11 17:30:04
【问题描述】:

我的路是这样的

/网站/php
/网站/javascript
/网站/摄影师/index.html
/网站/摄影师/照片

我有一个 javascript,它显示文件夹中照片的照片库。使用 ajax 和 jquery,它调用一个 PHP 文件,该文件返回“照片”中的图像 url,以便 javascript 可以设置画廊等。

问题是我似乎无法让 PHP 访问“照片”文件夹。看,我有一堆不同的摄影师页面做同样的事情,所以我试图有一个 PHP 文件和一个 javascript 文件,但不同的目录。

我设计的方法是在 ajax get 调用中发送“window.location.pathname”,以便 php 可以获取当前页面所在的目录,然后只需搜索该目录中的“photos”文件夹即可。

chdir($_GET["currentPath"] . "photos"); //change the directory so we just get the file names
echo json_encode(glob("*.jpg"));

我收到此错误: 警告:chdir() [function.chdir]: No such file or directory (errno 2) in /hermes/bosweb/web054/b541/ipg.danielechevarriacom/testing/oneonethousand_test/php/images.php 在第 4 行 []

当我

echo $_GET["currentPath"] . "photos";

它打印:“/testing/oneonethousand_test/steele/photos”

那是照片所在的正确目录,所以我不知道为什么这不起作用。我假设这与 chdir 的工作方式有关。

我不想做 chdir("../steele/photos") 因为我会有很多目录并且我想让 PHP 文件保持通用。我只想让 javascript 告诉 php 当前目录在哪里,然后 PHP 切换到该目录。为什么这不起作用?

谢谢。

【问题讨论】:

  • 从答案来看,也许我做错了?有人建议我如何在不复制大量代码的情况下组织目录?
  • 我认为你的目录很好。在我看来,这个画廊不需要 javascript。只需获取photo目录下的文件列表,用php输出即可。

标签: php javascript ajax


【解决方案1】:

首先,永远不要相信 $_GET/$_POST/etc 中的变量。使用您的脚本,我可能会列出服务器上任何目录中的文件(包括不可通过网络访问的文件),而不仅仅是您想要的。

它不起作用,因为 $_GET["currentPath"] 中的路径是 URL,而不是文件夹名称:它设置为 "http://danielechevarria.com/testing/oneonethousand_test/steele/" 而不是 "斯蒂尔”。

将 JavaScript 发送的变量更改为顶级路径(例如“steele”),并考虑将脚本更改为以下内容:

//Validate the path somehow, in this case, reject anything that's not alphanumeric
if(!preg_match("/^\w+$/", $_GET["currentPath"])) die("{'error':'Invalid path'}");
chdir("../" . $_GET["currentPath"] . "/photos");
echo json_encode(glob("*.jpg"));

【讨论】:

  • 但我不想发送“steele”,因为我希望这个脚本适用于任何摄影师页面——我不想为每个目录使用不同的 javascript。我只想让 javascript 将页面的当前目录发送到 php,然后 php 获取该目录中的照片文件夹。 "window.location.pathname" 只发送整个路径名。
  • 假设艺术家目录只有一个深度,你可以在 JS 端使用var currentPath = window.location.pathname.match(/\w+$/)[0];
【解决方案2】:

chdir 需要文件系统路径,而不是 http 路径。

根据 echo 命令的输出,它看起来像是将整个 http url(“http://danielechevarria.com/testing/oneonethousand_test/steele/photos”)传递给 chdir 函数。

【讨论】:

  • 好的,但是 "window.location.pathname" 发送的是 http 路径。据我所知,没有 javascript 函数可以发送任意相对位置的当前路径......那会很好。
  • 如果您知道 docroot 路径,那么您可以从传递给它的 javascript 路径生成 php 中的绝对路径。
【解决方案3】:

你可以在php中使用curl来调用 (“http://danielechevarria.com/testing/oneonethousand_test/steele/photos”)

【讨论】:

  • 这似乎比必要的工作要多。为什么我不能只访问“/testing/oneonethousand_test/steele/photos”?
【解决方案4】:

我相信 chdir 仅适用于本地路径,而不适用于 Web 路径。因此,为了“chdir”到照片目录,您需要完整的系统路径。

即/home/user/public_html/photos 或 C:\www\photos

http://us2.php.net/chdir

这是我的意见:不知道为什么要使用 ajax 和 javascript 来提取图像并建立画廊。为什么不直接使用 PHP 来生成图库呢? Javascript过度使这复杂化。

【讨论】:

  • 那么如何使用javascript发送当前的相对路径呢?
  • 你没有。您使用 php,您在当前代码中所做的工作会起作用,但您没有使用正确的路径来访问照片。它可能在这样的目录中寻找照片.. /hermes/bosweb/web054/b541/ipg.danielechevarriacom/testing/oneonethousand_test/php/danielechevarria.com/testing/oneonethousand_test/steele/photos .. 这很荒谬
  • 我犯了一个错误。它现在通过的是 /testing/oneonethousand_test/steele/photos 但我仍然遇到同样的错误。
  • 对,您正在做的是尝试将目录更改为服务器上的确切目录。我猜当你 ssh 到机器上,然后输入“cd /testing”它会告诉你测试目录不存在。
  • 尝试使用 getcwd() 构建图像的目录路径。 us2.php.net/getcwd
猜你喜欢
  • 1970-01-01
  • 2013-06-03
  • 1970-01-01
  • 1970-01-01
  • 2017-05-18
  • 2021-04-03
  • 1970-01-01
  • 2021-12-07
  • 1970-01-01
相关资源
最近更新 更多