I have the following simple code, to connect to a local server and retrieve an index.php file.
$username = "Admin";
$password = "Admin";
$url = "192.168.1.33";
$connection = ssh2_connect($url);
if (!ssh2_auth_password($connection, $username, $password)) throw new Exception('Unable to connect.');
if (!$sftp = ssh2_sftp($connection)) throw new Exception('Unable to create SFTP connection.');
$localDir  = 'C:/downloadTest';
$remoteDir = '/htdocs';
$files = scandir('ssh2.sftp://' . $sftp . "/".$remoteDir);
if (!empty($files)) {
  foreach ($files as $file) {
    if ($file == "index.php") {
        //echo $remoteDir."/".$file;
        //echo $localDir.'/'.$file;
        ssh2_scp_recv($connection, "$remoteDir/$file", "$localdir/$file");
    }
  }
} 
However after executing I always get an Error:
Warning: ssh2_scp_recv(): Unable to receive remote file in C:\path\to\index\index.php on line 21
On the server (Windows 10) I enabled OpenSSH Server and added the following lines to the config:
Subsystem sftp sftp-server.exe -d "C:\Server\data\"
ChrootDirectory C:\Server\data
PermitTunnel no
AllowAgentForwarding no
AllowTcpForwarding no
X11Forwarding no
AllowUsers Admin
I am able to connect through WinSCP through the SFTP Protocol, but not the SCP protocol.
Printing the file list works, so the connection is there 100%.
Local PC & Server are Windows 10.
Edit:
I am able to download files from the root folder with the following code:
<?php
$username = "Admin";
$password = "Admin";
$url = "192.168.1.33";
$remoteDir = "";
$localDir = "downloadtest\\";
$connection = ssh2_connect($url);
if (!ssh2_auth_password($connection, $username, $password)) throw new Exception('Unable to connect.');
if(!$stream = ssh2_sftp($connection)){
  die("Unable to create stream");
}
if(!$dir = opendir("ssh2.sftp://{$stream}/{$remoteDir}")){
  die("Could not open dir");
}
$files = array();
while (false !== ($file = readdir($dir)))
{
    if ($file == "." || $file == "..")
        continue;
    $files[] = $file;
}
foreach ($files as $file){
  if(!$remote = @fopen("ssh2.sftp://{$stream}/{$remoteDir}{$file}","r")){
    echo "unable to open remote file: $file\n";
    continue;
  }
  
  if(!$local = @fopen($localDir . $file, "w")){
    echo "Unable to create local file: $file\n";
    continue;
  }
  $read = 0;
  $filesize = filesize("ssh2.sftp://{$stream}/{$remoteDir}{$file}");
  while ($read < $filesize && ($buffer = fread($remote, $filesize - $read))){
    $read += strlen($buffer);
    if(fwrite($local, $buffer) === false){
      echo "Unable to write to local file: $file\n";
    }
  }
  fclose($local);
  fclose($remote);
}
?>
However this is not through scp but sftp. With sftp I can download wherever I like (root folder or sub folder), with scp it does not work at all and always gives me the error Warning: ssh2_scp_recv(): Unable to receive remote file in C:\path\to\index\index.php on line 21
I am 100% sure it is not a rights issue, since I can download files through the cmd with the following command
pscp -scp Admin@192.168.1.33:/htdocs/index.php C:\downloadTest\index.php