Не пытайтесь делать все сразу.
Разделите вашу задачу на более мелкие куски.
И переходите к следующему, только если у вас есть готовый тест и предыдущая часть.
Сначала научитесь находить разницу между двумя массивами:
Hardcode 2 немного отличается массивами в вашем скрипте и играет с array_diff()
функцией
Далее научитесь читать файлы из каталога. Не рекурсивный, только один.
Получите массив имен файлов.
Проверьте это с print_r()
Теперь вы можете попробовать прочитать 2 каталога в массивах и сравнить их.
Если он все еще не работает, отладьте его : распечатайте содержимое массивов, сравните его с глазами. Обратитесь за помощью к SO для этой конкретной и определенной проблемы с прямыми и четкими входными данными.
в итоге получим массив отличий, напечатанный на экране , чтобы убедиться, что он содержит фактические данные.
Ну, теперь вы можете перейти к части копирования. Та же техника.
И тогда вы можете перейти к рекурсивным каталогам. Та же техника - двойная проверка и тестирование на каждом этапе. Выведите как можно больше отладочной информации.
Включите отчеты об ошибках и убедитесь, что вы видите каждую возникшую ошибку (просто сделайте преднамеренную и посмотрите). каждая операция с файловой системой приводит к ошибке при сбое. Итак, вы увидите причину. И отладка операций файловой системы. Распечатайте изнутри условия, чтобы увидеть, было ли оно выполнено. Вывести содержимое переменной, возвращаемые функцией значения.
Когда-нибудь стало любопытно, что это за $dirsource.DIRECTORY_SEPARATOR.$file
строка фактическое значение?