Я забыл запросить файл autoload.php
из папки vendors
. Поскольку функция является глобальной, мне даже не нужно добавлять use FPDF;
.
<?php namespace MyNamespace;
require_once '../../../vendor/autoload.php';
$pdf = new \FPDF();
$pdf->AddPage();
$pdf->SetFont('Arial','B',16);
$pdf->Cell(40,10,'Hello World!');
$pdf->Output();
Phpunit работал, потому что phpunit доступен из командной строки, и я настроил phpunit для включения файла autoload.php
.
Надеюсь, это поможет кому-то еще. Это немного расстраивает, когда ты тратишь часы на что-то, на первый взгляд, такое простое.
Несколько важных факторов перед кодом:
Мой выбор состоит в том, чтобы использовать регулярные выражения. Это допускает быстрый парсинг и настройку. Можно получить определенный шаблон регулярных выражений на сайт и тот способ, которым у Вас есть очень модульный подход. Используйте внешний источник для отображения URL к образцам регулярного выражения, если Вы планируете улучшить модуль парсинга с новой поддержкой сайтов, не изменяя исходный код.
Пример для печати списка каталогов от http://www.ibiblio.org/pub/
namespace Example
{
using System;
using System.Net;
using System.IO;
using System.Text.RegularExpressions;
public class MyExample
{
public static string GetDirectoryListingRegexForUrl(string url)
{
if (url.Equals("http://www.ibiblio.org/pub/"))
{
return "<a href=\".*\">(?<name>.*)</a>";
}
throw new NotSupportedException();
}
public static void Main(String[] args)
{
string url = "http://www.ibiblio.org/pub/";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
using (StreamReader reader = new StreamReader(response.GetResponseStream()))
{
string html = reader.ReadToEnd();
Regex regex = new Regex(GetDirectoryListingRegexForUrl(url));
MatchCollection matches = regex.Matches(html);
if (matches.Count > 0)
{
foreach (Match match in matches)
{
if (match.Success)
{
Console.WriteLine(match.Groups["name"]);
}
}
}
}
}
Console.ReadLine();
}
}
}
Вы не можете, если конкретному каталогу, который Вы хотите, не включили каталог, перечисляющий и никакой файл по умолчанию (обычно index.htm, index.html или default.html, но всегда настраивающийся). Только затем будете Вы быть подаренными список каталогов, который будет обычно повышаться с HTML и требовать парсинга.
Основное понимание:
списки Каталогов являются просто страницами HTML, сгенерированными веб-сервером. Каждый веб-сервер генерирует эти страницы HTML своим собственным способом, потому что нет никакого стандартного пути к веб-серверу для списка этих каталогов.
лучший способ получить список каталогов, должен просто сделать Запрос HTTP к URL, за который Вы хотели бы список каталогов и пытаться проанализировать и извлечь все ссылки от HTML, возвращенного Вам.
Для парсинга ссылок HTML попытайтесь использовать Пакет Гибкости HTML .
Просмотр Каталога:
веб-сервер требуется перечислить каталоги от, должны были включить каталог, просматривающий для получения этого представления HTML файлов в его каталогах. Таким образом, можно только получить список каталогов, если сервер HTTP хочет, чтобы Вы смогли к.
А быстрый пример Пакета Гибкости HTML:
HtmlDocument doc = new HtmlDocument();
doc.Load(strURL);
foreach(HtmlNode link in doc.DocumentElement.SelectNodes("//a@href")
{
HtmlAttribute att = link"href";
//do something with att.Value;
}
Более чистая альтернатива:
, Если это возможно в Вашей ситуации, более чистый метод должен использовать намеченный протокол для списков каталогов, как Протокол передачи файлов (FTP), SFTP (FTP как по SSH) или FTPS (FTP по SSL).
, Что, если просмотр каталога не включен:
, Если веб-серверу не включили каталог, просматривающий, то нет никакого простого способа получить список каталогов.
лучшее, которое Вы могли сделать в этом случае, должно запуститься в данном URL, перейти по всем ссылкам HTML на той же странице и попытаться создать виртуальный список каталогов сами на основе относительных путей ресурсов на этих страницах HTML. Это не даст Вам полный список того, какие файлы находятся на самом деле на веб-сервере все же.