ebooks sorteren
Ik wil mijn e-books gaan sorteren en in een database gaan zetten zodat ik makkelijker kan zien welk boek ik heb. Mijn eerste stap is om de boeken bij elkaar in mappen te doen op een Synology. Ik werk met PHP en werk in een webbased omgeving.
Inmiddels ben ik redelijk ver dankzij hulp van Google maar ik struikel nu bij de opdracht rename waar ik maar geen oplossing voor vind.
Het blijkt dat de namen van de boeken op de Synology een extra verborgen naam krijgen Laanen_Rob-Anavatos.epub@SynoEAStream dat laatste @SynoEAStream is zichtbaar via PHP maar niet zichtbaar in windows verkenner.
Draai ik het script dan krijg ik de volgende meldingen:
Zoek naar epub in de map
Gevonden: entry=Laanen_Rob-Anavatos.epub@SynoEAStream
Synology opdracht gevonden: @synoeastream=@synoeastream en negeren.
Blijft over: entry=laanen_rob-anavatos.epub
extentie=epub
schrijver-boek laanen_rob-anavatos.epub
teken - staat op 10 plaats
Schrijver is dan laanen_rob
Boektitel is dan anavatos.epub
Nieuwe mapnaam is: laanen_rob
map laanen_rob is al aanwezig. Dus niet opnieuw aangemaakt.
Verhuizen van ../epub/Laanen_Rob-Anavatos.epub@SynoEAStream
naar laanen_rob/anavatos.epub
Warning: rename(../epub/Laanen_Rob-Anavatos.epub@SynoEAStream,laanen_rob/anavatos.epub): No such file or directory in /volume1/web/epub/index.php on line 73
Bij de opdracht rename heb ik $van en $naar. Ik heb van al geprobeerd met de volledige Anavatos.epub@SynoEAStream en met de Anavatos.epub maar bij beide houd ik de melding No such file or directory in /volume1/web/epub/index.php on line 73 waarbij regel 73 de regel met rename is.
Ik heb geprobeerd:
(de startmap is epub programma is index.php)
../epub/Laanen_Rob-Anavatos.epub@SynoEAStream
Laanen_Rob-Anavatos.epub@SynoEAStream
/Laanen_Rob-Anavatos.epub@SynoEAStream
/Laanen_Rob-Anavatos.epub
Laanen_Rob-Anavatos.epub
Of ik dacht dat ik dit allemaal geprobeerd heb.;-)
Het script:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
<?php
// lees mappen
//lees alle directories
$sDirName = '';
$aDirectories = glob( $sDirName . '*', GLOB_ONLYDIR );
sort( $aDirectories ); // sorteren
foreach ( $aDirectories as $sDirectory )
{
echo "Zoek naar epub in de map<br>";
// lees de epubs in mappen
if ($handle = opendir($sDirectory))
{
while (false !== ($entry = readdir($handle)))
{
if ($entry != "." && $entry != "..")
{
echo "Gevonden: entry=".$entry."<br>";
$volledigenaam=$entry;
//staat er @SynoEAStream achter van de Synology?
$synologytekst= strtolower(substr($entry,-13)); // laatste 4 tekens
echo "Synology opdracht gevonden: @synoeastream=".$synologytekst." en negeren.<br>";
if ($synologytekst=='@synoeastream'){$entry=(strtolower(substr_replace($entry,"",-13)));}
echo "Blijft over: entry=".$entry."<br>";
$extentie = strtolower(substr($entry,-4)); // laatste 4 tekens
echo "extentie=".$extentie."<br>";
// lees alleen maar epubs in
if ($extentie == "epub")
{
// omzetten naar kleine letters
$naam= strtolower($entry);
echo "schrijver-boek ".$entry."<br>";
//echo "gevonden epub = $naam<br>";
// filter de schrijvernaam er uit
// links van -
$pos = strpos($naam, '-');
echo "teken - staat op ".$pos." plaats<br>";
if ($pos<=1){echo "Bij $naam geen scheiding tussen schrijver en boeknaam gevonden.<br><br>";}
// de naam die daar staat is:
// alles naar kleine letters.
$schrijver = strtolower(substr($naam,0,$pos));
$boektitel = strtolower(substr($naam,$pos+1));
echo "<br>Schrijver is dan ".$schrijver."<br>";
echo "Boektitel is dan ".$boektitel."<br>";
// komma en spatie er uit filteren
$schrijver=TRIM($schrijver);
$schrijver=str_replace(',', '_', $schrijver);
$schrijver=str_replace(' ', '_' , $schrijver);
$schrijver="$schrijver";
// kijk of er al een mapnaam bestaat en maak anders een map aan
$nieuwemap=$schrijver;
echo "<br>Nieuwe mapnaam is: ".$nieuwemap."<br>";
if (!file_exists($nieuwemap))
{
mkdir($nieuwemap, 0777, true);
echo "Map gemaakt met naam ".$nieuwemap."<br>";
}else{
echo "map ".$nieuwemap." is al aanwezig. Dus niet opnieuw aangemaakt.<br><br>";
}
$nieuwemap=TRIM($nieuwemap);
$boektitel=TRIM($boektitel);
// verplaatst naar de gemaakte mapnaam
$van = $volledigenaam;
//$van = $entry;
$naar= $nieuwemap."/".$boektitel;
echo "Verhuizen van ".$van."<br>";
echo " naar ".$naar."<br>";
rename($van, $naar);
echo "<br><br>";
echo "<br>===================<br>";
}
}
}
}
}
?>
// lees mappen
//lees alle directories
$sDirName = '';
$aDirectories = glob( $sDirName . '*', GLOB_ONLYDIR );
sort( $aDirectories ); // sorteren
foreach ( $aDirectories as $sDirectory )
{
echo "Zoek naar epub in de map<br>";
// lees de epubs in mappen
if ($handle = opendir($sDirectory))
{
while (false !== ($entry = readdir($handle)))
{
if ($entry != "." && $entry != "..")
{
echo "Gevonden: entry=".$entry."<br>";
$volledigenaam=$entry;
//staat er @SynoEAStream achter van de Synology?
$synologytekst= strtolower(substr($entry,-13)); // laatste 4 tekens
echo "Synology opdracht gevonden: @synoeastream=".$synologytekst." en negeren.<br>";
if ($synologytekst=='@synoeastream'){$entry=(strtolower(substr_replace($entry,"",-13)));}
echo "Blijft over: entry=".$entry."<br>";
$extentie = strtolower(substr($entry,-4)); // laatste 4 tekens
echo "extentie=".$extentie."<br>";
// lees alleen maar epubs in
if ($extentie == "epub")
{
// omzetten naar kleine letters
$naam= strtolower($entry);
echo "schrijver-boek ".$entry."<br>";
//echo "gevonden epub = $naam<br>";
// filter de schrijvernaam er uit
// links van -
$pos = strpos($naam, '-');
echo "teken - staat op ".$pos." plaats<br>";
if ($pos<=1){echo "Bij $naam geen scheiding tussen schrijver en boeknaam gevonden.<br><br>";}
// de naam die daar staat is:
// alles naar kleine letters.
$schrijver = strtolower(substr($naam,0,$pos));
$boektitel = strtolower(substr($naam,$pos+1));
echo "<br>Schrijver is dan ".$schrijver."<br>";
echo "Boektitel is dan ".$boektitel."<br>";
// komma en spatie er uit filteren
$schrijver=TRIM($schrijver);
$schrijver=str_replace(',', '_', $schrijver);
$schrijver=str_replace(' ', '_' , $schrijver);
$schrijver="$schrijver";
// kijk of er al een mapnaam bestaat en maak anders een map aan
$nieuwemap=$schrijver;
echo "<br>Nieuwe mapnaam is: ".$nieuwemap."<br>";
if (!file_exists($nieuwemap))
{
mkdir($nieuwemap, 0777, true);
echo "Map gemaakt met naam ".$nieuwemap."<br>";
}else{
echo "map ".$nieuwemap." is al aanwezig. Dus niet opnieuw aangemaakt.<br><br>";
}
$nieuwemap=TRIM($nieuwemap);
$boektitel=TRIM($boektitel);
// verplaatst naar de gemaakte mapnaam
$van = $volledigenaam;
//$van = $entry;
$naar= $nieuwemap."/".$boektitel;
echo "Verhuizen van ".$van."<br>";
echo " naar ".$naar."<br>";
rename($van, $naar);
echo "<br><br>";
echo "<br>===================<br>";
}
}
}
}
}
?>
Mijn vraag is, wat doe ik verkeerd dat ik de foutmelding krijg.
https://www.synology-forum.nl/externe-harddisks-en-printers/na-kopieer-taak-via-usb-copy-dubbele-kleine-bestanden/
Overigen kan je makkelijk naar epub bestanden zoeken :
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Youw tip ga ik zeker gebruiken, hoewel het geen antwoord op mijn vraag was.
[
Nieuwe werkende script is nu:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
<?php
// lees mappen
//lees alle directories
$sDirName = '';
$aDirectories = glob( $sDirName . '*', GLOB_ONLYDIR );
sort( $aDirectories ); // sorteren
foreach ( $aDirectories as $sDirectory )
{
echo "Zoek naar epub in de map<br>";
// lees de epubs in mappen
if ($handle = opendir($sDirectory))
{
while (false !== ($entry = readdir($handle)))
{
if ($entry != "." && $entry != "..")
{
echo "Gevonden: entry=".$entry."<br>";
$volledigenaam=$entry;
//staat er @SynoEAStream achter van de Synology?
$synologytekst= substr($entry,-13); // laatste 4 tekens
echo "Synology opdracht gevonden: @synoeastream=".$synologytekst." en negeren.<br>";
if ($synologytekst=='@SynoEAStream'){$entry=(substr_replace($entry,"",-13));}
echo "Blijft over: entry=".$entry."<br>";
$van=$entry;
$extentie = strtolower(substr($entry,-4)); // laatste 4 tekens
echo "extentie=".$extentie."<br>";
// lees alleen maar epubs in
if ($extentie == "epub")
{
// omzetten naar kleine letters
$naam= strtolower($entry);
echo "schrijver-boek ".$entry."<br>";
//echo "gevonden epub = $naam<br>";
// filter de schrijvernaam er uit
// links van -
$pos = strpos($naam, '-');
echo "teken - staat op ".$pos." plaats<br>";
if ($pos<=1){echo "Bij $naam geen scheiding tussen schrijver en boeknaam gevonden.<br><br>";}
// de naam die daar staat is:
// alles naar kleine letters.
$schrijver = strtolower(substr($naam,0,$pos));
$boektitel = strtolower(substr($naam,$pos+1));
echo "<br>Schrijver is dan ".$schrijver."<br>";
echo "Boektitel is dan ".$boektitel."<br>";
// komma en spatie er uit filteren
$schrijver=TRIM($schrijver);
$schrijver=str_replace(',', '_', $schrijver);
$schrijver=str_replace(' ', '_' , $schrijver);
$schrijver="$schrijver";
// kijk of er al een mapnaam bestaat en maak anders een map aan
$nieuwemap=$schrijver;
echo "<br>Nieuwe mapnaam is: ".$nieuwemap."<br>";
if (!file_exists($nieuwemap))
{
mkdir($nieuwemap, 0777, true);
echo "Map gemaakt met naam ".$nieuwemap."<br>";
}else{
echo "map ".$nieuwemap." is al aanwezig. Dus niet opnieuw aangemaakt.<br><br>";
}
$nieuwemap=TRIM($nieuwemap);
$boektitel=TRIM($boektitel);
// verplaatst naar de gemaakte mapnaam
//$van = "../epub/".$volledigenaam;
//$van = $entry;
$naar= $nieuwemap."/".$boektitel;
echo "Verhuizen van ".$van."<br>";
echo " naar ".$naar."<br>";
rename($van, $naar);
echo "<br><br>";
echo "<br>===================<br>";
}
}
}
}
}
$path = ".";
if ( $files = scandir( $path ) )
{
$extensions = array( "epub", "jpg", "png" );
foreach ( $files as $epub )
{
$fileExtension = strtolower( pathinfo( $epub, PATHINFO_EXTENSION ) );
if( in_array( $fileExtension , $extensions ) )
{
echo $epub . '<br />' . PHP_EOL;
}
}
}
?>
// lees mappen
//lees alle directories
$sDirName = '';
$aDirectories = glob( $sDirName . '*', GLOB_ONLYDIR );
sort( $aDirectories ); // sorteren
foreach ( $aDirectories as $sDirectory )
{
echo "Zoek naar epub in de map<br>";
// lees de epubs in mappen
if ($handle = opendir($sDirectory))
{
while (false !== ($entry = readdir($handle)))
{
if ($entry != "." && $entry != "..")
{
echo "Gevonden: entry=".$entry."<br>";
$volledigenaam=$entry;
//staat er @SynoEAStream achter van de Synology?
$synologytekst= substr($entry,-13); // laatste 4 tekens
echo "Synology opdracht gevonden: @synoeastream=".$synologytekst." en negeren.<br>";
if ($synologytekst=='@SynoEAStream'){$entry=(substr_replace($entry,"",-13));}
echo "Blijft over: entry=".$entry."<br>";
$van=$entry;
$extentie = strtolower(substr($entry,-4)); // laatste 4 tekens
echo "extentie=".$extentie."<br>";
// lees alleen maar epubs in
if ($extentie == "epub")
{
// omzetten naar kleine letters
$naam= strtolower($entry);
echo "schrijver-boek ".$entry."<br>";
//echo "gevonden epub = $naam<br>";
// filter de schrijvernaam er uit
// links van -
$pos = strpos($naam, '-');
echo "teken - staat op ".$pos." plaats<br>";
if ($pos<=1){echo "Bij $naam geen scheiding tussen schrijver en boeknaam gevonden.<br><br>";}
// de naam die daar staat is:
// alles naar kleine letters.
$schrijver = strtolower(substr($naam,0,$pos));
$boektitel = strtolower(substr($naam,$pos+1));
echo "<br>Schrijver is dan ".$schrijver."<br>";
echo "Boektitel is dan ".$boektitel."<br>";
// komma en spatie er uit filteren
$schrijver=TRIM($schrijver);
$schrijver=str_replace(',', '_', $schrijver);
$schrijver=str_replace(' ', '_' , $schrijver);
$schrijver="$schrijver";
// kijk of er al een mapnaam bestaat en maak anders een map aan
$nieuwemap=$schrijver;
echo "<br>Nieuwe mapnaam is: ".$nieuwemap."<br>";
if (!file_exists($nieuwemap))
{
mkdir($nieuwemap, 0777, true);
echo "Map gemaakt met naam ".$nieuwemap."<br>";
}else{
echo "map ".$nieuwemap." is al aanwezig. Dus niet opnieuw aangemaakt.<br><br>";
}
$nieuwemap=TRIM($nieuwemap);
$boektitel=TRIM($boektitel);
// verplaatst naar de gemaakte mapnaam
//$van = "../epub/".$volledigenaam;
//$van = $entry;
$naar= $nieuwemap."/".$boektitel;
echo "Verhuizen van ".$van."<br>";
echo " naar ".$naar."<br>";
rename($van, $naar);
echo "<br><br>";
echo "<br>===================<br>";
}
}
}
}
}
$path = ".";
if ( $files = scandir( $path ) )
{
$extensions = array( "epub", "jpg", "png" );
foreach ( $files as $epub )
{
$fileExtension = strtolower( pathinfo( $epub, PATHINFO_EXTENSION ) );
if( in_array( $fileExtension , $extensions ) )
{
echo $epub . '<br />' . PHP_EOL;
}
}
}
?>
Het houdt o.a. rekening met het ontbreken van een schrijver.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
<?php
$aDirectories = glob( "." . '*', GLOB_ONLYDIR );
sort( $aDirectories ); // sorteren
$extensions = array( "epub" );
foreach ( $aDirectories as $sDirectory )
{
echo "Zoek naar epub in de map<br>";
// lees de epubs in mappen
if ( $handle = opendir( $sDirectory ) )
{
while ( FALSE !== ( $entry = readdir( $handle ) ) )
{
$fileExtension = strtolower( pathinfo( $entry, PATHINFO_EXTENSION ) );
if( in_array( $fileExtension , $extensions ) )
{
echo "Gevonden: entry=" . $entry . "<br />";
$volledigenaam = $entry;
echo "Blijft over: entry=".$entry."<br>";
$extentie = strtolower( substr( $entry, -4 ) ); // laatste 4 tekens
echo "extentie=".$extentie."<br>";
// lees alleen maar epubs in
if ( $extentie == "epub" )
{
// omzetten naar kleine letters
$naam= strtolower( $entry );
echo "schrijver-boek " . $entry . "<br />";
//echo "gevonden epub = $naam<br>";
$boek = explode( "-", $entry );
echo '<pre>' . print_r( $boek, TRUE ) . '</pre>';
if ( count( $boek ) == 1 )
{
$schrijver = 'Onbekend';
$boektitel = trim( $boek[0] );
} else {
$schrijver = trim( $boek[0] );
$schrijver = str_replace( ',', '_', $schrijver );
$schrijver = str_replace( ' ', '_', $schrijver );
$boektitel = trim( $boek[1] );
}
echo "Schrijver is dan " . $schrijver . "<br />";
echo "Boektitel is dan " . $boektitel . "<br />";
// kijk of er al een mapnaam bestaat en maak anders een map aan
$nieuwemap = $schrijver;
echo "Nieuwe mapnaam is: " . $nieuwemap . "<br />";
if( !is_dir( $nieuwemap ) )
{
if ( mkdir( $nieuwemap, 0777, true) === TRUE )
{
echo "Map gemaakt met naam ".$nieuwemap."<br />";
}
} else {
echo "map ".$nieuwemap." is al aanwezig. Dus niet opnieuw aangemaakt.<br /><br />";
}
// verplaatst naar de gemaakte mapnaam
$van = $volledigenaam;
$naar= $nieuwemap . "/" . $boektitel;
echo "Verhuizen van " . $van . "<br />";
echo "naar " . $naar . "<br />";
rename( $van, $naar );
echo "<br />===================<br />";
}
}
}
}
}
?>
$aDirectories = glob( "." . '*', GLOB_ONLYDIR );
sort( $aDirectories ); // sorteren
$extensions = array( "epub" );
foreach ( $aDirectories as $sDirectory )
{
echo "Zoek naar epub in de map<br>";
// lees de epubs in mappen
if ( $handle = opendir( $sDirectory ) )
{
while ( FALSE !== ( $entry = readdir( $handle ) ) )
{
$fileExtension = strtolower( pathinfo( $entry, PATHINFO_EXTENSION ) );
if( in_array( $fileExtension , $extensions ) )
{
echo "Gevonden: entry=" . $entry . "<br />";
$volledigenaam = $entry;
echo "Blijft over: entry=".$entry."<br>";
$extentie = strtolower( substr( $entry, -4 ) ); // laatste 4 tekens
echo "extentie=".$extentie."<br>";
// lees alleen maar epubs in
if ( $extentie == "epub" )
{
// omzetten naar kleine letters
$naam= strtolower( $entry );
echo "schrijver-boek " . $entry . "<br />";
//echo "gevonden epub = $naam<br>";
$boek = explode( "-", $entry );
echo '<pre>' . print_r( $boek, TRUE ) . '</pre>';
if ( count( $boek ) == 1 )
{
$schrijver = 'Onbekend';
$boektitel = trim( $boek[0] );
} else {
$schrijver = trim( $boek[0] );
$schrijver = str_replace( ',', '_', $schrijver );
$schrijver = str_replace( ' ', '_', $schrijver );
$boektitel = trim( $boek[1] );
}
echo "Schrijver is dan " . $schrijver . "<br />";
echo "Boektitel is dan " . $boektitel . "<br />";
// kijk of er al een mapnaam bestaat en maak anders een map aan
$nieuwemap = $schrijver;
echo "Nieuwe mapnaam is: " . $nieuwemap . "<br />";
if( !is_dir( $nieuwemap ) )
{
if ( mkdir( $nieuwemap, 0777, true) === TRUE )
{
echo "Map gemaakt met naam ".$nieuwemap."<br />";
}
} else {
echo "map ".$nieuwemap." is al aanwezig. Dus niet opnieuw aangemaakt.<br /><br />";
}
// verplaatst naar de gemaakte mapnaam
$van = $volledigenaam;
$naar= $nieuwemap . "/" . $boektitel;
echo "Verhuizen van " . $van . "<br />";
echo "naar " . $naar . "<br />";
rename( $van, $naar );
echo "<br />===================<br />";
}
}
}
}
}
?>
Toevoeging op 14/09/2020 11:23:12:
Ik zie inmiddels dat het verwijderen van kommas en spaties in de titel moet en niet in de schrijver.
Maar goed, alles behoeft uiteindelijk verbetering.
Toevoeging op 14/09/2020 11:29:00:
Als regels 33-41 worden vervangen, lukt het beter.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
if ( count( $boek ) == 1 )
{
$schrijver = 'Onbekend';
$boektitel = trim( $boek[0] );
} else {
$schrijver = trim( $boek[0] );
$boektitel = trim( $boek[1] );
}
$schrijver = str_replace( ',', '_', $schrijver );
$schrijver = str_replace( ' ', '_', $schrijver );
$boektitel = str_replace( ',', '_', $boektitel );
$boektitel = str_replace( ' ', '_', $boektitel );
{
$schrijver = 'Onbekend';
$boektitel = trim( $boek[0] );
} else {
$schrijver = trim( $boek[0] );
$boektitel = trim( $boek[1] );
}
$schrijver = str_replace( ',', '_', $schrijver );
$schrijver = str_replace( ' ', '_', $schrijver );
$boektitel = str_replace( ',', '_', $boektitel );
$boektitel = str_replace( ' ', '_', $boektitel );
Ik ben er nog niet want ik moet nu nog serie en volgnummer er uit filteren.
Dan zo'n 6000 boeken normalizeren voor een database en dan alle boeken in een schrijvermap met linken vanuit de database.
Ik heb dus nog wat te doen
Toevoeging op 14/09/2020 11:46:17:
Elk boek moet dus schrijver-=volgordenummer+serie(titel.epub o.i.d. benoemd gaan worden.
Wellicht eerst daar een script op los laten.
Peter