Calibre OPDS (and HTML) PHP Server : web-based light alternative to Calibre content server / Calibre2OPDS to serve ebooks (epub, mobi, pdf, ...) http://blog.slucas.fr/en/oss/calibre-opds-php-server
Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

12 роки тому
10 роки тому
12 роки тому
10 роки тому
12 роки тому
10 роки тому
12 роки тому
12 роки тому
10 роки тому
12 роки тому
12 роки тому
10 роки тому
10 роки тому
10 роки тому
10 роки тому
12 роки тому
11 роки тому
12 роки тому
12 роки тому
12 роки тому
12 роки тому
10 роки тому
10 роки тому
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. <?php
  2. /**
  3. * COPS (Calibre OPDS PHP Server)
  4. *
  5. * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
  6. * @author Sbastien Lucas <sebastien@slucas.fr>
  7. */
  8. require_once ("config.php");
  9. require_once ("book.php");
  10. require_once ("data.php");
  11. global $config;
  12. if ($config ['cops_fetch_protect'] == "1") {
  13. session_start();
  14. if (!isset($_SESSION['connected'])) {
  15. notFound ();
  16. return;
  17. }
  18. }
  19. $expires = 60*60*24*14;
  20. header("Pragma: public");
  21. header("Cache-Control: maxage=".$expires);
  22. header('Expires: ' . gmdate('D, d M Y H:i:s', time()+$expires) . ' GMT');
  23. $bookId = getURLParam ("id", NULL);
  24. $type = getURLParam ("type", "jpg");
  25. $idData = getURLParam ("data", NULL);
  26. if (is_null ($bookId))
  27. {
  28. $book = Book::getBookByDataId($idData);
  29. }
  30. else
  31. {
  32. $book = Book::getBookById($bookId);
  33. }
  34. if (!$book) {
  35. notFound ();
  36. return;
  37. }
  38. if ($book && ($type == "jpg" || empty ($config['calibre_internal_directory']))) {
  39. if ($type == "jpg") {
  40. $file = $book->getFilePath ($type);
  41. } else {
  42. $file = $book->getFilePath ($type, $idData);
  43. }
  44. if (!$file || !file_exists ($file)) {
  45. notFound ();
  46. return;
  47. }
  48. }
  49. switch ($type)
  50. {
  51. case "jpg":
  52. header("Content-Type: image/jpeg");
  53. if ($book->getThumbnail (getURLParam ("width"), getURLParam ("height"))) {
  54. // The cover had to be resized
  55. return;
  56. }
  57. break;
  58. default:
  59. $data = $book->getDataById ($idData);
  60. header("Content-Type: " . $data->getMimeType ());
  61. break;
  62. }
  63. $file = $book->getFilePath ($type, $idData, true);
  64. if ($type == "epub" && $config['cops_update_epub-metadata'])
  65. {
  66. $book->getUpdatedEpub ($idData);
  67. return;
  68. }
  69. if ($type == "jpg") {
  70. header('Content-Disposition: filename="' . basename ($file) . '"');
  71. } else {
  72. header('Content-Disposition: attachment; filename="' . basename ($file) . '"');
  73. }
  74. $dir = $config['calibre_internal_directory'];
  75. if (empty ($config['calibre_internal_directory'])) {
  76. $dir = Base::getDbDirectory ();
  77. }
  78. if (empty ($config['cops_x_accel_redirect'])) {
  79. $filename = $dir . $file;
  80. $fp = fopen($filename, 'rb');
  81. header("Content-Length: " . filesize($filename));
  82. fpassthru($fp);
  83. }
  84. else {
  85. header ($config['cops_x_accel_redirect'] . ": " . $dir . $file);
  86. }